星级打分
平均分:NAN 参与人数:0 我的评分:未评
本帖最后由 jmx 于 2024-8-15 17:24 编辑
远程服务器不能链接X Server问题远程桌面在imshow时, 出现: cannot connected to x server.常用解决办法是将opencv中imshow改为imread保存图片后再浏览, 但如果imshow涉及交互我们又应该怎么办呢? 这里先简单介绍一下VNC. VNC(Virtual Network Computing)是一种图形化的桌面共享协议,它使用远程帧缓冲协议 (RFB) 来远程控制另一台计算机,它将键盘和鼠标事件从一台计算机传输到另一台计算机,通过网络向另一个方向转发图形屏幕更新。对于一般性的GUI程序运行需求,我们其实可以借助VNC在不安装完整桌面环境的情况下方便快捷的实现 1.安装有关依赖 - # 安装基本的依赖包
- apt update && apt install -y libglu1-mesa-dev mesa-utils xterm xauth x11-xkb-utils xfonts-base xkb-data libxtst6 libxv1
-
- # 安装libjpeg-turbo和turbovnc
- export TURBOVNC_VERSION=2.2.5
- export LIBJPEG_VERSION=2.0.90
- wget http://aivc.ks3-cn-beijing.ksyun ... peg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
- wget http://aivc.ks3-cn-beijing.ksyun.com/packages/turbovnc/turbovnc_${TURBOVNC_VERSION}_amd64.deb
- dpkg -i libjpeg-turbo-official_${LIBJPEG_VERSION}_amd64.deb
- dpkg -i turbovnc_${TURBOVNC_VERSION}_amd64.deb
- rm -rf *.deb
复制代码- # 注意, 此处代码每次登录云主机都要运行, 否则不一定能连上
- # 启动VNC服务端,这一步可能涉及vnc密码配置(注意不是实例的账户密码)。另外如果出现报错xauth未找到,那么使用apt install xauth再安装一次
- rm -rf /tmp/.X1* # 如果再次启动,删除上一次的临时文件,否则无法正常启动
- USER=root /opt/TurboVNC/bin/vncserver :1 -desktop X -auth /root/.Xauthority -geometry 1920x1080 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/passwd -fp /usr/share/fonts/X11/misc/,/usr/share/fonts -rfbport 6006
-
- # 检查是否启动,如果有vncserver的进程,证明已经启动
- ps -ef | grep vnc
复制代码
以上启动Server时,手动设置了rfbport=6006端口,下面通过SSH隧道将实例中的6006端口代理到本地 2. SSH隧道win用户可以直接使用图形工具.这里, 我采用SSH代理命令. 其中root@123.125.240.150和42151分别是实例中SSH指令的访问地址与端口,请找到自己实例的ssh指令做相应替换。6006:127.0.0.1:6006是指代理实例内6006端口到本地的6006端口。 (注意:执行完这条ssh命令,没有任何日志是正常的,只要没有要求重新输入密码或错误退出, Windows下的cmd/powershell如果一直提示密码错误,是因为无法粘贴,手动输入即可(正常不会显示正在输入的密码)) 3. 使用首先, 本地先下载turbovnc客户端进行连接: - ubuntu: http://aivc.ks3-cn-beijing.ksyun.com/packages/turbovnc/turbovnc_2.2.5_amd64.deb
- MacOS: http://aivc.ks3-cn-beijing.ksyun.com/packages/turbovnc/TurboVNC-2.2.5.dmg
- Windows: http://aivc.ks3-cn-beijing.ksyun.com/packages/turbovnc/TurboVNC-2.2.5-x64.exe
复制代码
安装完毕后, 在云主机输入:
- rm -rf /tmp/.X1* # 如果再次启动,删除上一次的临时文件,否则无法正常启动
- USER=root /opt/TurboVNC/bin/vncserver :1 -desktop X -auth /root/.Xauthority -geometry 1920x1080 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/passwd -fp /usr/share/fonts/X11/misc/,/usr/share/fonts -rfbport 6006
- # 检查是否启动,如果有vncserver的进程,证明已经启动
- ps -ef | grep vnc
- export DISPLAY=:1
复制代码
打开turbovnc客户端, 输入相应端口, 密码即可.
eg.以下python代码举例 - import numpy as np
- import cv2
-
- h = 500
- w = 500
- img = 255 * np.ones((h ,w , 3), dtype=np.uint8)
- cv2.imshow("", img)
- cv2.waitKey(0)
复制代码
登录云主机, 输入: - rm -rf /tmp/.X1* # 如果再次启动,删除上一次的临时文件,否则无法正常启动
- USER=root /opt/TurboVNC/bin/vncserver :1 -desktop X -auth /root/.Xauthority -geometry 1920x1080 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/passwd -fp /usr/share/fonts/X11/misc/,/usr/share/fonts -rfbport 6006
- ps -ef | grep vnc
- export DISPLAY=:1
复制代码
打开cmd, 输入(eg: ssh -CNg -L 6006:127.0.0.1:6006 root@123.125.240.150 -p 42151. 注意, 输入密码默认不显示, 输入完直接回车即可): 打开turbovnc, 输入: 运行python代码: 至此, 大功告成 参考链接: https://www.autodl.com/docs/gui/ |