はじめに
リモートの Linux サーバーで GUI を起動して,ログアウトした後も実行させ続け,好きなときにウィンドウを表示させたい.
xrdp を使う方法だとなかなかうまくいかなかったので,Xpra を利用してサーバー上の仮想ディスプレイにあるウィンドウをローカルに転送する方法を用いた.
環境
- リモート: Ubuntu 20.04.6 LTS
- ローカル: Ubuntu 22.04.2 LTS (WSL2)
準備
以下のサイトが参考になった.
$ sudo apt install -y xpra python-cryptography
$ sudo apt install -y xpra
$ sudo pip install cryptography
リモートの Xwrapper.config 内の allowed_users
を console
から anybody
に変更.
allowed_users=anybody
起動
リモート
このサイトの方法で,リモートで GUI アプリケーションを起動する.
$ xpra start :1111
# 1111 番ディスプレイで screen を起動
$ DISPLAY=:1111 screen
開いた screen 内で,firefox などの GUI アプリケーションを起動する.
$ firefox
ここではまだウィンドウは表示されない.起動したら,Ctrl-A + D
で screen を離れる.
これで,logout しても GUI が 1111 番ディスプレイで起動している状態になった.
ローカル
次に,ローカル側で Xpra を起動する.
$ xpra --ssh=ssh attach ssh:REMOTE:1111
REMOTE
は,.ssh/config
に登録されている接続先.今回は踏み台サーバーでポート転送を利用して接続していたが,問題なく接続できた..ssh/config
の内容はこんな感じ.
Host FUMIDAI
HostName [ADDRESS]
User [USERNAME]
LocalForward [PORT] localhost:[PORT]
Host REMOTE
HostName localhost
User [USERNAME]
Port [PORT]
ProxyCommand ssh -W %h:%p FUMIDAI
うまくいけば,これでウィンドウが表示される.終了するには,ターミナルで Ctrl-C
する.
エラー
TypeError: Couldn't find foreign struct converter for 'cairo.Context'
のエラーが表示される場合は,先に python3-gi-cairo
を入れる.
$ sudo apt install python3-gi-cairo
他にもエラーや警告がわんさか表示されていたが,今回は問題なく接続できた.
ちなみに,リモートサーバー上で Xpra を起動して,表示されたウィンドウを X11Forwarding を用いて転送する方法では,一瞬だけウィンドウが表示されるがすぐに消え,うまく接続できなかった.
原因はよくわかっていない.
おわりに
Xpra という方法に辿り着くまでに数日かかり,原因不明のエラーの嵐だったが,とりあえずなんとか実現できたのでよかった.