Debian 8 JessieをCUIで起動する方法

こんにちは。今回のテーマは『Debian 8 JessieをCUIで起動する方法』です。システムを起動する度にディスプレイマネージャーが起動するのは最近のシステムでは当然のようになりましたが、CUIモードで起動したい方も結構多いのではないでしょうか?今回はSystemdを導入したことで話題となったDebian 8 Jessieを取り上げます。
【関連記事】
Fedora 21をCUIで起動する方法


【目次】
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

再起動するとCUI起動に変わっているはずです。
01

補足説明

本題と外れるので興味ある方のみどうぞ
通常の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

04

今度は反対にsystemctlでdisableして同様にリンクを見てみます。

$ sudo systemctl disable gdm3
$ ls -l /etc/rc2.d/ | grep gdm3

03

頭文字が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へ移行したのだなあと開発陣の苦労を垣間見た気がしました。

Sponsored Link


4件のコメント

  • Debian 9 stretch を使用しています.

    今までは,“方法1”でCUI起動を実現していましたが,OS起動中に,
    ディスプレイマネージャーの起動に失敗した旨のメッセージが
    表示される事が少々気になっていました.

    そこで,“方法2”を試してみたところ,
    “失敗”のメッセージは表示されなくなりました.

    なので,個人的には“方法2”が好みです.(^_^)

    • 江口さん

      コメントありがとうございます。
      Debian 9についてはサーバーとして利用してGUIをインストールしていなかったため
      検証できていませんでした。

      Debian 9についても検証し、記事を書ければと考えております。

  • 方法1を試したところOS起動画面から動かなくなってしまいました。どうしたらいいでしょうか?
    使っているにはDebian9です。

    • 藤江さん

      コメントありがとうございます。Debian 9に関してはまだ検証出来ていないのですが、Debian9では起動時にディスプレイマネージャ起動失敗の警告が出るという情報は他の方からも寄せられています。今回はそれが原因で起動に失敗している可能性があります。

      対策としては/etc/X11/default-display-managerの変更(コメントアウト)を元に戻すことですが、

      > OS起動画面から動かなくなってしまいました。

      とは完全にOSが起動しない状態でしょうか?何か警告メッセージなどでていますでしょうか?例えばCtrl+Alt+F2で画面が切り替わる等の動作は可能でしょうか?もしコマンドを受け付けることができれば、そのままファイルのコメントアウトを直して下さい。

      もし完全にOSが起動しないのであれば、UbuntuやArchのLiveDVD等、外部ストレージから起動するOSでアクセスして、現状のシステムの/etc/X11/default-display-managerを書き換える作業になると思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です