Xrdp

出自 Arch Linux 中文维基

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。

用於啟動 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 會話,您可以通過為 Intel 和 AMD GPU 安裝 xorgxrdp-glamorAUR 和為 Nvidia GPU 安裝 xorgxrdp-nvidiaAUR 來啟用 OpenGLVulkan 圖形加速。

聲卡[編輯 | 編輯原始碼]

安裝必要的 PulseAudiopulseaudio-module-xrdpAUR 模塊或者 PipeWirepipewire-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

黑屏[編輯 | 編輯原始碼]

如果您的 ~/.xinitrcdbus_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.servicepulseaudio.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

參閱[編輯 | 編輯原始碼]

  • TigerVNC - VNC,一個 RDP 的替代品,同時在此用作後端
  • freerdp 一個支持 RDP 7.1 功能的 rdesktop 分支,包括網絡級身份驗證 (NLA)。它主要由 xfreerdp 客戶端組成。此外,freerdp-shadow-cli 命令提供了一種快速簡便的方法來啟動 RDP 伺服器。