リモートホストの X Window System (X11) を転送して利用する方法を、SSH および Virtual Network Computing (VNC) の二つの方法について記載します。
サーバとホストの両方で X11 転送を有効にすることで利用できます。アプリケーション毎に転送できます。
サーバ側
sudo apt install xauth
/etc/ssh/sshd_config
$ egrep '(X11Forwarding|X11UseLocalhost)' /etc/ssh/sshd_config
X11Forwarding yes
X11UseLocalhost no
クライアント側
ssh -XC hostname
firefox &
あるいは以下のように ssh 設定しておきます。
~/.ssh/config
ForwardX11 yes
サーバ側で、X11 に対して VNC 接続できるように待ち受けるための x11vnc
を起動します。
sudo apt install x11vnc
x11vnc -storepasswd
x11vnc -forever -usepw
何らかの VNC クライアントで接続します。Windows のリモートデスクトップのような感覚です。
sudo apt install gvncviewer
gvncviewer remotehost
VNC は平文で通信するため、暗号化したい場合は SSH ポート転送を併用します。以下では、remotehost から見た localhost の 5900 番を、localhost の 5959 番に転送しています。
ssh -L 5959:localhost:5900 remotehost
gvncviewer localhost::5959
実際のディスプレイが存在しない場合であっても X11 サーバの一つである Xvfb を利用することで仮想ディスプレイを作成できます。例えば、以下のコマンドで 99 番の DISPLAY を作成できます。
sudo apt install xvfb
export DISPLAY=:99
Xvfb :99 -screen 0 1024x768x24 &
これを先程の x11vnc で VNC 接続できるようにします。
sudo apt install x11vnc
x11vnc -storepasswd
x11vnc -display :99 -bg -usepw -listen 0.0.0.0 -xkb -forever
以上で 99 番のディスプレイに VNC 接続できるようになりました。パスワードなし、複数人で接続するためには -shared -nopw
とします。
x11vnc -display :99 -listen 0.0.0.0 -forever -xkb -shared -nopw
VNC ポート 5900 番が空いていない場合は先程の SSH ポートフォワーディングを併用します。
ssh -L 5959:localhost:5900 remotehost
Firefox を起動してみます。DISPLAY
環境変数を指定する必要があることに注意します。
ssh remotehost
sudo apt install firefox-esr
DISPLAY=:99 firefox &
X11 アプリケーションとして Firefox を単体で起動しましたが、開発中の QT アプリケーション等で「閉じるボタン」がない場合等は fluxbox
等の X11 ウィンドウマネージャを同じ DISPLAY
に X11 アプリケーションとして起動しておくと便利です。xvfb
と x11vnc
をバックグラウンドで起動中のシェル等で fluxbox
も追加起動します。
ssh remotehost
sudo apt install fluxbox
DISPLAY=:99 fluxbox &
今回は macOS の Finder から VNC クライアントを起動して接続しました。そのため、パスワードが無指定の VNC 待ち受けの場合は接続エラーが発生します。
「閉じるボタン」がない QT アプリケーションを起動した様子です。ウィンドウマネージャ配下にあるため閉じることができます。
sudo apt install x11-apps
DISPLAY=:99 xeyes
DISPLAY=:99 xrandr
xrandr: Failed to get size of gamma for output screen
Screen 0: minimum 1 x 1, current 1024 x 768, maximum 1024 x 768
screen connected 1024x768+0+0 0mm x 0mm
1024x768 0.00*
モニター一覧は以下のコマンドで確認できます。
DISPLAY=:0 xrandr --listmonitors
解像度等を変更するためには以下のようにします。
gtf 800 400 128
DISPLAY=:0 xrandr --newmode "800x400_128.00" 58.26 800 840 928 1056 400 401 404 431 -HSync +Vsync
DISPLAY=:0 xrandr --addmode screen 800x400_128.00
DISPLAY=:0 xrandr -s 800x400_128.00
Xvfb で作成した仮想ディスプレイの場合、CPU が許容するリフレッシュレートが表示されます。
DISPLAY=:0 glxgears
例えば xvfb の CPU 使用率を制限すると glxgears
の CPU 使用率は下がります。以下の設定では xvfb は N コア * 100 %
のうちの 1.0 %
しか使用できなくなります。
apt install cgroup-bin
cgcreate -g cpu:cpulimited
cgget -r cpu.cfs_period_us cpulimited
cgset -r cpu.cfs_period_us=1000000 cpulimited
cgget -r cpu.cfs_quota_us cpulimited
cgset -r cpu.cfs_quota_us=10000 cpulimited
cgexec -g cpu:cpulimited Xvfb :99 -screen 0 1024x768x24