web-dev-qa-db-ja.com

systemdのランレベルを変更するにはどうすればよいですか?

非常に簡単です。ランレベルを変更しようとしています。オンラインで見つけたものはすべて、次の場所にあるファイルを指し示します。

/etc/init/rc-sysinit.conf

ここでは、「DEFAULT_RUNLEVEL」を3またはその他に変更しようとしましたが、違いはありません(元の値は2で、あまり意味がありませんでした)。何があっても、マシンは完全に起動し、ランレベルコマンドをチェックすると、毎回結果として「N 5」が表示されます。

ランレベルを変更するにはどうすればよいですか?私はむしろ、grubまたは他の回避策のメカニズムを介してオーバーライドしません。そして、私は特にXを無効にする方法を探していません。

オンラインで見つけたすべての指示は少し古いものでしたが、16.04で何か変更がありましたか?

26
gnomed

Ubuntu 16.04はinitではなくsystemdを使用するため、runlevelsの概念はtargetsという用語に置き換えられます。したがって、実際にはinitベースのランレベルとsystemdベースのターゲットの間にマッピングがあります。

   Mapping between runlevels and systemd targets
   ┌─────────┬───────────────────┐
   │Runlevel │ Target            │
   ├─────────┼───────────────────┤
   │0        │ poweroff.target   │
   ├─────────┼───────────────────┤
   │1        │ rescue.target     │
   ├─────────┼───────────────────┤
   │2, 3, 4  │ multi-user.target │
   ├─────────┼───────────────────┤
   │5        │ graphical.target  │
   ├─────────┼───────────────────┤
   │6        │ reboot.target     │
   └─────────┴───────────────────┘

ここで、16.04で「ランレベル」を変更するだけで、たとえば次のように使用できます。

Sudo systemctl isolate multi-user.target

これをデフォルトの「ランレベル」にするには、次を使用できます。

Sudo systemctl enable multi-user.target
Sudo systemctl set-default multi-user.target

man systemctlから

   isolate NAME
       Start the unit specified on the command line and its dependencies and stop all others. If
       a unit name with no extension is given, an extension of ".target" will be assumed.

       This is similar to changing the runlevel in a traditional init system. The isolate command
       will immediately stop processes that are not enabled in the new unit, possibly including
       the graphical environment or terminal you are currently using

また、man systemd.specialを見て、systemdのターゲットについて詳しく知ってください。

48
Ron