SSH - 如何讓 X 應用程序在客戶端上執行?
我遇到了大多數人似乎遇到的相反問題。如果我在登錄 ssh 時啟動 X 應用程序,它會顯示在伺服器(主機)機器上,而不是客戶端(本地)上。這是我使用的命令
$ ssh -X -p 6623 pinker@192.168.0.200
我的 $DISPLAY 變數在客戶端上顯示正確。
$ echo $DISPLAY :0
我希望來自伺服器的 X 應用程序在客戶端(我實際所在的機器)上本地顯示。我不知道這是什麼原因造成的。
為了這次對話,假設有 2 台機器名為
lappy
和remotey
。lappy
系統是您執行命令的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 進入
remotey
fromlappy
但希望不顯示 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
配置文件上。