TigerVNC安装使用

#blog

背景:最近司内人员增多,且很多任务都开始使用[[Linux]]主机对数据进行处理。而一些任务,由于需要频繁的对图片类数据进行分析解读,所以 GUI 的访问方式是非常有必要的。

如果是同时只可能有一个人使用,那么[[xrdp]]是个不错的选择,安装好之后,可以像使用windows的远程桌面一样使用 [[Linux]] 的远程桌面。而且 [[windows]] 用户不需要安装额外的软件,系统自带的 [[mstsc]] 远程桌面客户端就可以用来访问 GUI 界面。Mac 用户也只需要安装[[Parallels Client]]就可以访问[[xrdp]]创建的远程桌面。但是缺点也是显而易见的,不管是[[windows]]的远程桌面,还是兼容[[windows]]远程桌面的 [[xrdp]],同一时刻,都只能有一个用户访问,多用户同时执行任务的场景不太适用。

多用户的场景下,更常见的解决方案是 [[VNC]], (Virtual Network Computing) 。当然还有一些其他的解决方案,不在本文讨论的范围之内。

TigerVNC

[[TigerVNC]],官方网站:TigerVNC,balabalabala…

请自行查阅相关资料。

TIgerVNC 安装

本文使用的环境为 [[ubuntu]] 20.04,使用其他环境,如 [[Centos]],[[Fedora]] 等,请自行查阅相关资料。

注意本文所做设置,仅适用于 [[ubuntu]] desktop 版本,默认安装的桌面。其他一些桌面环境,启动设置,请参考本文最后的参考资料内容。

执行下述命令就可以安装 [[TigerVNC]]:

sudo apt install tigervnc-standalone-server

TigerVNC设置

请注意,[[VNC]]设置,是针对每个系统中的用户进行设置的,其配置文件存储在 ~/.vnc 目录下,所以下面看到的所有配置,都没有以 sudo 执行。以某个用户启动的 vncserver,只能处理该用户 home 目录下的相应配置文件。

密码设置

执行下述命令,即可设置 vnc 密码,该密码在连接到 vnc 桌面的时候输入,必须为 6~8 位。

vncpasswd

桌面启动设置

编辑 ~/.vnc/xstartup 文件,写入以下内容:

#!/bin/sh  
PATH=/bin:/sbin:/usr/bin:/usr/sbin  
unset SESSION_MANAGER  
unset DBUS_SESSION_BUS_ADDRESS  
exec /usr/bin/gnome-session &

这里的内容,其实就是为每一个使用 VNC 连接的会话,启动一个独立的桌面环境进程。
需要注意,因为 Linux 下有很多不同的桌面环境(Desktop Environment,DE),有些桌面环境的设置类似,有些有一定的不同,本文最后的参考资料列举了大多数桌面环境的启动设置,但由于 Linux 系统的复杂性,并不一定所有的配置都可以照搬,本文所处的工作环境就出现了问题。

并将该文件设置为可执行:

chmod a+x ~/.vnc/xstartup

TigerVNC使用

Server 端

Server 端执行的这些命令,需要 SSH 连接到 Server 执行。

启动一个 VNC Server
vncserver -depth 24 -geometry 1280x800 -name mydesktop -localhost no :1

这里的参数意义:

  • depth,使用的色彩,一般不需要设置,如果带宽非常低,可以使用 8/16 等值来设置比较低的色彩配置,降低数据量,减少带宽使用
  • geometry,连接后的分辨率,按照需要设置即可
  • localhost,由于 vnc 本身并不使用安全连接,所以默认只能在 127.0.0.1 地址上进行访问,但这就没有任何意义了,所以指定该参数为 no,保证远程可以访问
  • name
  • :1 这里是 vnc 比较有趣的一个地方,因为 vnc 的本意就是让多个使用者(这里指远程 GUI 界面的用户,区别于 Linux 系统的用户)同时使用 GUI 界面,而且是同一个用户,可以提供多个使用者远程使用。那么如何区分这些使用者,就成了一个问题。VNC 协议给出的解决方案是,给每一个使用者一个编号,并根据编号分配给使用者一个端口进行连接,从 5901 开始,例如上述命令代表在 5901 端口起动了编号1的 vncserver,换成:2 则是在 5902 端口起动了编号为 2 的 vncserver。
列举所有 VNC Server
vncserver -list

该命令,可以列举出所有已经运行的 VNC Server

停止/杀死一个 VNC Server
vncserver -kill :1
停止/杀死所有 VNC Server
vncserver -kill :*

需要注意的是,停止/杀死一个 VNC Server,那么其中启动的所有进程,都会被一并杀死,所有未保存的内容都会丢失,因此,杀死 VNC Server 之前,请一定要跟其他用户确认。

Client 端

[[TigerVNC]]自带了一个连接客户端,不过功能比较简单,本文推荐使用[[RealVNC]]的客户端进行连接:

Download VNC Viewer | VNC® Connect

安装好后,启动客户端,在空白处右键,选择 New Connection 即可新建连接。

VNC Server 处填写服务器地址和端口,如想要连接 38 服务器,编号 3 的 VNC Server,填写:

192.168.1.38:5903

Name 填写一个容易记住的名称即可。

Options选项卡中,Picture quility 可以根据网络情况做相应的设置,局域网,网速允许的情况下,应该选择 High

VNC 客户端连接成功后,如果直接关掉 VNC 客户端,那么在 VNC 中打开的程序,会继续在远程运行,与远程桌面类似,除非使用者注销当前桌面或手动停止/杀死该 VNC Server。

其他注意事项

有些软件不能跨多个VNC桌面使用
目前我们都使用同一个帐号连接的 VNC,所以本质上,所有人连接的是同一个用户空间,只是起动了不同的桌面进程。有些软件,例如 [[firefox]] 等,同时只能在一个vnc桌面上显示窗口。所以使用过程中,如果发现有某个软件,打不开,没有界面,那么有可能是当前机器上其他的用户已经起动了这个软件,需要其他用户推出这个软件才行。

另外,[[ubuntu]]桌面系统安装好之后,默认的电源设置,过几分钟之后会锁屏,锁屏之后再登录系统需要密码,但是在这里的设置,输入密码之后,直接进不去桌面了,只能 kill 掉 vnc 桌面再进去。暂时还不知道为什么以及怎么解决,所以只能先给电源里面的锁屏,设置成从不。

错误配置

本文中 xstartup文件的配置,参考了几十个相关的链接和文档,每个文档的写法都不太一样,不过最终目的都是为了启动桌面环境,或者某个应用程序。

根据本文参考的第一个链接中的写法,其实可以成功启动桌面。在带GPU的服务器上,只用vnc桌面,看上去不会有任何问题,但是只要ssh的命令行出现一些跟vnc相关的命令,按Tab键等等,整个vnc桌面就会只剩下 一个命令行终端,或者直接绿屏不能用了。而查看 vnc目录下的log,会出现如下的错误”

Xlib:  extension "DPMS" missing on display ":2".
** (x-window-manager:277680): WARNING **: 19:42:55.935: AT-SPI: Could not obtain desktop path or name
** (x-window-manager:277680): WARNING **: 19:42:55.995: atk-bridge: GetRegisteredEvents returned message with unknown signature

网上说什么的都有,我自己是怀疑跟NV的驱动有关系,也试了用 export CUDA_VISIBLE_DEVICES=“” 放到xstartup 文件了里面去,也没啥效果。

最后我是从本文参考的第二个链接里面找到了一个能用的配置,而且看上去非常的简单。

参考:
how-to-install-configure-vnc-server-on-ubuntu-20-04
TigerVNC server only getting black screen on connect · Issue #684 · TigerVNC/tigervnc · GitHub

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐