如何给无可视化的Linux系统安装桌面环境?(RDP)

前言

我打算在我的服务器上面托管一些代码,并且需要可视化桌面。最主要的是,不会像VNC一样,总是会终止我的代码,或者出现一下其他的问题。所以我选择了RDP协议的远程桌面协议。

和VNC不同,rdp的账号密码和系统用户相同,如root。

本文在事实和创作方面都参考了:pickstar.today的文章

首先,我创建了一个新的虚拟机,并且安装好系统。之后我更新源:

apt update -y && apt upgrade -y

安装桌面系统

选择一个桌面进行安装,我选择的是xfce:

apt install task-xfce-desktop        # XFCE
apt install task-gnome-desktop    # GNOME
apt install kde-plasma-desktop    # KDE

如果是 Debian 的话,同样安装一个就可以了,不过 debian11 无法使用 xrdp 远程 Gnome 桌面,尽管下面列出了且可以安装,但用不了,所以请不要选择

之后设置启动时默认启动图形化桌面环境:

systemctl set-default graphical.target

安装 rdp 服务(远程控制)

apt install xrdp

设置 xrdp 开机启动&立即启动 xrdp

systemctl enable --now xrdp

默认情况下,Xrdp 使用 /etc/ssl/private/ssl-cert-snakeoil.key, 它仅仅对 “ssl-cert” 用户组成语可读。运行下面的命令,将 xrdp 用户添加到这个用户组:

adduser xrdp ssl-cert

我出现了找不到 adduser 命令的问题,但是我并没有理睬,确定服务器没有防火墙后,我继续连接,没有发现问题。可以直接连接使用。如果有问题,请搜索,这里不做赘述。

至此,xrdp搭建已经完成!如果有公网IP,那么此时,服务就是暴露在3389端口内的!(并非指如果没有公网IP,就不是3389。而是这个端口在公网很危险)所以我建议你修改端口,或者设置防火墙规则。不过说到防火墙,你如果有并且没有放行3389,那么你的访问也会是不通过的。(会被拒绝)。如果你使用穿透或者其他,请留意3389是否被服务提供商封锁禁用。

# ufw
sudo ufw allow 3389
# nft
sudo nft add rule inet filter input tcp dport 3389 ct state new,established counter accept
# iptables
iptables -I INPUT -p tcp --dport 3389 -j ACCEPT
# firewalld
firewall-cmd --zone=public --add-port=3389/tcp --permanent

连接服务器

信任证书(出现这个证明没问题,长时间连接请查看是不是服务器防火墙问题)。

使用服务器系统账户即可登陆,如root。

MacOS下需要安装WindowsApp才可以连接RDP,MacOS原生支持VNC。

我测试了XFCE、GNOME、KDE桌面都没发现问题,下面追加的截图来自KDE桌面。

追加的图片:
RDP-Connection
RDP-Users
RDP-Connected


开启声音转发(可选)

此处全段来自pickstar.today的文章

虽然现在桌面环境和远程服务已经配置好了,但是如果直接使用的话,远程桌面的声音是无法播放的,如果想要正常播放声音,就需要安装声音转发模块。xrdp 服务中并未包含此模块,需要手动编译安装。

首先安装依赖

sudo apt install git build-essential autoconf libtool automake pkg-config libssl-dev libpam0g-dev libx11-dev libxfixes-dev libxrandr-dev libpulse-dev -y

拉取源代码

cd ~
git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
cd pulseaudio-module-xrdp

准备安装环境

scripts/install_pulseaudio_sources_apt_wrapper.sh

这个脚本需要执行的时间比较长,请耐心等待,执行完后能看到

- Creating focal build root. Log file in /var/tmp/pa-build-testuser-debootstrap.log
- Creating schroot config file /etc/schroot/chroot.d/pa-build-testuser.conf
[sudo] password for testuser: 
- Copying /etc/apt/sources.list to the root
- Creating the build directory /build
- Copying the wrapped script to the build directory
- Building PA sources. Log file in /var/tmp/pa-build-testuser-schroot.log
- Copying sources out of the build root
- Removing schroot config file and build root
- All done. Configure PA xrdp module with PULSE_DIR=/home/testuser/pulseaudio.src

注意最后一行的输出,复制下 PULSE_DIR=/home/testuser/pulseaudio.src,粘贴在 configure 后,例如

./bootstrap && ./configure PULSE_DIR=/home/testuser/pulseaudio.src

编译并安装

make
sudo make install

在远程桌面看,你会发现音频输出设备变成了 xrdp sink。
xrdp_audio
如此以来,就可以将远程桌面的声音在本地播放了。


安装中文支持(可选)

此处全段来自pickstar.today的文章

安装中文字体

sudo apt install fonts-arphic-ukai fonts-arphic-uming fonts-ipafont-mincho fonts-ipafont-gothic fonts-unfonts-core -y

然后只需执行

sudo dpkg-reconfigure locales

会看到
encoding

向下找到 zh_CN.UTF-8,按空格选中后回车
encoding1

系统默认语言也选中 zh_CN.UTF-8 即可

如果有的桌面环境中没有安装浏览器的话,可以这样一键安装 firefox

Ubuntu:

sudo apt install firefox firefox-locale-zh-hans -y

Debian:

sudo apt install firefox-esr -y

疑难杂症

1> Linux的RDP账号密码正确,登陆成功后闪退了

我在安装完毕桌面后,我发现使用WindowsApp(Mac)RDP协议连接的时候,会在登入后就闪退。

比如说我们想要登陆root这个账户,我们就在root的账户下执行下面的命令,用来选择默认的桌面即可

# gnome桌面
echo gnome-session > ~/.xsession
# xfce桌面
echo xfce4-session >~/.xsession
# kde桌面
echo "/usr/bin/startplasma-x11" > ~/.xsession

2> something has gone wrong. A problem has occurred and the system can’t recover.
something-has-gone...

如果是 Debian11 且选择 Gnome 桌面看到这个错误,请放弃并选择其他桌面

一般未选择桌面版本或者选择错误了,就会报这个错误。

ls -l /etc/alternatives/x-session-manager
update-alternatives --config x-session-manager

输入命令后,通过数字选择你安装好的桌面即可
update-alternative-kde-cinnamon


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注