kWatanabe 記事一覧へ

kWatanabe の 技術帖

某企業でOSや仮想化の研究をやっているインフラ系エンジニア。オンプレとクラウドのコラボレーションなど、興味ある技術を綴る。

画面のないLXCコンテナでGUI環境を構築する

  • 画面のない LXC コンテナで xfce4 のデスクトップ環境を構築する
  • WSL2 や Docker コンテナでも同じ要領でできるはず

LXCコンテナでGUIが使いたい

我が家の自宅サーバは LXC コンテナで運用している。ホスト計算機はヘッドレスなので、GUI環境はインストールしていない。基本的には SSH で十分だし、そもそもヘッドレスということは作業マシンが別にあるわけで、コンテナに GUI 環境は必要ない。

ただ、出先から自宅にリモートログインした場合に、ちょっとした GUI アプリを使いたい場合など、まれにコンテナに GUI があったらな、と思うこともある。

そこで、必要なときにだけ起動する GUI を含んだ LXCコンテナを作ることにした。

検証環境

手順

デスクトップ環境の導入

好みのデスクトップ環境を選ぶ。個人的には、サーバは非力というわけでもない*1し、それなりに使いやすいものがいいので、xfce4 を選ぶ。

$ sudo apt install xfce4 xfce4-goodies
$ echo "xfce4-session" > ~/.xsession

日本語入力環境も整えるが、普段使いするわけでもない、リモートから必要なときにだけ使うものなので、チューニングに時間はかけずにサクッと導入できるものを選ぶ。

$ sudo apt install task-japanese task-japanese-desktop ibus-kkc locales-all
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"

これはおまけ。ファイラーから、ファイルサーバの samba につなげるようにしたいので、GVFS も入れておく。

$ sudo apt install gvfs-backends

xrdp の導入

LXC コンテナは画面を持たないので、もちろんフレームバッファもない。そのため、リモートフレームバッファを作る。自分は外出時には GPD Pocket 2 を使うので、VNC より Windows リモートデスクトップ で繋ぎたい。そのため、xrdp を導入し、xvnc セッションに RDP 接続できるようにする。

xvnc 含めて、必要なパッケージは依存関係で入るので、導入はシンプル。

$ sudo apt install xrdp

コンテナを再起動。

$ sudo reboot

リモートデスクトップ接続

適当な Windows マシンから RDP 接続する。後は言語切り替え*2や、キーボード配列*3などを好みの通り修正すれば完了。

LXCコンテナ内でのxfce4環境

まとめ

  • ホストもゲストも画面を持たない、LXCコンテナに xfce4 の GUI 環境を構築した
  • LXC コンテナ特有の操作はないため、WSL2 や Docker、systemd-nspawn など、他のヘッドレス環境でも同じ手順で構築できる・・・かもしれない。

*1:最近、Intel Xeon E-2378 と 128GB ECC メモリ を積んだマシンにリプレイスした。

*2:デフォルトは Win + Space

*3:デフォルトは日本語配列