Debian 8 JessieをCUIで起動する方法
2015-07-08
2015-07-15
こんにちは。今回のテーマは『Debian 8 JessieをCUIで起動する方法』です。システムを起動する度にディスプレイマネージャーが起動するのは最近のシステムでは当然のようになりましたが、CUIモードで起動したい方も結構多いのではないでしょうか?今回はSystemdを導入したことで話題となったDebian 8 Jessieを取り上げます。 【関連記事】 Fedora 21をCUIで起動する方法 [adsense02] 【目次】 DebianのSystemdは他のシステムとちょっとちがう DebianをCUI起動する方法 補足説明
DebianのSystemdは他のシステムとちょっとちがう
Systemctlではサービスを無効化できないものもある
これまでSystemdの導入されているシステムをCUI起動する方法としてはsystemctlでディスプレイマネージャーをdsiableすれば良いとしてきました。しかし、Debian Jessieではそう簡単にはいかないのです。結論から言えばsystemctlではディスプレイマネージャー出来ませんでした。
Systemctlはupdate-rc.dを起動するトリガー
後半で少々詳しく扱いますが、ディスプレイマネージャーに関してはSystemctlはSysVinitのスクリプトであるupdate-rc.dを起動するトリガーとして機能しています。よってSystemdでdisableしてもgdm3.serviceは無効化されません。
DebianをCUI起動する方法
さて、またしても前置きが長くなりましたが、ここからが本題です。Systemd-sysvの導入によってinittabファイルでrunlevelが設定できなくなったわけなので、起動時のディスプレイマネージャーの起動を止めることでCUI起動に切り替えます。以下の方法1もしくは方法2のどちらかを行えば良いと思います。個人的には方法1がオススメです。
方法1:default-display-managerを編集する(推奨)
vimやnano等のエディタで/etc/X11/default-display-managerを開きます。sudoコマンドについてはDebianやFedoraでsudoコマンドを使う
$ sudo vim /etc/X11/default-display-manager
お使いのディスプレイマネージャー(gdm3,kdm,lightdm等)が記載されていると思いますので、以下のようにコメントアウトします。 編集例
# /usr/sbin/gdm3
方法2:gdm.serviceを無効化する
※方法1を行っていれば以下の操作は不要です。 前述の通りsystemctlからはgdm3のサービスは変更できません。よって、systemdが呼び出しているgdm.serviceを直接無効化します。誤って削除しないようにご注意下さい。元に戻したい場合はファイル名を戻せばOKです。
$ cd /lib/systemd/system/ $ sudo mv gdm.service gdm.service.back
補足説明
本題と外れるので興味ある方のみどうぞ 通常のSystemdがinitシステムの場合systemctlでenableすると/usr/lib/systemd/以下の.serviceファイルを/etc/systemd/以下の各ディレクトリにリンクを貼ることで有効にします。もちろん、Debian 8でもこのように管理されているサービスもあります。しかしディスプレイマネージャー等多くのサービスについてはSytemctlはかつてのSysVinit方式でupdate-rc.dのトリガーとして機能しています。
Systemctlは何をしているのか?
試しにsytemctlを使ってgdm3をenableにしてみます。
$ sudo systemctl enable gdm3
そして以下のコマンドで/etc/rc2.dのgdm3のリンクを見てみます。
$ ls -l /etc/rc2.d/ | grep gdm3
今度は反対にsystemctlでdisableして同様にリンクを見てみます。
$ sudo systemctl disable gdm3 $ ls -l /etc/rc2.d/ | grep gdm3
頭文字がSからKに変わりました。ご存知の方も多いとは思いますが先頭が”S”で始まる物が起動(Start)、“K”で始まる物が停止(Kill)となります。結局のところSystemctlは/usr/sbin/update-rc.dというPerlで書かれたスクリプトを実行していたのです。 このupdate-rc.dは/etc/init.d/以下のスクリプトを/etc/rc[0-6].d/以下にリンクを生成したり削除する役割をします。まさにSysVinitですね。Debian 8で導入されたSystemdはSysVinitを包括する形でSystemdのように使えるinitシステムと捉えた方が良いかも知れません。(間違ってたらごめんなさい。) さて、Systemctlがupdate-rc.dを操作することはわかったのですが、このSysVinit方式の管理はディスプレイマネージャーの起動・停止には有効なのでしょうか?試しに以下コマンドを実行して/etc/rc[0-6].d/からgdm3のリンクを削除してみましたが、やはりGDMは起動しました。
$ sudo update-rc.d gdm3 remove
なぜGDMは起動するのか?
なぜ、/etc/rc[0-6].dからリンクを削除してもgdmは起動したのでしょうか?実はgdm3およびgdmのサービスは/lib/systemd/systemに存在し、そこから呼び出されています。このサービスはsystemctlでは操作されないようです。
最後に
CUI起動に切り替えようと思った時にはSystemctlで簡単に設定出来ると思っていたのですが、意外に手こずってしまいました。DebianはSysVinitを包括する形でSystemdへ移行したのだなあと開発陣の苦労を垣間見た気がしました。 [adsense]