RDP方式远程连接云服务器

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上需要安装自己的客户端去连接,因此目前还没有测试。