LXC で GUI
〜 画面がなくても VNC 〜
2025-09-09 作成 福島
TOP > tips > lxc-xvfb
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob | Shell ]

1. LXC を用意

ここを参考にして LXC を用意する。条件は以下 (↓)。

コンテナ
項目内容備考
コンテナ名xvfb-
IP アドレス10.0.3.11-
OSAlmaLinux 9.6 (Sage Margay) 
amd64
AlmaLinux10 では以下が未サポートなので 9 を使う。
  • openbox や fluxbox 等の軽量ウィンドウマネージャ
  • xorg-x11-server-Xvfb (Xvfb 本体)
  • x11vnc (VNC サーバ)
VNC ポート5901慣習的に 5900 ~ 5909 を使う。(自由に変更して構わない)
本稿では Xvfb :1 としてディスプレイ番号 1 を使うためポート 5901 を開く。

親 OS (KVM のゲスト OS)
項目内容備考
ホスト名guest1KVM のゲスト OS として作成
IP アドレス192.168.11.20-
OSAlmaLinux 10.0 (Purple Lion) 本稿記述時の最新版


PC
項目内容備考
IP アドレス192.168.11.21-
WindowsWindows11 Pro 24H2-
VNC クライアントTightVNC 2.8.85 (64-bit) ダウンロードはここから


2. ポート転送の設定

2-1. 親 OS からコンテナへポート転送する。
親 OS のポートへ接続してきたら、コンテナのポートへ転送する。(PC → 親:1159 → コンテナ:5901)
guest1$ su
guest1# firewall-cmd --permanent --add-forward-port=port=1159:proto=tcp:toport=5901:toaddr=10.0.3.11
guest1# firewall-cmd --reload
guest1# firewall-cmd --list-forward-ports
port=1159:proto=tcp:toport=5901:toaddr=10.0.3.11  
guest1# exit
guest1$
2-2. コンテナで VNC サーバのポートを開ける。
guest1$ ssh admin@10.0.3.11
xvfb$ su
xvfb# firewall-cmd --permanent --add-port=5901/tcp
xvfb# firewall-cmd --reload
xvfb# firewall-cmd --list-ports
5901/tcp 
xvfb# exit
xvfb$


3. Xvfb と確認用アプリケーションをインストール

下記をすべてインストールすると (計算が合わないが) 約 1.2GB のディスク容量を必要とする。

3-1. Xvfb と漢字フォントをインストールする。
xvfb$ su
xvfb# dnf install -y epel-release # EPEL リポジトリ情報 (2.1MB)
xvfb# dnf config-manager --set-enabled crb # Code Ready Builder (開発者向けパッケージ) を有効にする
xvfb# dnf install -y xorg-x11-server-Xvfb x11vnc # Xvfb と x11vnc (199MB)
xvfb# dnf install -y google-noto-sans-cjk-ttc-fonts # 漢字フォント (125MB)
3-2. 動作確認用アプリケーションをインストールする。
xvfb# dnf install -y openbox gtk3 gobject-introspection python3-gobject # ウィンドウマネージャ (289MB)
xvfb# dnf install -y xterm kmines # ターミナルエミュレータ、マインスイーパー(ゲーム) (333MB)
xvfb# exit
xvfb$


4. X の起動と VNC サーバのリンク

4-1. 仮想 X サーバを起動する。(X は元々仮想なので、仮想を強調するのもおかしいが…)
xvfb$ Xvfb :1 -screen 0 640x480x24 &
4-2. X の画面「:1.0」を VNC にリンクする。(ポート 5901)
xvfb$ x11vnc -display :1.0 -rfbport 5901 -nopw &


5. X の中にアプリケーションを起動

openbox を画面「:1.0」に起動する。(ディスプレイ番号1、画面番号0)
xvfb$ DISPLAY=:1.0 openbox &

xterm を画面「:1.0」、座標 (10,20) に起動する。
xvfb$ DISPLAY=:1.0 xterm -geometry 80x24+10+20 &

マインスイーパーを画面「:1.0」、座標 (380,100) に起動する。
xvfb$ DISPLAY=:1.0 kmines -geometry 240x320+380+100 &


6. PC から VNC で接続

親 OS のポート 1159 に接続する。

ここでは TightVNC を使用する。
− □ × 
 >_ Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> # TightVNC Viewer を起動する
PS C:\> & "C:\Program Files\TightVNC\tvnviewer.exe" 192.168.11.20:1159 

PS C:\> exit 

 ⇓