前言
我打算在我的服务器上面托管一些代码,并且需要可视化桌面。最主要的是,不会像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桌面。
追加的图片:
开启声音转发(可选)
此处全段来自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。
如此以来,就可以将远程桌面的声音在本地播放了。
安装中文支持(可选)
此处全段来自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
会看到
向下找到 zh_CN.UTF-8,按空格选中后回车
系统默认语言也选中 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.
如果是 Debian11 且选择 Gnome 桌面看到这个错误,请放弃并选择其他桌面
一般未选择桌面版本或者选择错误了,就会报这个错误。
ls -l /etc/alternatives/x-session-manager
update-alternatives --config x-session-manager
输入命令后,通过数字选择你安装好的桌面即可
发表回复