Raspberry pi 3 *反向*遠端桌面

Raspberry pi 3 *反向*遠端桌面

我有本機 (A) 和 Raspberry PI 3 (B)。
B 連接了 HDMI 顯示器,並且正在執行 Raspbian 作業系統。

我想在 A 上運行 X 應用程式 - 比如說我在 A 上的 Libre Office Impress 演示文稿,並使其在連接到 B 的螢幕上可見(顯示)

  • 不是ssh -X to_A來自 B,
  • 也不使用 B 中的 VNC 來取得 A 的輸出

我不是尋找:

  • 使用來自 A 的 ssh 在 B 上運行 X 應用程序,並將其輸出顯示在 A 上(這可以透過from_a $ ssh -X machine_Brdp/remmina/vnc 客戶端完成)
  • 使用 A 中的 ssh 在 B 上運行 X 應用程序,並將其輸出顯示在 B 上(例如,這可以透過在 ssh 中匯出顯示並正確配置 xhost 來完成from_a $ ssh machine_b from -> at_a_but_sshed_onto_b $ xhost + && export DISPLAY=:0 xeyes
  • 需要直接實體存取 B 的解決方案

我嘗試的是設定(B)以便運行遠端X專案...如果我沒有忘記任何事情 - 因為nmap -p6000 machine_B返回該連接埠是關閉,並運行(從 A 的命令列):

A_machine $ env DISPLAY=B_machine:0 xeyes

其中 B_machine 被設定/etc/hosts並且~/.ssh/config失敗。

我懷疑,我完全錯過了複製 X11 的步驟魔法餅乾來自.Xauthority...但也許這一步不是必需的,還有更簡單的方法嗎?

編輯:回應@Rostislav Kandilarov 問題 - 似乎 lightdm 啟動了 X 伺服器,但最快我將能夠檢查它是否是星期一,以及驗證它是否以--nolisten tcp.

答案1

(已編輯,以下是舊答案)

附加要求是您希望從 A 執行所有這些操作,而不接觸 B,在 B 上運行 X 伺服器並使用 A 上的應用程式連接到它的問題是,該 X 伺服器僅使用輸入裝置(鍵盤、滑鼠) )連接到B。

原則上你可以嘗試共享 A 的輸入設備,但隨後的結構就開始變得錯綜複雜...

所以虛擬網路控制器很多在這種情況下更容易。

在A上設定 a vnc4serverxvnc4viewer在 B 上啟動另一個 vncviewer 並將其連接到 A 上的伺服器,它將顯示該應用程式。它可以很簡單directvnc(直接使用 RaspPi 的幀緩衝區,無需額外繞道 X,因此 RaspPi 的工作量更少),或者如果您想繼續在 B 上運行現有的 X 伺服器,另一個xvnc4viewer


最簡單的方法是使用遠端桌面,例如虛擬網路控制器,很可能已經在您的發行版中作為軟體包提供。這通常比透過 ssh 或其他方式進行 X 轉發要好得多,因為它壓縮得更好,並且在線上不使用 X 原語。

當然,還有多種方法可以透過 ssh 或直接設定 X 轉發。例如,您可以透過從 B 登入ssh -XA,在 A 上運行您的應用程序,然後將輸出顯示在 B 上。你想要的話)。

您也可以透過以下方式設定 X 伺服器以進行遠端會話XDMCP。或使用正確的xauth設定讓單一應用程式使用遠端 X 伺服器DISPLAY

但我仍然建議先嘗試 VNC。

答案2

因此,如果您在 (B) 上使用 Raspbian OS,如果您沒有進行任何特定的自訂,因為您懷疑您可能正在使用 lightdm 。

當然,您需要告訴 lightdm 讓 X 伺服器監聽 tcp(連接埠 6000)。您可以透過xserver-allow-tcp=true在全域部分的conf 檔案中進行設定來完成此操作[Seat:*]。您可能還需要明確指定xserver-command=X -listen tcp(看看這裡)。您可以選擇任何額外文件/etc/lightdm/lightdm.conf.d/*.conf或直接在/etc/lightdm/lightdm.conf.

接下來,如果您不太關心安全性,您可能還需要在 (B) 上執行某種形式的xhost +命令,例如xhost + IP_OF_(A).如果您確實關心 LAN 漏洞你不應該首先直接使用 X over tcp ,但如果沒有 ssh ,您可以透過在 (B) 上運行來在 (A) 和 (B) 之間交換 MIT-MAGIC-COOKIE ,從而提供一點破解難度xauth extract - $DISPLAY | ssh (A) xauth merge -

然後重新啟動 lightdmservice lightdm restartsystemctl restart lightdm.service根據您的作業系統版本。

最後 - 檢查 (B) Xorg 是否正在偵聽 6000netstat -antp | grep -F 6000

相關內容