2021-08-09
< view all posts前面的笔记中记录了如果通过VNC方式远程连接Linux服务器的桌面环境,这篇笔记记录一下另一种连接方式:RDP。
在进入正题之前想提一下,最后其实我还是在用VNC方式连接。虽然RDP有很多好处,例如自带加密,例如具有语义性,以及(理论上)更快的速度。但是尴尬的是,实际测试下来我发现RDP和VNC方式连接我的服务器都很卡(尽管我都设置了压缩,并且都只用了8bit色彩深度)。相比之下,VNC的卡仅仅是图像延迟,而RDP的卡则是感觉系统反应的迟钝,可能是因为底层优化的不好,语义性似乎反而有点成为拖累。
而另一个原因是RDP的Session问题,RDP(指Linux上使用较主流的XRDP)并没有提供Session管理的功能,因此不能保证是连接到之前使用的Session还是新Session(似乎和RDP的配置、软件和编译的版本都有关,网上的介绍比较模糊)。因此为了保证总是能连接到固定的Session,最好的方法就是启动一个VNC Server,用RDP连接到这个VNC Server的Session。但是这样似乎显得多次一举了,不如直接就用VNC连接,还更节省资源。
下面进入正题。这里默认已经按照这篇笔记的方式配置了Xfce4。首先安装XRDP:
sudo apt install xrdp
XRDP在安装完成之后会自动注册并启动服务,可以通过以下命令查看它的状态:
sudo systemctl status xrdp
因为XRDP需要读取 /etc/ssl/private/ssl-cert-snakeoil.key 这个文件,而这个文件只有 ssl-cert 组有访问权限,因此需要给 xrdp 用户添加这个组。
sudo adduser xrdp ssl-cert
重启服务:
sudo systemctl restart xrdp
此时可以在Windows机器上运行 mstsc 命令,输入服务器地址进行连接。连接可能在登录上之后闪退。有两种解决方案:
连接到新Session
如果希望直接连接到一个新Session的话,打开文件 /etc/xrdp/startwm.sh ,注释掉最后两行,并在最后一行添加 startxfce4 ,即:
# test -x /etc/X11/Xsession && exec /etc/X11/Xsession # exec /bin/sh /etc/X11/Xsession startxfce4
再次连接,就会发现成功连接到了一个新的桌面。
连接到VNC的Session(参考此处)
如果按照之前的笔记启动了VNC服务,那么可以将DRP连接到VNC Server启动的Session。好处是这样就可以固定连接的Session了。打开 /etc/xrdp/xrdp.ini 文件,找到开头为 [vnc-any] 的条目,填入此前设置的VNC的配置,如:
[vnc-any] name=vnc-any lib=libvnc.so ip=localhost port=5901 # VNC Server Session的端口号 username=ubuntu # 启动VNC服务的用户 password=******** # 登录VNC服务的密码(注意不是用户的密码)
之后将其他所有类似的条目(如 [Xvnc] 等)全都注释掉,保证配置好的这个是文件里面唯一的VNC配置。之后再用RDP连接,就会发现连接到了之前的VNC Session上。
在 /etc/xrdp/xrdp.ini 文件当中还有其他一些配置,比如颜色深度、SSH加密等。最后,有网友提到 X2Go 似乎是一个比XRDP更好用的RDP软件,不过它在Windows上需要安装自己的客户端去连接,因此目前还没有测试。