Ssh

SSH - 如何讓 X 應用程序在客戶端上執行?

  • February 4, 2014

我遇到了大多數人似乎遇到的相反問題。如果我在登錄 ssh 時啟動 X 應用程序,它會顯示在伺服器(主機)機器上,而不是客戶端(本地)上。這是我使用的命令

$ ssh -X -p 6623 pinker@192.168.0.200

我的 $DISPLAY 變數在客戶端上顯示正確。

$ echo $DISPLAY
:0

我希望來自伺服器的 X 應用程序在客戶端(我實際所在的機器)上本地顯示。我不知道這是什麼原因造成的。

為了這次對話,假設有 2 台機器名為lappyremoteylappy系統是您執行命令的ssh地方。您要連接的系統是remotey.

1.在lappy上顯示遠端GUI

       lappy               .-,(  ),-.    
          __  _         .-(          )-.          remotey 
         [__]|=|  ---->(    network     )------> ____   __ 
         /::/|_|        '-(          ).-'       |    | |==|
                            '-.( ).-'           |____| |  |
                                                /::::/ |__|

     NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on lappy

您的 shell 的配置文件可能正在設置環境變數DISPLAY=:0。你可以像這樣 grep :

$ grep DISPLAY $HOME/{.bash*,.profile*}

如果這沒有返回任何內容,那麼您正在登錄的系統可能是罪魁禍首。也可以看看這個目錄。

$ grep DISPLAY /etc/profile.d/* /etc/bash*

如果您寧願保持這種狀態,您可以通過指示ssh將 X 流量重定向回您的客戶端系統來覆蓋此行為,如下所示:

$ ssh -X user@remoteserver

例子

在這裡,我有一個$DISPLAY設置為:0與您的類似的遠端伺服器。

$ ssh -X skinner "echo $DISPLAY"
:0

但無論如何,我仍然可以呼叫 X 應用程序並將它們遠端顯示到正在執行ssh命令的系統上。我什至不必登錄,我可以像這樣直接執行 GUI:

$ ssh -X skinner xeyes

作為額外提示,您可能希望更改正在使用的密碼,以幫助提高 X11 流量在通過 SSH 隧道時的性能。

$ ssh -c arcfour,blowfish-cbc -X skinner xeyes

2.遠端顯示GUI

       lappy               .-,(  ),-.    
          __  _         .-(          )-.          remotey 
         [__]|=|  ---->(    network     )------> ____   __ 
         /::/|_|        '-(          ).-'       |    | |==|
                            '-.( ).-'           |____| |  |
                                                /::::/ |__|

     NOTE: on lappy, `ssh` to remotey, run GUI, see GUI on remotey

如果您正在通過 SSH 進入remoteyfromlappy但希望不顯示 GUI ,則只需從呼叫中lappy刪除-X開關即可。ssh

$ ssh -p 6623 pinker@192.168.0.200

3. 消除 $HOME/.ssh/config

很多時候,使用者的$HOME/.ssh目錄可能會引入未知數,以了解正在發生的事情。在執行測試時,您可以暫時禁止使用config此目錄中的文件。

$ ssh -F /dev/null -p 6623 pinker@192.168.0.200

4.消除遠端shell的配置

您可以使用以下測試暫時禁用 shell 的配置文件,remotey如下所示:

$ ssh -t -X -p 6623 pinker@192.168.0.200 "bash --norc --noprofile"

有了上面的內容,任何設置都不應該被引入這個 Bash shell,所以你應該能夠設置DISPLAY=:0然後將 GUI 顯示到 remotey 的桌面。

您可以使用以下技巧來幫助隔離問題,首先刪除--noprofile並嘗試此命令:

$ ssh -t -X -p 6623 pinker@192.168.0.200 "bash --norc"

然後是這個命令:

$ ssh -t -X -p 6623 pinker@192.168.0.200 "bash --noprofile"

第一個版本會告訴你問題是否出在你的/etc/bashrc&$HOME/.bashrc配置文件鏈上,而第二個版本會告訴你問題是否出在$HOME/.bash_profile配置文件上。

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