Xrdp
xrdp 是一个守护程序,支持 Microsoft 的 Remote Desktop Protocol (RDP)。 它使用 Xvnc 或 xorgxrdp 作为其后端。
安装[编辑 | 编辑源代码]
安装 xrdpAUR 软件包 (或是选择开发版本 xrdp-gitAUR)。这仅支持XVNC作为后端。
Xorg 后端[编辑 | 编辑源代码]
要使用 xorgxrdp 代替后端,安装 xorgxrdpAUR 包。
将 allowed_users=anybody
添加到 /etc/X11/Xwrapper.config
以允许任何人启动 X 服务器。
使用说明[编辑 | 编辑源代码]
首先,启动 xrdp
服务。您应该能够将 RDP 客户端连接到默认 RDP 端口 (3389) 上的主机。如果成功,您将看到“xrdp”会话管理器窗口,该窗口允许您在“Xorg”或“Xvnc”会话之间进行选择,并为用户身份验证提供输入。通过修改 /etc/xrdp/xrdp.ini
可以高度自定义会话管理器 UI。
用于启动 Xorg 和 Xvnc 显示服务器的参数可以在 /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 会话,您可以通过为 Intel 和 AMD GPU 安装 xorgxrdp-glamorAUR 和为 Nvidia GPU 安装 xorgxrdp-nvidiaAUR 来启用 OpenGL 和 Vulkan 图形加速。
声卡[编辑 | 编辑源代码]
安装必要的 PulseAudio 与 pulseaudio-module-xrdpAUR 模块或者 PipeWire 与 pipewire-module-xrdpAUR。
非 root 用户[编辑 | 编辑源代码]
在 Xwrapper.config
中添加如下内容:
/etc/X11/Xwrapper.config
allowed_users=anybody needs_root_rights=no
如果没有上面的内容,从 Remmina 等程序发起的远程连接将会出现空白屏幕。
疑难解答[编辑 | 编辑源代码]
X server could not be started[编辑 | 编辑源代码]
由于 waitforx 的不兼容[1],可以将 /usr/lib/xrdp/waitforx
备份后,编辑新文件waitforx
:
#!/bin/sh
exit 0
保存后设置775权限。
光标周围的黑框[编辑 | 编辑源代码]
如果您在鼠标指针周围遇到黑框,请使用 Xcursor.core:1
行创建 ~/.Xresources-xrdp
并将其加载到 ~/.xinitrc
中,例如
xrdb ~/.Xresources-xrdp exec startlxde
您可能需要安装 xorg-xrdb包。
黑屏[编辑 | 编辑源代码]
如果您的 ~/.xinitrc
在 dbus_args
中设置了 --exit-with-session
,则登录会话管理器后可能会出现黑屏。
尝试将 ~/.xinitrc
复制到 ~/.xrdpinitrc
,删除 --exit-with-session
,然后更新 /etc/xrdp/startwm.sh
调用 ~/.xrdpinitrc
而不是 ~/.xinitrc
。您可能需要将您的桌面环境添加到对 .xrdpinitrc 的调用中,如 ~/.xinitrc 中所述;例如 . ~/.xrdpinitrc xfce
。
桌面环境的黑屏[编辑 | 编辑源代码]
如果使用桌面环境出现黑屏,则可能是 D-Bus 未正确初始化造成的。一些桌面环境(例如 KDE Plasma) 可能会从之前的会话中恢复应用程序和窗口,所以结果是只缺失了 "plasmashell"。
尝试使用 ~/.xinitrc
文件中的 dbus-launch --exit-with-session
运行桌面环境。对于 KDE Plasma,您可以使用命令 /usr/lib/plasma-dbus-run-session-if-needed startplasma-x11
或者 dbus-launch --exit-with-session startplasma-x11
。
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 optional pam_keyinit.so force revoke session include system-remote-login -session optional pam_gnome_keyring.so auto_start -session optional pam_kwallet5.so auto_start
如果您只使用 gnome-keyring,则不需要包含 kwallet5 行,反之亦然。
阻止自动启动项目启动[编辑 | 编辑源代码]
要阻止用户定义的 ~/.config/autostart
项目启动,您可以在 ~/.xinitrc
中的会话上设置自动启动目录参数以仅使用全局 /etc/xdg/autostart
目录。
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 问题的征兆,因此请尝试以以上内容修复。系统journal可能会遇到以下错误:
Failed to load module "module-x11-publish" (argument: "display=:10.0 xauthority="): initialization failed.
这是 systemd 不正确地启动 PulseAudio 的结果。一种解决方法是为您自己的用户或所有用户禁用 user unit 文件 pulseaudio.service
和 pulseaudio.socket
,然后启动 PulseAudio需要时通过在 /etc/pulse/client.conf
中将 autospawn
设置为 yes
。
如果仍然没有声音,请尝试使用 ~/.xinitrc
中的 pulseaudio &
手动启动 PulseAudio。
两指滚动过快[编辑 | 编辑源代码]
使用 xorg 后端,确保 xorgxrdp 版本 0.9.19 或更新。然后添加 XRDP_XORG_TOUCHPAD_SCROLL_HACK=yes
到 /etc/xrdp/sesman.ini
中的 [SessionVariables]
段 。
参见此问题以获得详细信息。
远程系统的功能限制[编辑 | 编辑源代码]
远程用户的权限可能会比直接登录用户的权限要低。需要额外的 polkit 权限配置策略:
挂载的设备[编辑 | 编辑源代码]
要远程访问挂载的设备,请参考 udisks#Permissions.
NetworkManager[编辑 | 编辑源代码]
要远程访问网络管理器,请阅读 NetworkManager#Set up PolicyKit permissions。