在远程SSH登录的时候,拥有一个图形桌面会使人心情舒畅许多。我们的服务器经常有许多人同时登陆,而TeamViewer不好多开,这时VNC就是一个不错的替代解决方案。
2019/04/23
服务器的CentOS7系统自带TigerVNC。Shell执行
vncserver
即可一键开启VNCServer。其后可以跟参数以设定各种配置,包括用户,端口,分辨率等。例如
vncserver :1 -rfbport 5902
其中 :1 指定开启为系统的1号VNCServer,其端口默认对应系统中5900+1=5901端口。然而 -rfbport 5902 指定了使用5902端口,实际开启时就会使用5902端口而不是5901端口。
首次执行VNCServer时会提示设置密码,并在用户Home目录下生成一些文件。
~/
├ .Xauthority
└ .vnc [Folder]
├ config
├ passwd
└ xstartup
其中xstartup文件在VNCServer建立之后被执行,它使用X Window System启动图形桌面。
每次执行VNCServer后,在~/.vnc/目录下会生成log文件,通过浏览log可以把握VNCServer是否运行正常。(这很重要
另外,我们随时可以Shell执行
vncserver -list
来查看属于本用户的正在运行的VNCServer;若要关闭2号进程,可以Shell执行
vncserver -kill :2
另外地,如果出现端口抢占,server失联(PID文件失踪)等情况,可以Shell执行
ps -aux | grep Xvnc
来查看所有用户正在运行的VNCServer进程。
控制端方面,我选择了VNC Viewer来连接。如在被控端开启了1号VNCServer,控制端的连接地址就写为 xxx.xxx.xxx.xxx:1 .
其实之所以写这篇文章,是因为我花了近一天时间踩VNCServer的坑...
1. 通过观察log,发现VNCServer没有正常启动。
前文提到,xstartup用于启动图形桌面。若仅仅是图形桌面没有启动,VNC Viewer应当可以正常连接VNCServer,只是会显示黑屏。这里我只踩到了关于xstartup的陷阱。
-
xstartup没有权限
sudo chmod a+x /etc/X11/xinit/xinitrc
- xstartup有运行,但是报错
一个原因是Anaconda与运行环境有冲突。检查是否安装了Anaconda,并且环境变量 $PATH 中Anaconda在 /usr/bin 之前。
若确定是运行环境冲突导致xstartup运行出错,可在 ~/.vnc/xstartup 文件的开始与末尾分别添加
PATH_TEMP="$PATH"
export PATH="/usr/bin:$PATH"
export PATH=PATH_TEMP
上述方法通过 在xstartup运行时 暂时提升环境变量 $PATH 中 /usr/bin 查找优先级的方式 规避运行环境冲突。我觉得是一种简洁、方便、无公害的做法。
2. VNCServer正常运行,但控制端无法连接到VNCServer。
确定VNCServer正常运行后,大概率是VNC端口的连接被阻断了。犯罪嫌疑人一个是服务器Linux系统的防火墙,另一个是服务器管理软件的防火墙,需要在它们中检查VNC指定端口(如5901端口)是否被允许通信。