gravatar

SSH X-Window Forwarding

SSH 提供了 X-Window forwarding,也就是把遠端機器的 X application 畫面設定到自己 local 的 X Server 來顯示。通常就是ssh -X hostname之後,在遠端機器就會幫你在環境變數加入 DISPLAY=xxx.xxx.xxx.xxx:10.0 這樣的設定。之後執行 X Window 應用程式,畫面就會透過 SSH tunneling 把 display 顯示到自己的機器上。但是如果是 sudo 成別的帳號,可能會遇到這樣的情況。

X11 connection rejected because of wrong authentication.
X connection to localhost:10.0 broken (explicit kill or server shutdown).
明明就是可以,但是 sudo 之後就不行了。這時候,只要在本來的帳號下,使用 xauth list ,然後他可能列出好幾行。
foo.bar:2 MIT-MAGIC-COOKIE-1 4ef2e2cefdb15f6e9a44a7e698ba0584
foo.bar/unix:2 MIT-MAGIC-COOKIE-1 4ef2e2cefdb15f6e9a44a7e698ba0584
foo.bar:1 MIT-MAGIC-COOKIE-1 5a3617cc83069d0af6684a8aeedca705
foo.bar/unix:1 MIT-MAGIC-COOKIE-1 5a3617cc83069d0af6684a8aeedca705
foo.bar/unix:12 MIT-MAGIC-COOKIE-1 175a25ba1e7b9b3c82272bc097094cad
foo.bar/unix:10 MIT-MAGIC-COOKIE-1 e50fadee8f3fc8492fc095539e3ac93d
foo.bar/unix:11 MIT-MAGIC-COOKIE-1 25195e4d102ac24b4ea943806382ea7c
這時候就挑其中一個對應到目前 DISPLAY 設定的,比如說 :10.0,就把 foo.bar/unix:10 那行整段 copy 起來。然後再 sudo 之後,執行 xauth,然後 add foo.bar/unix:10 MIT-MAGIC-COOKIE-1 e50fadee8f3fc8492fc095539e3ac93d的方式,再 exit xauth。之後如果沒有設 DISPLAY 就手動設定一下。然後就可以透過這個 SSH X Forwarding 來使用。