Debian 9 (stretch) で適当 gdm などを入れると,gdm の systemd unit ファイルは,状態が static になる.gdm を無効にしたくて systemctl disable gdm しても gdm が起動する.

この原因は,systemd が default.target を見て起動シーケンスを決めているから.つまり, default.target は systemd unit の中で最も依存関係的に根に近い unit のひとつ.

Debian 9 で適当に gdm などを入れると,(おそらくパッケージマネージャの postinst などによって) default.targetgraphical.target に依存するように更新される.graphical.target はその名の通りコンピュータをグラフィカルに使うための unit を立ち上げるためのターゲットで,gdm もこれに依存されている.つまり,graphical.target ではない,gdm を起動しない,なおかつコンピュータを使う上で必要な unit は起動するような target を default.target にすればよい.

これに必要なターゲットは multi-user.target で,設定するコマンドは systemctl set-default multi-user.target.あるいは, multi-user.target を直接編集してもいいかもしれない.

実際, graphical.targetmulti-user.target + display-manager.service らしい 1

この解決に役に立ったこと

systemctl list-dependencies ${UNIT}.service --all --reverse

list-dependencies はそのままだと依存されている unit を表示するが, --reverse をつけることで指定した unit が依存している unit を探すことができる2

背景

qtile を使うためにDMが起動するWMを選択したかったが,gdm が読む xsession のようなファイルを編集する必要がある.しかし,それが面倒くさかったため,~/.xinitrcstartx で起動することにしたかったが,なかなか gdm を無効にできず苦労した.

graphical.target をやめると,pulseaudio とかが起動しなくなるかもと思ったが,これは display-manager.service 以下の管轄ではないらしく,とりあえず音は出た.

References