Xrdp

出自 ArchWiki

xrdp 是一个守护进程,支持微软的 远程桌面协议 (RDP)。它使用 Xvnc 或 xorgxrdp 作为后端。

安装

安装 xrdpAUR 软件包(或者选择 xrdp-gitAUR 以获取开发版本)。这仅支持 Xvnc 作为后端。

Xorg 后端

要使用 xorgxrdp 作为后端,安装 xorgxrdpAUR 软件包。

用法

首先,启动 xrdp 服务。您应该能够使用 RDP 客户端连接到主机的默认 RDP 端口 (3389)。如果成功,您将看到 xrdp 会话管理器窗口,您可以在其中选择 XorgXvnc 会话,并提供用户身份验证的输入。会话管理器 UI 可以通过修改 /etc/xrdp/xrdp.ini 进行高度自定义。

用于启动 XorgXvnc 显示服务器的参数可以在 /etc/xrdp/sesman.ini 中配置。

成功启动显示服务器后,xrdp 将默认执行 /etc/xrdp/startwm.sh。此脚本旨在启动窗口管理器(类似于 .xinitrc),如果 ~/.xinitrc/etc/X11/xinit/xinitrc 存在,它将从中读取。建议编辑 ~/.xinitrc 以启动您的桌面环境或窗口管理器,但您也可以编辑 /etc/xrdp/startwm.sh

如果您只是关闭会话窗口和 RDP 连接,下次使用 RDP 连接时,您可以再次访问同一会话。当您从会话窗口退出窗口管理器或桌面环境时,会话将关闭,下次将打开一个新会话。

技巧与提示

开机自启动

xrdpAUR 软件包包含 systemd 的服务文件。启用 xrdp.service

图形加速

对于 Xorg 会话,您可以通过安装 xorgxrdp-glamorAUR (用于 Intel 和 AMD GPU) 和 xorgxrdp-nvidiaAUR (用于 NVIDIA GPU) 来启用 OpenGLVulkan 图形加速。

声音

安装必要的 PulseAudio 模块,使用 pulseaudio-module-xrdpAUR

对于 PipeWire 用户,安装 pipewire-module-xrdpAUR

非 root 用户

Xwrapper.config 中包含以下行

/etc/X11/Xwrapper.config
allowed_users=anybody
needs_root_rights=no

如果以上行不存在,来自 Remmina 等应用程序的远程桌面连接将以空白屏幕启动。

故障排除

光标周围的黑框

如果您遇到鼠标指针周围出现黑框,请创建带有 Xcursor.core:1 行的 ~/.Xresources-xrdp,并在 ~/.xinitrc 中加载它,如下所示:

xrdb ~/.Xresources-xrdp
exec startlxde

您可能需要安装 xorg-xrdb

黑屏

登录会话管理器后,您可能会看到黑屏。

~/.xinitrc 中的最后一行可能看起来像 exec $(get_session "$1")。如果未在 /etc/xrdp/startwm.sh 中提供,则需要一个默认参数。

您可以编辑 ~/.xinitrc 的最后一行,使其为 exec $(get_session "${1:-"$SESSION"}")exec $(get_session "${1:-xfce}"),具体取决于您的偏好。

或者,您也可以在 /etc/xrdp/startwm.sh 中编辑对 ~/.xinitrc 的调用;例如 . ~/.initrc xfce。这将影响所有用户。

断开连接后退出

如果您的 ~/.xinitrcdbus_args 中设置了 --exit-with-session,您可能会在断开连接后退出窗口。

尝试将 ~/.xinitrc 复制到 ~/.xrdpinitrc,删除 --exit-with-session,并更新 /etc/xrdp/startwm.sh 以调用 ~/.xrdpinitrc 而不是 ~/.xinitrc

直接编辑 ~/.xinitrc 以删除 --exit-with-session 可能会导致使用非 xrdp 会话时出现意外行为。

根据 dbus-launch(1)

将 dbus-launch 作为标准 X 会话一部分运行的发行版应在 X 服务器启动并可用后,运行 dbus-launch --exit-with-session,作为“主”X 客户端(通常是会话管理器或窗口管理器)的包装器。

带有桌面环境的黑屏

如果您遇到黑屏并且您使用桌面环境,这可能是 D-Bus 未正确初始化的结果。某些 DE(如 KDE Plasma)也可能能够从以前的会话恢复完全正常工作的应用程序/窗口,这似乎表明“只有 plasmashell”丢失了。

尝试在您的 ~/.xinitrc 文件中使用 dbus-launch --exit-with-session 运行桌面环境。对于 KDE Plasma,您可以使用命令 /usr/lib/plasma-dbus-run-session-if-needed startplasma-x11dbus-launch --exit-with-session startplasma-x11

绿屏

如果出现登录对话框,但当您单击“确定”时没有启动桌面环境,请将 /etc/xrdp/sesman.ini 中的 param=Xorg 更改为 param=/usr/lib/Xorg

loginctl 或 systemctl --user 无法工作

尝试注释掉 /etc/pam.d/system-auth 中所有对 systemd-home 的引用。请参阅 此问题

提示 gnome-keyring 或 KDE Wallet

如果您的会话启动时提示您登录 gnome-keyring 或 [KDE Wallet],请按如下方式修改文件 /etc/pam.d/xrdp-sesman

/etc/pam.d/xrdp-sesman
#%PAM-1.0
auth        include     system-remote-login
-auth       optional    pam_gnome_keyring.so
-auth       optional    pam_kwallet5.so
account     include     system-remote-login
password    include     system-remote-login
-password   optional    pam_gnome_keyring.so    use_authtok
session     include     system-remote-login
-session    optional    pam_gnome_keyring.so    auto_start
-session    optional    pam_kwallet5.so         auto_start

然后,将 etc/pam.d/xrdp-sesman(没有前导斜杠)添加到 /etc/pacman.conf 中的 NoUpgrade。如果您仅使用 gnome-keyring,则无需包含 kwallet5 行,反之亦然。

阻止自启动项启动

要阻止用户定义的 ~/.config/autostart 项启动,您可以将会话上的 autostart 目录参数设置为仅使用全局 /etc/xdg/autostart 目录在 ~/.xinitrc 中。

get_session(){
    local dbus_args=(--sh-syntax)
    case "$SESSION" in
        awesome) dbus_args+=(awesome) ;;
        bspwm) dbus_args+=(bspwm-session) ;;
        budgie) dbus_args+=(budgie-desktop) ;;
        cinnamon) dbus_args+=(cinnamon-session -a /etc/xdg/autostart) ;;

没有声音

这可能是 loginctl 问题的症状,因此请尝试 上面 的修复方法。在系统 日志 中可能会遇到以下错误:

Failed to load module "module-x11-publish" (argument: "display=:10.0 xauthority="): initialization failed.

这是 systemd 未正确启动 PulseAudio 的结果。一种解决方法是 禁用 用户单元 文件 pulseaudio.servicepulseaudio.socket,可以针对您自己的用户或所有用户,并通过在 /etc/pulse/client.conf 中将 autospawn 设置为 yes,使 PulseAudio 在需要时启动。

如果声音仍然无法工作,请尝试在您的 ~/.xinitrc 中使用 pulseaudio & 手动启动 PulseAudio。

双指滚动过快

使用 xorg 后端,确保 xorgxrdp 为 0.9.19 或更高版本。然后将 XRDP_XORG_TOUCHPAD_SCROLL_HACK=yes 添加到 /etc/xrdp/sesman.ini[SessionVariables] 部分。

有关详细信息,请参阅 上游 issue #150

远程系统内的功能受限

用户远程登录系统时可能不具有与本地登录时相同的访问权限。可能需要对 polkit 权限策略进行额外配置以授予访问权限,包括访问挂载的驱动器或控制网络连接。

挂载的驱动器

有关远程访问挂载驱动器的权限,请参阅 udisks#Permissions

NetworkManager

有关远程访问 NetworkManager 的权限,请参阅 NetworkManager#Set up PolicyKit permissions

参见

  • TigerVNC - VNC,RDP 的替代方案,也在此处用作后端。
  • freerdp 是 rdesktop 的一个分支,它支持 RDP 7.1 功能,包括网络级别身份验证 (NLA)。它主要由 xfreerdp 客户端组成。此外,freerdp-shadow-cli 命令提供了一种快速简便的方法来启动 RDP 服务器。