Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

MID (MaXX Interactive Desktop)を起動するまで - Distroboxを利用したUbuntuコンテナの応用


Linuxをデスクトップ環境として常用する場合、どうしても「コダワリ」、執着が災いして、茨の道を進もうとしてしまうことがある。端的には、マイナーなディストリビューションを選択することだ。
その選択が単なる見栄のようなものに起因するのであれば、それは各人の嗜好の問題だ。しかし、あえてマイナーなディストリビューションに注目する理由が存在することもある。
例えば、Clear Linuxの場合、次のような要素が挙げられる。これは他のディストリビューションでは得られない、Clear Linuxならではの恩恵だ。

  • Intel環境への最適化
  • 電源管理機能の有効性*1

一方、Clear Linuxはデスクトップ版のイメージを配布しているものの、デスクトップ領域には積極的に注力しておらず、その用途でのパッケージ配布も少ない。アプリケーションは基本的にFlatpakに依存している。つまり恩恵とのトレードオフ要因だ。

Clear Linux OS is not intended to be a general-purpose Linux distribution, suitable for novice end-users. While we ship common applications, our purpose isn’t to make an OS for routine desktop tasks and provide immunity from all security threats in all situations.

About — Documentation for Clear Linux* project

ならばいっそ、Clear Linuxはホストに専念させ、使いやすいディストリビューションでデスクトップ環境を構築し、コンテナとして運用するのはどうだろう。
例えば、UbuntuにMIDをインストールし、Clear Linuxのログイン画面でMIDを選択すれば、そのままコンテナのデスクトップが表示されるようなイメージだ。

Distroboxを使えば、それは可能だ。この投稿では、そのための手続きを紹介する。

前提

version
Clear Linux Desktop*2 36470
Distrobox*3 1.3.2
Ubuntu container*4 22.04
MID*5 2.1.1

DistroboxからUbuntuコンテナまでの導入手順、MIDのインストールは以下に紹介する投稿の該当箇所を参照してほしい。

Clear Linuxでの作業 - Docker、Distroboxのインストールと、Ubuntuコンテナの導入

impsbl.hatenablog.jp

  • 前提条件とリソース
  • ホスト側の準備
    • Clear Linuxのパッケージ更新
    • Dockerの導入、設定
  • Distrobox
    • インストール
    • Ubuntuコンテナの導入

Clear LinuxにDocker、Distroboxをインストールし、Ubuntuコンテナを実装するところまで対応する。Mozc関連の対応は不要だ。

「/etc/hosts」には、次の情報を記述しておくこと。

127.0.0.1 localhost
127.0.0.1 [Clear Linuxのホスト名]
127.0.0.1 [Ubuntuコンテナの名前].[Clear Linuxのホスト名]
Ubuntuコンテナでの作業

先の作業で、次のコマンドを実行するところまで完了した。ターミナルはUbuntuコンテナ内を示している。MIDのインストールは、この状態で作業を進める。

distrobox enter ubuntu

impsbl.hatenablog.jp

  • 必要なパッケージの導入
  • MIDのダウンロード、インストール

参照する投稿はWSL上での環境構築に関するもので、コンテナの初期状態が若干異なっている。そのため導入するパッケージにも若干の変更がある。またアジア圏のフォントのパッケージも追加する。
今回導入する必要があるパッケージを反映した「apt install」は次のようになる。念のため、パッケージ一覧も併記しておく。

sudo apt install -y cpp fhist fonts-noto fonts-dejavu fonts-noto-cjk fonts-noto-cjk-extra freeglut3 libgtk2.0-0 libjpeg62 libtinfo5 nload pavucontrol rcs x11-apps x11-utils x11-xserver-utils xfonts-100dpi xfonts-75dpi xz-utils


パッケージ一覧

  • cpp
  • fhist
  • fonts-noto
  • fonts-dejavu
  • fonts-noto-cjk
  • fonts-noto-cjk-extra
  • freeglut3
  • libgtk2.0-0
  • libjpeg62
  • libtinfo5
  • nload
  • pavucontrol
  • rcs
  • x11-apps
  • x11-utils
  • x11-xserver-utils
  • xfonts-100dpi
  • xfonts-75dpi
  • xz-utils

MIDのインストール完了まで対応したら、次のコマンドを実行し、ファイル”maxx.desktop”をホーム・フォルダへコピーしておく。

cp /opt/MaXX/share/xsessions/maxx.desktop ~/

Distroboxがホスト、コンテナ間(Clear LinuxUbuntuコンテナ)のホーム・フォルダを共通化してくれているため、ホーム・フォルダにファイルをコピーしておけば、どちら側からでも参照することができる。

ここまでがUbuntuコンテナでの作業だ。これ以降の作業は、Clear Linux側で行う。

Clear Linuxでの作業 - Clear Linuxログイン時のMID呼び出し

gdmはホストとなるClear Linux上で動作するのに対して、MIDはUbuntuコンテナ上で動作する。そのためGNOMEログイン画面でMIDを選択したとき、Clear LinuxUbuntuコンテナを稼働させ、その中のMIDを呼び出す必要がある。このための仕掛けを設定する。

まずホーム・フォルダへコピーした”maxx.desktop”の内容を確認する。

[Desktop Entry]
Encoding=UTF-8
Name=MaXX Interactive Desktop
Comment=The MaXX Interactive Desktop - Indigo Release
Exec=/opt/MaXX/etc/skel/Xsession.dt
Type=Application
[Window Manager]
SessionManaged=true

「Exec」で指定されている実行パスを、Ubuntuコンテナを稼働させ、MIDを起動させるスクリプトへ置換する。
まずスクリプトを作成する。次の処理をホーム・フォルダへ保存する。ファイル名は”startMID.sh”とし、実行権限を付与しておく。

xhost +SI:localuser:$USER
distrobox enter -T -n ubuntu -- bash -l -c '"/opt/MaXX/etc/skel/Xsession.dt"'

”msxx.desktop”のEXECは”startMID.sh”を呼び出す必要がある。”maxx.desktop”の「Exec」を次のように書き換える。

Exec=~/startMID.sh

次のコマンドを実行し、”maxx.desktop”を所定のフォルダへコピーする。

sudo cp ~/maxx.desktop /usr/share/xsession/

ここまでの作業が完了したら、Clear Linuxからログオフする。

Clear LinuxのログインからMIDの起動まで

Clear Linuxのログイン画面を確認すると、「MaXX Interactive Desktop」が追加されているのが分かる。

このオプションを選択してログインすると、Ubuntuコンテナ上のMIDが表示される。

ターミナルを起動すると、ホスト名がUbuntuコンテナを指しているのが分かる。つまりカレント・ユーザーはコンテナにログインしている。
さらにホーム・フォルダを表示してみる。先程Clear Linuxで作成した次のファイルが表示されているのが分かる。

  • maxx.desktop
  • startMID.sh

つまりDistroboxが機能しており、Clear LinuxUbuntuコンテナ間でホーム・フォルダが共通化しているのが分かる。