Linux设置VNC服务器
最近配了一个主要作为服务器的电脑,但也时常用到图形软件,所以只有ssh不够用,Windows的远程桌面(RDP)不用自己设,默认开启的,效率也不错,但是Linux想搞一个远程桌面就不容易了,首先尝试了xrdp,因为rdp效率比较高一些,但是不能用GPU加速,需要OpenGL的软件都运行不了,虽然找到了一些tweak,但是设置麻烦,表现也不好,所以又将目标转向VNC,但一般的vnc也是要配合VirtualGL,一般情况还行,但是我用singularity包已经用了一层,所以再用一层就不知道能不能用了,最后发现了x11vnc,它的原理就是将现有物理显示器的图像给传过来,所以本地能干的事,远程也都能干,可惜原作者已经停止开发,虽然community还再维护,但已经不会有太大的更新了,另外就是需要接一个物理显示器才行。
Server设置
首先安装,不同Linux发行版不一样,关键词x11vnc
自己装就行了。然后要实现远程登录,就得通过启动器,常见的有gdm, lightdm, sddm
等, 区别就是auth文件不一样,这里给出lightdm
和sddm
的例子,为了开机启动,我们要写一个service,一般放在/etc/systemd/system/
,注意调整。
先创建密码
1 | sudo x11vnc -storepasswd [你的密码] /etc/x11vnc.pass |
serivce文件,
1 |
|
lightdm
用的light-locker
有一个bug,每次锁屏会开一个新的display,这样的话,你再连就是黑屏,目前我是用xscreensaver
代替light-locker
。
对于不同的启动器只需要修改-auth xxx
,目前我遇到的只有sddm (KDE5)
比较特殊,每次启动,auth文件都是随机命名的,好在路径固定,我们只需要调用sh
就行了
1 | ExecStart=/bin/sh -c "/usr/bin/x11vnc -xkb -noxrecord -display :0 -auth /var/run/sddm/* -rfbauth /etc/x11vnc.pass" |
然后enable并启动这个服务,1
2
3sudo systemctl daemon-reload
sudo systemctl enable x11vnc
sudo systemctl start x11vnc
没有意外就应该可以成功启动了,客户端推荐TightVNC。
Reference
- 本文链接:http://shengdie.github.io/2019/01/29/vnc-linux/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
分享