Xvfbを使って、LinuxのGUI環境(デスクトップ)をコンテナ内に作成し、Webブラウザでアクセス

Webブラウザで試験をしたり、GUIによるインタラクティブな処理をするなど、Linuxデスクトップを使いたい場合があります。一般的にLinuxデスクトップ(やベースシステムであるX11)はそのPCに装着されているビデオカードを使用します。そのため、コンテナのようにホストOSのビデオカードにアクセスできない環境ではGUIが基本的に使えません

この記事では、Linuxマシンのコンテナ内にXvfbという仮想的なグラフィックカードドライバを使ってLinuxデスクトップを作成する方法を紹介します。以下では、コンテナ内での設定・実行方法を前提に説明しますが、もちろんホストOS上でも「ソフトウェアのインストール・設定」項目以降の操作を行うことで同様に実行することが可能です。

全体構成

下図のような構成を構築します。Xvfbは、仮想ビデオドライバを使用するX11サーバです。x11vncは、Xvfbの画面をVNCプロトコルに変換して、外部からVNCでアクセスできるようにするVNCサーバです。外部にVNCクライアントがあれば、この2つのソフトウェアでアクセスできます。

下図ではさらに、WebSockifyというソフトウェアを使用しています。これは、VNCをHTTPに変換するサーバです。つまり、VNCクライアントの変わりにWebブラウザでVNCサーバにアクセスできるようになります。

コンテナの作成

ここではコンテナイメージとして、Debian 11 (bullseye)を使用します。 また、LXCと使う場合と、Dockerを使う場合を紹介します。 LXCは、一度作成した環境を引き続き利用する場合に便利です。 Dockerはその環境を使い捨てで使用する場合に便利です。 コンテナの作成は、両者で若干異なりますが、ソフトのインストール方法や設定は同じです。

以下のコマンドをリモートマシンのホスト上で実行します。

LXCコンテナの場合

sudo lxc-create -n mycontainer -t debian -- -r bullseye

作成したLXCコンテナのシェル取得方法

sudo lxc-attach -n mycontainer bash

Dockerコンテナの場合

docker run --net host -it debian:11 bash
上記では、ポートフォワードなどの設定を省略するために`--net host`を指定し、ホストOSのネットワークをそのままコンテナで使用します。セキュリティなどの理由で、ブリッジなどを使いたい場合、適宜変更ください。

ソフトウェアのインストール・設定

続いて、コンテナ内で以下のコマンドを実行します。

コンテナ内にユーザを作成

ユーザを作成するのが面倒な場合、rootで続行してもかまいません。中長期的に使用する場合、ユーザを作成するほうが安全で便利です。

パッケージのインストール

apt update && apt install xvfb openbox x11vnc websockify novnc

Xvfbと関連サーバの実行

以下のコマンドをコンテナ内で実行します。青字の部分は他と重複しないように適宜変更ください。以下のコマンドはフォアグランドで実行されるので、続くコマンドは別の端末で実行します。

Xvfb

xvfb-run -f ~/.Xauthority -n 10 -s "-screen 0 800x600x24" openbox
上記の例では、openboxというWindow Managerを起動しています。他に使用したいWindows Managerやデスクトップ環境のプログラムがある場合、それを指定します。上記の紫色のパラメータがルートウィンドウの解像度と色深度です。これも必要に応じて変更ください。

直接Xvfbを実行する場合

Xvfb :10 -screen 0 800x600x24

x11vnc

x11vnc -display :10 -rfbport 5910 -forever -localhost
上記の`-localhost`オプションは、localhostのみからVNC接続を許可するオプションです。WebSockifyを使わず、VNCクライアントでx11vncに直接アクセスする場合は、このオプションを削除ください。

パスワード

パスワードをつける場合、vncpasswdコマンドでパスワードを作成します。それを-rfbauth ~/.vnc/passwdのように上記のコマンドに追加します。

WebSockify

websockify --web=/usr/share/novnc 8010 localhost:5910

Webブラウザから接続

以下のURLにWebブラウザでアクセスするとXの画面が表示されます。
  • http://[コンテナのIP]:8010/vnc.html
起動直後は真っ黒です。マウスを右クリックをすると以下のキャプチャ画像のようにopenboxのコンテキストメニューが表示されます。
Terminal emulatorを選択すると、次のようにxtermが起動します。

0 件のコメント: