文章目录
VNC(Virtual Network Computing )是一种图形化的桌面共享协议,它使用远程帧缓冲协议 (RFB) 来远程控制另一台计算机,它将键盘和鼠标事件从一台计算机传输到另一台计算机,通过网络向另一个方向转发图形屏幕更新。 对于一般性的GUI程序运行需求,我们其实可以借助VNC在不安装完整桌面环境的情况下方便快捷的实现,下面介绍如何借助turbovnc工具,在实例中运行一个GUI程序并在本地电脑进行显示:
1.安装VNC和必要的一些图形显式库:
# 安装基本的依赖包 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.com/packages/libjpeg-turbo/libjpeg-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
注意:启动VNC服务
root@autodl-container-011d409f64-3952354b:~# ps -ef | grep vnc root 1191 1129 0 19:49 pts/0 00:00:00 grep --color=auto vnc root@autodl-container-011d409f64-3952354b:~# rm -rf /tmp/.X1* root@autodl-container-011d409f64-3952354b:~# ps -ef | grep vnc root 1197 1129 0 19:49 pts/0 00:00:00 grep --color=auto vnc root@autodl-container-011d409f64-3952354b:~# 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 Desktop 'TurboVNC: autodl-container-011d409f64-3952354b:1 (root)' started on display autodl-container-011d409f64-3952354b:1 Starting applications specified in /root/.vnc/xstartup.turbovnc Log file is /root/.vnc/autodl-container-011d409f64-3952354b:1.log root@autodl-container-011d409f64-3952354b:~# ps -ef | grep vnc root 1209 1 3 19:49 pts/0 00:00:00 /opt/TurboVNC/bin/Xvnc :1 -desktop TurboVNC: autodl-container-011d409f64-3952354b:1 (root) -httpd /opt/TurboVNC/bin//../java -auth /root/.Xauthority -geometry 1920x1080 -depth 24 -rfbwait 120000 -rfbauth /root/.vnc/passwd -x509cert /root/.vnc/x509_cert.pem -x509key /root/.vnc/x509_private.pem -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts -deferupdate 1 -dridir /usr/lib/x86_64-linux-gnu/dri -registrydir /usr/lib/xorg -desktop X -auth /root/.Xauthority -rfbwait 120000 -rfbport 6006 root 1400 1129 0 19:49 pts/0 00:00:00 grep --color=auto vnc root@autodl-container-011d409f64-3952354b:~#
2.SSH隧道
2.1.本地安装openssh服务器
右键此电脑→属性→应用→可选功能→添加可选功能
找到OpenSSH服务器(注意是服务器不是OpenSSH客户端)
2.2.服务开启
Win+S,键入服务,打开本地服务界面,找到OpenSSH SSH Server,启动方式改为自动
cmd或Windows PowerShell里键入net stop sshd,net start sshd 重启本地的 ssh 服务即可。
如提示下图可管理员权限运行
2.3.显示当前安装的 SSH 版本信息
ssh -V 命令在 SSH(Secure Shell)客户端中用来显示当前安装的 SSH 版本信息。这个命令提供了关于 SSH 客户端版本的详细信息,包括版本号和使用的加密库等。
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2 表示:
- OpenSSH_for_Windows_8.1p1:这是你在 Windows 系统上使用的 OpenSSH 版本号。OpenSSH 是一种广泛使用的开源 SSH 工具,用于远程管理和安全通讯。
- LibreSSL 3.0.2:这是与 OpenSSH 配合使用的加密库版本号。LibreSSL 是一个从 OpenSSL 发展来的开源加密库,用于提供加密功能和安全通讯。
2.3.设置一个 SSH 隧道
在本地的Terminal中执行命令
ssh -CNgv -L 6006:127.0.0.1:6006 root@region-1.autodl.com -p 37881
其中6006:127.0.0.1:6006指代理AutoDL主机vncserver的6006端口到本地的6006端口,root@region-1.autodl.com -p 37881为登陆指令的访问地址与端口。
执行上述指令后需要输入登陆密码登陆AutoDL主机,保持该输入该命令后Terminal的开启状态,关闭后会杀掉进程,导致VNC Viewer登陆失败。
-C: 启用压缩选项。这有助于减少通过 SSH 隧道传输的数据量,可能会提升速度,特别是在带宽有限的情况下。 -N: 表示 SSH 客户端不执行远程命令,只用于转发端口。这在只需要端口转发而不需要执行其他命令的场景中非常有用。 -g: 允许远程主机连接到本地转发的端口。这通常在你希望其他机器能访问通过你机器转发的服务时使用。 -v: 启用详细模式,可以显示更多的调试信息。这对于诊断连接问题非常有帮助。 -L 6006:127.0.0.1:6006: 这是本地端口转发的设置。它意味着将本地计算机上的 6006 端口转发到远程机器(region-1.autodl.com)上的 127.0.0.1 地址的 6006 端口。 这样做的结果是,如果你在本地计算机上访问 6006 端口,流量将通过 SSH 隧道发送到远程机器的 6006 端口。 root@region-1.autodl.com -p 37881: 这部分是 SSH 连接的目标地址和端口。使用用户 root 连接到 region-1.autodl.com,通过端口 37881。
==注意
输入密码时最好手动输入密码
3.VNC Viewer客户端登录
在本地下载VNC Viewer客户端,在VNC Server栏输入127.0.0.1:6006,点击OK即可登陆远程桌面,这里还需要输入前面在AutoDL主机Terminal中启动VNC服务器时设置的密码。
4.测试
在终端中添加环境变量:export DISPLAY=:1,然后再执行您的命令(注意在同一终端执行)
可以使用以下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)
如果在本地的vnc client显示图片,证明安装和启动过程无误
5.参考
AutoDL帮助文档-远程桌面
关于如何实现autodl服务器的可视化桌面
AutoDL远程桌面改进(显示桌面环境)