2
9月
2021
在 Linux 上安装 XRDP 远程桌面服务器并解决连接问题
16:05

在 Linux 上安装 XRDP 远程桌面服务器并解决连接问题

2 9月 2021 16:05

本文介绍如何通过 RDP(远程桌面协议)建立与 Linux 的连接。

RDP 是远程工作(或 PC 管理)最常见的协议,其中计算机屏幕显示在远程 PC 上,由鼠标和键盘控制。 RDP 可在具有不同操作系统(Windows 和 Linux)的 PC 之间使用。

以下指南是根据在 Linux Runtu(描述:Ubuntu 20.04.3 LTS)和 Linux Mint“Uma”描述:Linux Mint 20.2)下成功安装和启动 RDP 服务器的结果编写的。

在 Linux 上安装和配置 RDP

  1. 如果您之前配置 xrdp 失败,第一步是删除 xrdp 和 xorgrdp 软件包及其设置以执行全新安装。

    sudo apt-get purge xrdp xorgxrdp

  2. 首先您需要更新软件包版本:

    sudo apt-get update & sudo apt-get upgrade & sudo apt-get dist-upgrade

  3. 如果操作系统是 Ubuntu Linux 16.04 或 18.04,或者 20.04 或 21.04,我建议您使用站点上现成的脚本来安装 xrdp

    https://c-nergy.be/downloads/xRDP/xrdp-installer-1.4.zip- 下载存档并提取脚本。

! “xrdp-installer”程序的文档位于 https://c-nergy.be/blog/?p=17810 以及在程序本身中,当您使用 --help 键运行 sh 文件时,会显示有关其调用的可能参数的简要信息:

bash xrdp-installer-1.4.sh --help

启动时,不需要输入 sudo 命令;必要时,它会要求输入 su 密码。 例如,像这样启动:

chmod +x xrdp-installer-1.4.sh
./xrdp-installer-1.4.sh

然后转到各个部分 最终 XRDP 设置“诊断”。


如果操作系统不是列出的操作系统之一,则安装路径会更长。

sudo apt-get install x-window-system xserver-xorg xserver-xorg-core
sudo apt-get install  xserver-xorg-legacy

我们重新配置包

sudo apt-get install xserver-xorg-legacy
sudo dpkg-reconfigure xserver-xorg-legacy

配置 Xorg 启动的窗口:
xserver-xorg-legacy
其中我选择了最后一项赋予最大权利的项目——“任何人”。

此命令写入 cat /etc/X11/Xwrapper.config 文件:
allowed_users=anybody


安装运行 xrdp 所需的软件包:

sudo apt-get install libx11-dev libxfixes-dev libssl-dev libpam0g-dev libtool libjpeg-dev flex bison gettext autoconf libxml-parser-perl libfuse-dev xsltproc libxrandr-dev python3-libxml2 nasm fuse pkg-config git intltool checkinstall

安装两个主要的 XRDP 包:

sudo apt-get install xrdp xorgxrdp xserver-xorg-input-all

您可能会注意到安装程序将创建 RSA 密钥。
为了让操作系统读取这个密钥,你需要添加一个用户 xrdp в группу ssl-cert:

sudo adduser xrdp ssl-cert

然后,您需要安装完整的 MESA 图形子系统和显卡驱动程序。 为了什么?
重点是有一条链: RDP 客户端 -> 网络 -> Xrdp 服务器 -> Xsession -> Xorg -> MESA -> OpenGL 驱动程序 -> 显卡
如果无法启动图形模式,RDP客户端登录后也会立即“掉线”。

sudo apt-get install libgl1-mesa-dri libglew1.5-dev libglew-dev libgles2-mesa-dev libglm-dev mesa-utils-extra mesa-common-dev freeglut3 freeglut3-dev

最后,显卡必须支持 OpenGL 2.1 或更高版本,并安装 Linux 驱动程序。

  1. 如果旧电脑基于Interl 945芯片组(通用名称为i915),则需要安装修改后的第三方驱动程序,因为在标准驱动程序上,默认启用OpenGL 1.4模式,而需要2.1。 否则会出现错误(参见下面的“错误”部分)

如果以下命令表明OpenGL是高版本,则无需执行任何操作:

glxinfo | grep OpenGL

一个好的驱动程序版本的示例是 2.1(注意 OpenGL 版本字符串:
OpenGL vendor string: Mesa Project

OpenGL renderer string: i915 (chipset: 945G)

OpenGL 版本字符串:2.1 Mesa 21.3.0-devel (git-dfef775 2021-09-02 focus-oibaf-ppa)

OpenGL shading language version string: 1.20

OpenGL extensions:

OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.3.0-devel (git-dfef775 2021-09-02 focal-oibaf-ppa)

OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

OpenGL ES profile extensions:

如果版本 1.4 较旧(不适合 XRDP),则命令输出 glxinfo 下一个:
OpenGL vendor string: Intel Open Source Technology Center

OpenGL renderer string: Mesa DRI Intel(R) 945G

OpenGL版本字符串:1.4 Mesa 21.0.3
OpenGL extensions:

OpenGL ES profile version string: OpenGL ES 2.0 Mesa 21.0.3

OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

OpenGL ES profile extensions:

支持 OpenGL 1.4 的旧版本驱动程序(默认从“xserver-xorg-video-intel”包安装)。 此版本的 OpenGL 1.4 不适合。

安装新版本的驱动程序(仅适用于旧的集成显卡芯片组 i915 - i925 - i945)

sudo add-apt-repository ppa:oibaf/graphics-drivers && sudo apt-get 更新 && sudo apt-get 升级 && sudo apt-get dist-upgrade && sudo 重启

此命令将更新集成英特尔显卡和_reboot_的显卡驱动程序包。

附:如果以后需要删除PPA存储库,例如安装新显卡后,删除它的命令是:sudo ppa-purge ppa:oibaf/graphics-drivers。

  1. “对于所有人”连接到 X 服务器的权限 - 之前由命令 sudo dpkg-reconfigure xserver-xorg-legacy 给出
    配置写入文件

    sudo ls -l /etc/X11/Xwrapper.config

如有必要,您可以查看其内容或编辑它

sudo nano /etc/X11/Xwrapper.config

*注意控制台 - Xorg 仅可供控制台用户访问,任何人都可以访问。 默认是控制台。
更多详细信息请参见命令 man Xwrapper.config

  1. 设置 OpenGL 图形(仅适用于具有内置 i915 图形的较旧芯片组的 PC):

显示图形适配器型号:

LSPCI | grep VGA

如果显卡是内置Intel显卡芯片组915或82945G,进入目录

cd /usr/share/X11/xorg.conf.d/

创建一个文件 20-intel.conf

! 仅 Ubuntu <= 20.04 和集成 Intel 显卡需要 20-intel.conf 文件,在 Ubuntu >=22.04 和 Linux Mint >=21 中不再需要创建此文件。

sudo nano 20-intel.conf

并向其中添加文本:

Section "Device"

        Identifier "Intel Graphics"

        Driver "intel"

        Option "TearFree" "true"

        Option "AccelMethod" "SNA"

        Option "BackingStore" "true"

        Option "DRI" "3"

EndSection

! !适用于较旧 PC 的选项:在“AccelMethod”行中,指定“而不是标准图形加速方法“SNA”乌萨”。
Луч最好使用“SNA”——一种更现代的 x86 集成显卡方法。 哪里 乌萨- 以前的架构。

保存并退出 Ctrl+O、Ctrl+X。

  1. 编辑 XRDP 配置文件:

sudo nano /etc/xrdp/xrdp.ini

在文件中间的“background”行之后添加 XRDP 的默认地址。
address=address=0.0.0.0
纳斯特罗卡_xrdp

重新启动服务器:

sudo /etc/init.d/xrdp stop
sudo /etc/init.d/xrdp start

最终 XRDP 设置

  1. 将用户xrdp添加到tty组,并赋予串口权限(解决启动Xorg会话时,'tty0访问被拒绝'的问题)

    sudo usermod -a -G tty xrdp
    sudo chmod g+r /dev/tty0

  2. 允许启动“xrdp”服务

    sudo systemctl start xrdp
    sudo systemctl enable xrdp

  3. 重要提示:复制脚本文件以启动会话并更正它

    cp /etc/X11/xinit/xinitrc ~/.xinitrc

找出已安装的桌面 shell 的类型:

echo $XDG_CURRENT_DESKTOP

如果命令输出为空,请尝试

cat /etc/X11/default-display-manager

编辑文件 ~/.xinitrc 开始一个会话(session):

nano ~/.xinitrc

评论或删除该行 /etc/X11/Xsession,我们这样写:

exec startlxde

执行 openbox 会话

  • 适用于跑图操作系统

exec startxfce4

适用于带有 XFCE 桌面 shell 的 Linux Mint

exec startlxqt

对于卢本图或 Linux Mint 与 LXQT 桌面 shell (如果这是命令的输出

回显 $XDG_CURRENT_DESKTOP)。


所以文件 .xinitrc 在用户主目录中,在 XRDP 会话启动期间启动,采用以下紧凑形式:

#!/bin/sh

exec startlxqt

2021 年 9 月 9 日的注意事项:您可以向此文件添加任何必要程序的启动,例如启动pulseaudio 声音服务器以及加载和切换国家键盘布局。 然后是文件 .xinitrc 将采用以下形式:

#!/bin/sh
pulseaudio &
setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle,grp_led:scroll' &
exec startlxqt

! 2021 年 10 月 7 日注意:这些命令必须添加到文件中 ~/.xinitrc 将通过 RDP 连接的用户。

如果服务器操作系统是带有 XFCE shell 的 Linux Mint,则 ~/.xinitrc 文件的内容:

#!/bin/sh
脉冲音频&
setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle,grp_led:scroll' &
执行startxfce4

当服务器桌面是LXQT时,我的~/.xinitrc文件如下:
#!/bin/sh
脉冲音频&
setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle,grp_led:scroll' &
执行startlxqt

对于 OpenBox (Runtu Linux),~/.xinitrc 文件的工作版本如下:
#!/bin/sh
脉冲音频&
setxkbmap -layout 'us,ru' -option 'grp:ctrl_shift_toggle,grp_led:scroll' &

执行 openbox 会话

执行startlxde

! 适用于任何桌面的通用 ~/.xinitrc 文件可以在 stackoverflow 上找到(需要精简安装)。

如果我们想在任意用户“user”下登录 - 而不是在“xrdp”记录下登录

如果有多个用户,编辑 ~/.xinitrc 是不切实际的,并且任务是在任何用户下通过 xrdp 连接。

修复 xrdp 会话配置的全局(在操作系统内)脚本要容易得多 -
/etc/xrdp/startwm.sh,其中,您可以在 runtu LITE 的示例中在单词 exec 之后编写,而不是最后 2 行,调用相应的会话:

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#执行 /bin/sh /etc/X11/Xsession
执行 openbox-session

诊断

我们重新启动充当服务器的 PC。

我们从中检查 Xorg 服务器启动时没有错误:

sudo Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp

! 如果您在运行初始 Xorg 会话的同一台 PC 上测试 XRDP,此时屏幕可能会变为空白。 需要点击 Ctrl+Alt+F1 使用命令输入您的用户名和密码 ps -aux | grep xrdp найти номер процесса "sudo xrdp" и завершить его командой "sudo kill <номер процесса>”。

该命令的文本输出将包含错误的原因。

如果消息“(EE)无法建立任何侦听套接字 - 确保 X 服务器尚未运行(EE)”,
您需要重新启动电脑并重复诊断。

! 第二个测试选项是,在第一次连接到XRDP服务器之前,我们结束当前会话“开始”-“注销”-“注销系统”。 由于 RDP 客户端将无法创建同一用户的第二个会话(~/.xorgxrdp.10.log 文件中出现错误:“(EE) 捕获信号 11(分段错误)。服务器中止”)。

或者,您需要创建第二个用户来测试与 xRDP 的连接,我们将使用该用户通过 RDP 协议进行连接:

sudo useradd -m ivanov-rdp
密码 ivanov-rdp

Linux下xRDP服务器错误及解决办法

设置防火墙

如果无法通过 RDP 连接到服务器,首先检查服务器上的防火墙是否打开该端口:

sudo apt install nmap
sudo nmap -Pn 192.168.55.100 -p 3389

其中指定本地网络上服务器的 IP 地址,而不是 192.168.55.100
不要忘记在防火墙中打开本地端口 3389:

sudo ufw allow 3389

结论应该如下。 如果端口打开,一切都很好。
港口国服务
分段阅读_第 3389 章

(如果服务器上的 RDP 端口 3389 状态为“打开”,并且从客户端可见它为“已过滤”,请参阅文章末尾 - “如果 remmina 无法连接到服务器”)。

问题“通过 RDP 从客户端连接时,可见黑色空白屏幕"

该软件包未安装在服务器上 xorgxrdp- xorg 和 rdp 服务器之间显示图形的软件“层” - 桌面、鼠标指针和图标。

解决办法是在服务器上安装包 xorgxrdp:

sudo apt-get install xorgxrdp
sudo 服务 xrdp 重新启动

! !! xRDP 会话现在应该可以工作。 让我们尝试连接吧!

注意事项 :大多数发行版 Debian 以及 Ubuntu 18.04“bionic”、[20.04 LTS] 中都包含软件包“xorgxrdp - X.org 的远程桌面协议 (RDP) 模块” “focal”](https://packages.ubuntu.com/focal/xorgxrdp),[21.04“hirsute”](https://packages.ubuntu.com/hirsute/xorgxrdp),[21.10“impish”](https://packages.ubuntu.com/impish/xorgxrdp),22.04 LTS“jammy”(已发布) 04/21/2022),以及基于 Ubuntu DEB 软件包基础的操作系统衍生版本(例如 Runtu、Lubuntu、Xubuntu、Kubuntu 等),以及基于 RPM 的发行版: FedoraArch 等。因此,这些指令应该适用于许多版本的 Linux。

通过 RDP 连接时出现问题,桌面与平常不同 - 使用 Gnome 环境

2023 年 11 月 17 日起添加:

以便当前用户可以连接熟悉的环境,而不是Gnome,创建一个文件 ~/.xsessionrc 内容:

export GNOME_SHELL_SESSION_MODE=ubuntu
导出 XDG_CURRENT_DESKTOP=ubuntu:GNOME
导出 XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg

在文件末尾 /etc/xrdp/startwm.sh или ~/.xinitrc,应写成以下内容(以runtu LITE为例):

#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#执行 /bin/sh /etc/X11/Xsession
执行 openbox-session


Remmina RDP 客户端 - 连接到服务器

sudo apt-get install remmina remmina-plugin-rdp remmina-plugin-secret
sudo reboot
remmina

添加连接 - RDP 类型。
remmina

如果未使用 VPN,则在 IP 地址中输入家庭路由器的“白色”IP 地址。
通过 VPN 工作时,IP 地址是指内部(本地、家庭)网络。
用户名和密码与在服务器上“从键盘”登录时相同。

屏幕分辨率为 1024x600 像素的上网本上 Remmina 窗口的底部按钮可能会被切断并部分可见。
“取消”-“另存为默认值”-“保存”-“连接”-“保存并连接"

按最右边的按钮 “保存并连接”

更新后无法使用 Remmina 连接到远程 RDP 服务器

2024 年 5 月,经过长时间的中断后,remmina 客户端停止从 Linux 进行连接,而标准 mstsc.exe 程序却在 RDP 正在运行的 Windows 上运行。 症状:服务器上的端口 3389 已打开,但从客户端可见已被过滤。 这可以通过 nmap server_ip_address 命令查看。

说明:如果客户端存储了不正确的服务器证书,则 RDP 端口处于半开放(已过滤)状态。

解决方案: 在客户端打开文件进行编辑 ~/.config/freerdp/known_hosts2 и удалить из него строчку с IP-адресом сервера RDP. Либо можно полностью удалить данный файл ~/.config/freerdp/known_hosts2

各种问题及其调试

系统目录中的错误日志 /var/日志/:

*xrdp.log

  • xrdp-sesman.log
  • Xorg.0.log、Xorg.10.log

用户目录中的错误日志 :

  • ~/.xorgxrdp.10.log

您可以使用以下命令查看它们:

sudo cat /var/log/xrdp.log
sudo cat /var/log/xrdp-sesman.log
sudo cat /var/log/Xorg.0.log
sudo cat /var/log/Xorg.10.log
sudo cat ~/.xorgxrdp.log

如果输入用户名和密码后从 Windows PC 连接到 Linux PC,您会看到蓝绿色的纯色背景,没有文本或图标,
或者 XRDP.LOG 文件中存在大量错误,这意味着已建立连接,但 Xorg 图形未启动 - 很可能是由于旧版本的 OpenGL 或权限所致,请参见上文。

尝试使用 MSTSC.EXE 程序进行连接时出现客户端错误的示例:
蓝色

服务器端 XRDP.LOG 日志中的错误消息:
错误19
或类似的 [DEBUG] 已关闭套接字 17 (AF_UNIX)

解决方案是使用服务器计算机桌面上的命令进行诊断:

sudo Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp

! 您需要确保 /var/log/Xorg.10.log 文件中没有 Xorg 错误。

如果从运行 Windows 的 PC 连接时,您看到黑屏一会儿,然后立即关闭,则选项之一是:
*无效的用户名/密码

  • 不正确的 ~/.xinitrc 脚本(桌面会话未启动)。 检查您的 ~/.xinitrc 文件或 /etc/xrdp/startwm.sh 团队的存在 exec <外壳名称>
  • 您远程连接到 PC 的用户在本地操作系统中有一个打开的会话(当前正在使用计算机)。

安全性

现在,本地网络上的任何 PC 都可以使用 RDP 协议连接到您的计算机。 必须为用户帐户设置 复杂密码。 如果您从 Internet 连接到 PC,则还可以使用具有流量加密功能的 VPN。

2024 年 5 月 30 日起添加:

如果您不使用较旧的客户端,则可以升级 RDP 协商使用的 SSL 协议的版本:

sudo nano  /etc/xrdp/xrdp.ini

修正线路

ssl_protocols=TLSv1, TLSv1.1, TLSv1.2, TLSv1.3

ssl_protocols=TLSv1.2, TLSv1.3

并通过重新读取配置文件来重新启动服务:

sudo service xrdp reload

使用替代 FreeRDP 客户端代替 Remmina

安装远程桌面程序 免费RDP:

sudo flatpak install com.freerdp.FreeRDP

启动 FreeRDP 客户端连接到服务器(例如 192.168.1.100):

flatpak run com.freerdp.FreeRDP /u:username /p:P!@##字 /w:1200 /h:700 /v:192.168.1.100

好处 免费RDP- 从命令行或批处理文件调用的能力,该程序正在积极开发。 网站: https://www.freerdp.com/


最后编辑日期 05/30/2024



相关出版物