モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

Linux 環境における X11 転送

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2018/05/24
最終更新最終更新
2024/01/16
記事区分記事区分
一般公開

目次

    データベース運用が得意です!

    0
    ステッカーを贈るとは?

    リモートホストの 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 待ち受けの場合は接続エラーが発生します。

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

    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
    

    OpenGL ベンチマーク

    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
    

    リモート X11 サーバへのアクセス

    リモートからの X11 アクセスを許可しておけば

    Xvfb :99 -screen 0 1024x768x24 -listen tcp
    DISPLAY=:99 xhost +
    access control disabled, clients can connect from any host
    

    以下のように接続できます。

    DISPLAY=123.123.123.123:99 glxgears
    

    -ac オプション (man xserver) を指定すれば xhost 設定は不要になります。

    Xvfb :99 -screen 0 1024x768x24 -listen tcp -ac
    

    X サーバに接続して録画する (ffmpeg x11grab)

    以下のように仮想ディスプレイを作成してみます。

    Xvfb :99 -screen 0 1024x768x24 -listen tcp -ac
    

    何らかの X アプリケーションを接続します。

    DISPLAY=:99 xcalc
    

    VNC 経由で操作してみます。

    x11vnc -display :99 -listen 0.0.0.0 -forever -xkb -shared -nopw
    DISPLAY=:0 gvncviewer localhost::590
    

    以下のようにして録画できます。-framerate で fps を調整すれば動画のサイズも軽くなります。

    ffmpeg -y -video_size 1024x768 -framerate 30 -f x11grab -i localhost:99+0,0 -ac 2 grab.mp4
    

    リモートホストの X11 を録画する場合は時刻情報が取得できずにエラーとなるため gvncviewer 等と併用するとよいです。

    DISPLAY=localhost:99 gvncviewer 1.2.3.4::5900
    ffmpeg -y -video_size 1024x768 -framerate 30 -f x11grab -i localhost:99+0,0 -ac 2 grab.mp4
    

    スクリーンショットも取得できます。

    sudo apt install imagemagick
    DISPLAY=localhost:99 import -window root screenshot.png
    

    拡大縮小できる realvnc

    deb ファイル等でインストールします。

    sudo dpkg -i VNC-Viewer-6.19.325-Linux-x64.deb
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    データベース運用が得意です!

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事