在远程 Linux 服务器上使用微软 RDP 远程桌面服务

现在很流行将本地开发环境放到远端,我也这么做很久了,因为服务器的强大硬件效率比本地开发要高得多,但调试工作放在本地电脑上,而且每次开启 IDE 都有个重新加载的过程,所以在想能不能把整个开发调试环境全都放在服务器上呢,这样不管去哪里,打开远程桌面就可以直接进行工作。

这里使用远程桌面服务的目标是进行远程开发或者测试,不推荐在提供对外服务的服务器上安装,可能对性能和安全性造成影响。

远程服务器如果有了图形界面,就可以安装顺手的 VSCode 编辑器进行远程开发,本地电脑就作为一个瘦客户端,对配置要求可以非常低。我之前曾经考虑过换成 Windows 的远程开发机,但是 NTFS 羸弱的小文件处理性能让我打消了这个想法,做开发而已,要求不高。

先来看一下总体效果,macOS 使用微软的远程桌面连接到了 Linux 服务器上。

Screenshot

那么下面就开始吧。

背景介绍:

远程桌面协议有很多种,例如常见的 VNC、TeamView 之类的,XWindow 本身也支持将本地的显示通过 DISPLAY 环境变量重定向到另外台电脑上显示。

不过我这里用的是微软的 RDP 协议,它的虚拟虚拟显示器分辨率可以由客户端指定,体验相对较好。

而它在 Linux 上通过 xrdp 服务将 XWindow 协议转换为 RDP 协议供客户端调用。

准备工作

在开始之前建议先使用 adduser 命令建立一个跟自己 git 同名的普通账号,这样在操作代码资源时更加方便,普通账号权限受限也相对更加安全,如需进行越权操作,可以给他添加 sudo 操作权限。

本文假设你已经具备基本的 Linux 知识水平,所以所有内容如果碰到问题请先自行查阅资料。

安装

以 CentOS 8 版本为例,按照下面命令一次输入即可:

sudo dnf install -y xrdp # 安装 xrdp 服务
sudo systemctl enable xrdp # 启用 xrdp 服务
sudo systemctl start xrdp # 启动 xrdp 服务

安装 XFce 桌面环境

桌面环境有很多种,红帽系默认是 GNOME,但它的半透明和阴影较多不适合在远程桌面上使用,所以我用了 XFce 一个轻量化的桌面环境

sudo dnf install -y @xfce-desktop # 安装 xfce4-desktop 分组
echo "xfce4-session" > ~/.Xclients # 将 xfce4 作为默认桌面环境
chmod a+x ~/.Xclients

其他分组可以使用下面命令查看:

sudo dnf grouplist -v

如果有别的桌面环境喜好,也可以手工安装,修改 ~/.Xclients 即可启动。

连接远程桌面环境

安装远程桌面客户端 App

连接

启动客户端,点击 + 号新增 PC:

Connect

填入用户名和密码,点击 Continue 正常情况即可连接:

Password

声音转发

一般情况下,没有声音的远程桌面已经足够使用了,不过如果有更高要求,可以考虑把远程开发机上的声音也同步过来,这就要提到 xrdp 相对别的远程桌面协议强大的地方了,它是能通过一个插件支持声音重定向的。

安装依赖

正常情况下开发着工具应该是都已经安装好了,可以再次执行一下确保环境正常

sudo dnf groupinstall "Development Tools" -y
sudo dnf install rpmdevtools yum-utils -y
sudo rpmdev-setuptree

安装开发所使用到的库和头文件,这里其实用了 PulseAudio 它也是目前 Linux 上的混音器的事实标准,我们这里需要通过它的一个插件将声音通过远程桌面重定向过来。

sudo yum install pulseaudio pulseaudio-libs pulseaudio-libs-devel -y
sudo yum-builddep pulseaudio -y 

【可选】建立独立的编译账号

主账号安装 brew 后可能一些共享目标(so)和头文件等开发运行时可能会乱,所以这里可以考虑建一个纯粹的 Linux 编译账号,只使用原始的环境进行编译

推荐建立这么一个账号,这样以后有别的编译任务的时候也可以使用它。

sudo useradd mockbuild
sudo usermod -G mockbuild mockbuild

然后切换过去

sudo su - mockbuild

准备编译所依赖的 PulseAudio

yumdownloader --source pulseaudio
rpm --install pulseaudio*.src.rpm

然后就会看见你的用户目录下多了 ~/rpmbuild/BUILD/ 目录,刚刚装的 rpm 源代码就在里面,可以直接用下面命令进行编译。

rpmbuild -bb --noclean ~/rpmbuild/SPECS/pulseaudio.spec

【主角】编译和安装 PulseAudio 的 XRDP 插件

git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
cd pulseaudio-module-xrdp
./bootstrap && ./configure PULSE_DIR=~/rpmbuild/BUILD/pulseaudio-*
make
sudo make install

验证安装

使用 pulseaudio -D 启动音频服务后,如果之前已经启动过,那可以用 pulseaudio -k 重启服务,应该就能从音频控制面板中调节音量了,如下图:

Screen Shot 20220218 at 5.37.18 PM.png

Trouble Shooting

服务无法连接

首先使用下面命令检查 xrdp 服务是否正常运行中
sudo systemctl status xrdp

Service Status

其次检查防火墙(一般是关掉的,但不保证部分人可能开着)

firewall-cmd --permanent --add-port=3389/tcp
firewall-cmd --reload

连接后闪退

一般是桌面环境没有安装成功,可以先用下面命令看一下服务日志确定一下:

sudo cat /var/log/xrdp-sesman.log

报告用户名或者密码错

xrdp 使用的是 DevCloud 上的本地用户名和密码,需要使用能直接登录的用户名和密码登录。

版权所有丨转载请注明出处:https://kxq.io/archives/connect-remote-linux-desktop-with-rdp