Xorg

如何在Linux上實現MS遠端桌面的效果?

  • November 29, 2017

在 Windows 機器上,如果一台機器 A 執行遠端桌面服務,而另一台機器 B(實際上不必是 Windows)執行遠端桌面客戶端 - 那麼 B 上的使用者可以“竊取”對會話的控制A,查看在那裡打開的應用程序視窗並與之互動。請注意,如果沒有現有會話,RDP 還允許您打開一個新會話,但這不是問題所在。

我的問題:A 作為 Linux 機器,執行 X 伺服器,X 會話正在進行中,我怎樣才能達到同樣的效果。

筆記:

  • 解決方案不必基於 MSRDP 本身,它可以是 NX、VNC 或任何其他您喜歡的。
  • 我願意在 A 和 B 上安裝軟體,包括以 root 使用者身份安裝。
  • 商業解決方案是相關的,但我寧願不求助於它們。
  • 解決方案可能涉及在 A 上打開其他埠(例如,除了用於 SSH 的埠 22)。
  • 假設發行版是基於 Debian 的並且是相當新的。
  • 這個問題與這個問題相似,但不一樣,因為:1.我願意執行除 X 和 2 以外的服務。在那個問題中,OP 似乎對獲取特定視窗更感興趣,而對我來說它是重要的是看到整個事情。
  • A 和 B 上的使用者都可以與同一會話進行互動的解決方案也是相關的。

要控制正在執行的 X 會話,您需要將 VNC 伺服器配置為連接到與 X 相同的顯示器。通常,X 將連接到第一個顯示器 - :0

您還需要該 X 會話的 X 權限。這可以通過訪問遠端顯示管理器正在使用的 X 授權文件找到。這取決於您的顯示管理器,可以使用ps aux和找到grep。例如:psaux | grep Xorg給你類似的東西:

/usr/libexec/Xorg -background none :0 -seat seat0 -auth /var/run/lightdm/root/:0 -listen tcp vt1 -noswitch

請注意該-auth選項,因為 VNC 需要它。然後,您需要root在安裝後在遠端電腦上執行類似以下內容x11vnc

/usr/bin/x11vnc -norc -forever -shared -bg -autoport 5900 -auth /var/run/lightdm/root/:0

最簡單的方法是創建一個在啟動時為您執行的服務。在使用 的發行版上systemd,創建/etc/systemd/system/x11vnc.service類似於以下內容的文件:

[Unit]
Description=VNC Server for X11
Requires=display-manager.service
After=display-manager.service

[Service]
Type=forking
ExecStart=/usr/bin/x11vnc -norc -forever -shared -bg \
       -autoport 5900 \
       -rfbauth /etc/x11vnc.pass \
       -o /var/log/x11vnc.log \
       -auth /var/run/lightdm/root/:0

[Install]
WantedBy=graphical.target

注意-rfbauth選項。您需要事先使用以下命令創建密碼文件:

$ sudo x11vnc -storepasswd /etc/x11vnc.pass

或者,如果您覺得不需要受密碼保護的 VNC 會話,則只需刪除該-rfbauth行。

在啟動時啟用:

$ sudo systemctl enable x11vnc.service

手動啟動它:

$ sudo systemctl start x11vnc.service

您現在可以使用 VNC 客戶端連接到遠端電腦並接管會話。

引用自:https://unix.stackexchange.com/questions/258600