Ubuntu 20.04 の標準のディスプレイマネージャーは gdm3 です。これを lightdm に変えたインストールイメージの作り方を解説します。 前回の、 Ubuntu 20.04 をオフラインでセットアップできるイメージからの続きです。
通常 lightdm をインストールすると、ユーザ向けのダイアログが開いてディスプレイマネージャを選択することになります。ユーザの操作なしに lightdm を選択するには少し工夫が必要でした。
Twitterスレ の清書になります。
Ubuntu 初期設定スクリプト(autoinstall)で gdm3 から lightdm に切り替えようとしている。https://t.co/jX72M8CzWw dpkg-reconfigure で変わるのを確認したので、これを非対話的にやりたい。https://t.co/rI4kugy1Y6 を見つけたがどの方法もうまくいかなかった。
— Yu SUGAWARA (@gusmachine) April 10, 2022
背景
ICPC アジア予選横浜大会で選手が使うコンピュータには Ubuntu がインストールされていて、ディスプレイマネージャは lightdm を使っています。 これには理由があり、今のところ gdm3 に移行できません。
一番良さそうな解法
これが最も簡単でした。
- gdm3 をアンインストール, lightdm をインストールし、必要に応じて dpkg-reconfigure lightdm を実行する。
Step1. gdm3 をアンインストールする。 ubuntu-desktop は消しても良い
ubuntu-desktop や ubuntu-desktop-minimal をインストールすると gdm3 がインストールされるため、大体の環境で gdm3 がインストールされていると思います。
ここから gdm3 を % apt-get uninstall
すると、ubuntu-desktop も道連れでアンインストールされます。実態のないメタパッケージなので、消しても問題はありません。
Step2: lightdm を正しく設定する
gdm3 をアンインストールしたのち lightdm をインストールすれば、起動時に lightdm が動くよう設定されます。
あるいは lightdm をインストールしたのち gdm3 をアンインストールした場合、その後に % dpkg-reconfigure lightdm
で lightdm を設定し直せば大丈夫です。
ハズレ解法
以下、罠にかかった順番に解説します
ハズレ1 lightdm をそのままインストールする。
単純に lightdm をインストールした場合、上に書いた通りユーザ向けの設定ダイアログが開いてディスプレイマネージャを選択することになります。 ユーザの操作ができない autoinstall の最中、gdm3 がインストールされた環境上に lightdm インストールした場合、そのまま gdm3 が選ばれることになります。
ハズレ2 lightdm をインストールしたのち、 gdm3 をアンインストールする
% apt-get install lightdm
したのち % apt-get remove gdm3
すると、ディスプレイマネージャが選択されていない状態になり、テキストログイン環境になります。
うえの正解の通り % dpkg-reconfigure lightdm
を叩けば大丈夫です。
この作業をしていたときはそれに気づかず、テキストログイン環境になったのは ubuntu-desktop が削除されたためではないかと考えたため、正解にすぐたどり着けませんでした。
ハズレ3 lightdm をインストールしたのち、 dpkg-reconfigure lightdm を行う
ちょっと調べたところ、Lubuntu 20.10 の安定のため「lightdm」と「xfce4-screensaver」に入替え〈H105〉 - Linux あれこれ に、 dpkg-reconfigure の話が載っていました。実際、% dpkg-reconfigure lightdm
を叩くと設定ダイアログが開き、ディスプレイマネージャが選択できます。
しかしユーザ操作ができない環境中では gdm3 がそのまま選ばれます。
「dpkg-reconfigure auto answer」 とかで頑張って検索して Feeding input values to dpkg-reconfigure in a non-interactive way が出てきたものの、以下の方法ではうまくいきませんでした。
DEBCONF_DB_OVERRIDE を利用した方法
$ cat /path/to/config.dat
Name: shared/default-x-display-manager
Template: shared/default-x-display-manager
Value: lightdm
Owners: gdm3, lightdm
Flags: seen
Variables:
choices = gdm3, lightdm
% DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive lightdm
debconf-set-selections を利用した方法もだめでした。
% echo 'lightdm shared/default-x-display-manager select lightdm' | debconf-set-selections -v
後から考えると、これは例の firebird ではうまくいくかもしれないですが lightdm ではうまく行かなそうです。
あたり1 lightdm をインストールしたのち、/etc/X11/default-display-manager を書き換えてから dpkg-reconfigure lightdm をする
Reconfigure the display-manager non-interactively にあることをやったら通りました。
関連コードはここのようです。 https://github.com/canonical/lightdm/blob/170df31f7d9c00b049bdd158682472df915adeae/debian/lightdm.postinst#L15
しばらくこの方法を採用していたのですが、後に gdm3 を消して良いことがわかったので、正解の方法に変えました。
次回予告
lightdm を設定すると、ユーザの初回ログイン時に警告が出てきます。
今度は "Screen Lock disabled" "Screen Locking requires the GNOME display manager." が出てきたぞ。 screen lock ができないことよりこの alert が出てくる方が困るな。
— Yu SUGAWARA (@gusmachine) April 10, 2022