
在上一篇文章中,我们介绍了在任何类型的虚拟机上运行VNC服务器。此选项有很多缺点,主要缺点是对数据传输通道的带宽有很高的要求。今天,我们将尝试使用RDP(远程桌面协议)连接到图形化Linux桌面。VNC系统基于使用RFB(远程帧缓冲)协议的像素阵列传输,而RDP允许发送更复杂的图形基元和高级命令。它通常用于组织Windows上的远程桌面服务,但也可以使用Linux服务器。
目录:
安装图形环境
服务器虚拟化和软件
安装安装和配置RDP服务器
配置防火墙
连接到RDP服务器会话
管理器和用户会话
切换键盘布局
安装图形环境
我们将使用一台运行Ubuntu Server 18.04 LTS的虚拟机,该虚拟机具有两个处理核心,四个GB的RAM和一个20 GB的硬盘驱动器(HDD)。较弱的配置不太适合图形桌面,尽管它取决于要解决的任务。订购时,请不要忘记使用促销代码Habrahabr10获得10%的折扣。

使用以下命令完成具有所有依赖项的桌面环境的安装:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
与以前的情况一样,我们选择XFCE是因为它的计算需求相对较低。
服务器虚拟化和软件安装
虚拟机通常仅使用英语本地化进行部署。在桌面上,您可能需要俄语,这并不难设置。首先,让我们为系统程序安装翻译:
sudo apt-get install language-pack-ru
让我们设置本地化:
sudo update-locale LANG=ru_RU.UTF-8
您可以通过手动编辑/ etc / default / locale来达到相同的效果。
为了本地化GNOME和KDE,存储库包含language-pack-gnome-ru和language-pack-kde-ru-如果要使用这些桌面环境中的程序,则将需要它们。在XFCE中,翻译与应用程序一起安装。然后,您可以安装字典:
#
sudo apt-get install hunspell hunspell-ru
# LibreOffice
sudo apt-get install mythes-ru
# - DICT
sudo apt-get install mueller7-dict
此外,某些应用程序可能需要安装翻译:
# Firefox
sudo apt-get install firefox firefox-locale-ru
# Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ru
这样就完成了桌面环境的准备工作,剩下的工作就是配置RDP服务器。
安装和配置RDP服务器
Ubuntu存储库中有一个免费的Xrdp服务器,我们将使用它:
sudo apt-get install xrdp
如果一切顺利,则服务器应自动启动:
sudo systemctl status xrdp

Xrdp服务器以xrdp用户身份启动,并且默认情况下采用/etc/ssl/private/ssl-cert-snakeoil.key证书,您可以用自己的证书替换。要读取文件,需要将用户添加到ssl-cert组:
sudo adduser xrdp ssl-cert
可以在/ etc / default / xrdp文件中找到默认设置,而所有其他服务器配置文件都位于/ etc / xrdp目录中。主要参数在xrdp.ini文件中,可以保留不变。该配置文件有据可查,套件中有相应的手册页:
man xrdp.ini
man xrdp
仅编辑脚本/etc/xrdp/startwm.sh,该脚本在初始化用户会话时执行。首先,让我们从发行版中制作脚本的备份副本:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.sh
要启动XFCE桌面环境,您需要一个类似于以下内容的脚本:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4
请注意:最好在脚本中写入可执行文件的完整路径-这是一个好习惯。让我们将该脚本设为可执行文件,可以将Xrdp服务器设置视为完成:
sudo chmod 755 /etc/xrdp/startwm.sh
我们重新启动服务器:
sudo systemctl restart xrdp
防火墙配置
默认情况下,Xrdp在所有接口上侦听TCP端口3389。根据虚拟服务器的配置,您可能需要配置Netfilter防火墙。在Linux上,通常使用iptables实用程序完成此操作,但在Ubuntu上,最好使用ufw。如果客户端的IP地址已知,则使用以下命令完成配置:
sudo ufw allow from IP_Address to any port 3389
您可以允许来自任何IP的连接,如下所示:
sudo ufw allow 3389
RDP支持加密,但是从公共网络公开Xrdp服务器是一个坏主意。如果客户端没有固定IP,则服务器应仅侦听localhost以提高安全性。最好通过SSH隧道进行访问,该隧道将安全地重定向来自客户端计算机的流量。在上一篇文章中,我们对VNC服务器使用了类似的方法。
连接到RDP服务器
要与桌面环境一起使用,最好创建一个单独的非特权用户:
sudo adduser rdpuser

让我们将用户添加到sudo组中,以便他可以解决与管理相关的任务。如果没有这种需要,则可以跳过此步骤:
sudo gpasswd -a rdpuser sudo
您可以使用任何RDP客户端(包括内置的Windows Remote Desktop Services客户端)连接到服务器。如果Xrdp在外部接口上侦听,则不需要其他手势。在连接设置中指定VPS IP地址,用户名和密码就足够了。连接后,我们将看到以下内容:

初始设置桌面环境后,我们将获得完整的桌面。如您所见,它并不会消耗太多资源,尽管所有一切都取决于所使用的应用程序。

如果Xrdp服务器仅侦听localhost,则必须将客户端计算机上的流量打包到SSH隧道中(sshd必须在VPS上运行)。在Windows上,可以使用图形SSH客户端(例如PuTTY),在UNIX系统上,需要ssh实用程序:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ip
初始化隧道后,RDP客户端将不再连接到远程服务器,而是连接到本地主机。
对于移动设备而言,这更加困难:必须购买能够建立隧道的SSH客户端,此外,在iOS和iPadOS中,由于能源优化太好,第三方应用程序的后台工作也很困难。在iPhone和iPad上,在单独的应用程序中无法建立隧道-您需要组合应用程序,该应用程序本身能够通过SSH建立RDP连接。例如,例如Remoter Pro。
会话管理器和用户会话
多用户功能直接在Xrdp服务器中实现,不需要其他配置。通过systemd启动服务后,一个进程以守护程序模式运行,侦听端口3389并通过localhost与会话管理器进行通信。
ps aux |grep xrdp

sudo netstat -ap |grep xrdp

会话管理器通常对用户不可见,因为在客户端设置中指定的登录名和密码会自动传送给它。如果这没有发生或在身份验证期间发生错误,则会出现一个交互式登录窗口,而不是桌面。

会话管理器的自动启动在/ etc / default / xrdp文件中注册,配置存储在/etc/xrdp/sesman.ini中。默认情况下,它看起来像这样:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]
您无需在此处进行任何更改,只需禁用root登录(AllowRootLogin = false)。对于每个登录到系统的用户,将启动一个单独的xrdp进程:如果在不结束会话的情况下断开连接,则默认情况下,用户进程将继续工作,并且您可以重新连接到该会话。可以在/etc/xrdp/sesman.ini文件([会话]部分)中更改设置。
切换键盘布局
使用双面剪贴板时,通常不会出现问题,但是使用俄语键盘布局时,您将需要进行一些修改(必须已安装俄语语言环境)。让我们编辑Xrdp服务器的键盘设置:
sudo nano /etc/xrdp/xrdp_keyboard.ini
以下行应添加到配置文件的末尾:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ru
仍然可以保存文件并重新启动Xrdp:
sudo systemctl restart xrdp
如您所见,在Linux VPS上设置RDP服务器并不困难,并且在上一篇文章中我们已经讨论了VNC设置。除了这些技术外,还有另一个有趣的选择:使用修改后的NX 3协议的X2Go系统。我们将在下一个出版物中处理。
