Linux 環境における X11 転送
[履歴] [最終更新] (2018/11/22 13:02:09)
1
作品
407
技術情報
最近の投稿
ここは
趣味の電子工作を楽しむ人のためのハードウェア情報共有サイト

技術情報や作品の投稿機能、リアルタイム遠隔操作 API をご利用いただけます。
新着作品

概要

リモートホストの X Window System (X11) を転送して利用する方法を、SSH および Virtual Network Computing (VNC) の二つの方法について記載します。

SSH

サーバとホストの両方で 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

VNC

サーバ側で、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

仮想ディスプレイを作る (Xvfb)

実際のディスプレイが存在しない場合であっても 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 ポートが空いていない場合

VNC ポート 5900 番が空いていない場合は先程の SSH ポートフォワーディングを併用します。

ssh -L 5959:localhost:5900 remotehost

X11 アプリケーションの起動

Firefox を起動してみます。DISPLAY 環境変数を指定する必要があることに注意します。

ssh remotehost
sudo apt install firefox-esr
DISPLAY=:99 firefox &

X11 ウィンドウマネージャの併用

X11 アプリケーションとして Firefox を単体で起動しましたが、開発中の QT アプリケーション等で「閉じるボタン」がない場合等は fluxbox 等の X11 ウィンドウマネージャを同じ DISPLAY に X11 アプリケーションとして起動しておくと便利です。xvfbx11vnc をバックグラウンドで起動中のシェル等で fluxbox も追加起動します。

ssh remotehost
sudo apt install fluxbox
DISPLAY=:99 fluxbox &

今回は macOS の Finder から VNC クライアントを起動して接続しました。そのため、パスワードが無指定の VNC 待ち受けの場合は接続エラーが発生します。

Uploaded Image

「閉じるボタン」がない QT アプリケーションを起動した様子です。ウィンドウマネージャ配下にあるため閉じることができます。

Uploaded Image

X11 サーバの動作確認

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
関連ページ
    概要 QT を Python から利用するためのライブラリには PyQt や PySide 等が存在します。PySide は元々 QT4 向けのライブラリでしたが、QT5 に対応するために新たに PySide2 が開発されました。PySide2 は Qt for Python ともよばれています。 Q: PySide? Qt for Python? what is the name?
    概要 こちらで公開されている stone という小型のツールを用いると、飛び石としてパケット転送を行う中継サーバを用意することができます。実際には多機能なツールですがここでは最も簡単な使用例を紹介します。 ビルド手順 ダウンロード 公式サイトから最新のもの stone version 2.3e をダウンロードします。