Xorg
如何在Linux上實現MS遠端桌面的效果?
在 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 客戶端連接到遠端電腦並接管會話。