在远程 Linux 服务器上使用微软 RDP 远程桌面服务
现在很流行将本地开发环境放到远端,我也这么做很久了,因为服务器的强大硬件效率比本地开发要高得多,但调试工作放在本地电脑上,而且每次开启 IDE 都有个重新加载的过程,所以在想能不能把整个开发调试环境全都放在服务器上呢,这样不管去哪里,打开远程桌面就可以直接进行工作。
这里使用远程桌面服务的目标是进行远程开发或者测试,不推荐在提供对外服务的服务器上安装,可能对性能和安全性造成影响。
远程服务器如果有了图形界面,就可以安装顺手的 VSCode 编辑器进行远程开发,本地电脑就作为一个瘦客户端,对配置要求可以非常低。我之前曾经考虑过换成 Windows 的远程开发机,但是 NTFS 羸弱的小文件处理性能让我打消了这个想法,做开发而已,要求不高。
先来看一下总体效果,macOS 使用微软的远程桌面连接到了 Linux 服务器上。
那么下面就开始吧。
背景介绍:
远程桌面协议有很多种,例如常见的 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
- Windows: https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-allow-access
- macOS: https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac (其中提到的 下载链接 需要外服 AppStore 账号)
连接
启动客户端,点击 + 号新增 PC:
填入用户名和密码,点击 Continue 正常情况即可连接:
声音转发
一般情况下,没有声音的远程桌面已经足够使用了,不过如果有更高要求,可以考虑把远程开发机上的声音也同步过来,这就要提到 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
重启服务,应该就能从音频控制面板中调节音量了,如下图:
Trouble Shooting
服务无法连接
首先使用下面命令检查 xrdp 服务是否正常运行中
sudo systemctl status xrdp
其次检查防火墙(一般是关掉的,但不保证部分人可能开着)
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