是否有命令列出機器上所有打開的顯示器?
當 SSH 在本地連接到我的電腦時(不要問,這是一種解決方法),我無法在不執行的情況下啟動圖形應用程序:
export DISPLAY=:0.0
如果我先執行它,然後執行圖形應用程序,事情就會解決。如果沒有,它就不起作用,沒有顯示器可以連接。
是否有列出機器上所有可用顯示(即:所有可能值)的命令?
如果要通過 SSH 轉發 X 連接,則需要在伺服器端和客戶端都啟用它。(取決於發行版,它可能預設啟用或禁用。)在伺服器端,確保您擁有
X11Forwarding yes
(/etc/sshd_config
或/etc/ssh/sshd_config
配置文件所在的任何位置)。在客戶端,將-X
選項傳遞給ssh
command,或放入ForwardX11
您的~/.ssh/config
.如果你執行
ssh -X localhost
,你應該看到它$DISPLAY
是(可能)localhost:10.0
。對比:0.0
,這是您未通過 SSH 連接時的值。(這.0
部分可以省略;它是一個螢幕編號,但很少使用多個螢幕。)您可能會遇到兩種形式的 X 顯示:
- 本地顯示,在
:
.- TCP 顯示,在
:
.使用
ssh -X localhost
,您可以通過兩個顯示器訪問 X 伺服器,但應用程序將使用不同的方法::NUMBER
通過本地套接字和共享記憶體訪問伺服器,而HOSTNAME:NUMBER
通過 TCP 訪問伺服器,速度較慢並禁用某些擴展。請注意,您需要一種授權形式來訪問 X 伺服器,稱為 cookie,通常儲存在後台文件中
~/.Xauthority
。如果您使用 ssh 訪問不同的使用者帳戶,或者如果您的發行版將 cookie 放在不同的文件中,您可能會發現這DISPLAY=:0
在 SSH 會話中不起作用(但是ssh -X
,如果在伺服器中啟用它;您永遠不會XAUTHORITY
做的時候需要弄亂ssh -X
)。如果這是一個問題,您需要設置XAUTHORITY
環境變數或獲取其他使用者的 cookie。要回答您的實際問題:
- 本地顯示對應於
/tmp/.X11-unix
.(cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
- 遠端顯示對應6000以上開放的TCP埠;通過連接到機器 M 上的 TCP 埠 6000+N 來訪問機器 M 上的顯示編號 N。從機器 M 本身:
netstat -lnt | awk ' sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 { print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000) }'
(此要點的其餘部分僅具有學術意義。)
在另一台機器上,您可以使用它
nmap -p 6000-6099 host_name
來探測通常範圍內的開放 TCP 埠。現在很少有 X 伺服器在 TCP 套接字上監聽,尤其是在環回介面之外。嚴格來說,另一個應用程序可能正在使用 X 伺服器通常使用的範圍內的埠。您可以通過檢查哪個程序打開了埠來判斷 X 伺服器是否正在偵聽。
lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
如果這顯示出類似 的模棱兩可的東西
sshd
,則無法確定它是 X 伺服器還是巧合。