Bagaimana cara mengubah runlevel pada systemd?

27

Cukup sederhana, saya mencoba mengubah runlevel. Semua yang saya temukan online menunjukkan saya ke file yang terletak di:

/etc/init/rc-sysinit.conf

Di sini saya telah mencoba mengubah "DEFAULT_RUNLEVEL" menjadi 3 atau apa pun dan tidak ada bedanya (nilai aslinya adalah 2 yang juga tidak masuk akal). Tidak peduli apa pun, mesin saya melakukan booting penuh dan ketika saya memeriksa perintah runlevel, saya melihat "N 5" sebagai hasilnya setiap saat.

Bagaimana cara mengubah runlevel? Saya lebih suka tidak menimpanya melalui grub atau mekanisme penyelesaian masalah lainnya. Dan saya tidak mencari cara menonaktifkan X secara khusus.

Semua instruksi yang saya temukan online agak lama, apakah ada perubahan dengan 16,04?

gnomed
sumber
Jadi, apakah Anda ingin mengubahnya secara manual setelah boot atau secara otomatis boot ke runlevel yang berbeda setiap kali?
Byte Commander
otomatis setiap saat. Itu diatur dengan desktop ubuntu, tapi sekarang saya ingin menurunkan runlevel dan meletakkannya di suatu tempat.
Direkam
Sebenarnya, mengapa Anda ingin mengubah runlevel? Apakah Anda hanya ingin boot ke antarmuka terminal alih-alih memuat desktop? Dalam hal ini Anda harus memodifikasi beban sistem target standar saat boot dan menambahkan opsi kernel "teks".
Byte Commander
4
Mungkin karena sejak 15.10, Ubuntu menggunakan systemdbukan upstartdan file yang Anda bicarakan adalah untuk upstart. Jika Anda membaca artikel yang lebih tua, Anda juga akan menemukan cara untuk yang lama init. Tetapi dengan systemd, Anda cukup beralih antara GUI dan mode teks menggunakan sudo systemctl start graphical.targetdan sudo systemctl start multi-user.target.
Byte Commander
5
Untuk semua pengulas Ini adalah pertanyaan yang valid! Ada IS cara untuk mengubah runlevel (apakah atau tidak itu disebut "runlevel" atau "target") menggunakansystemctl isolate
Ron

Jawaban:

50

Ubuntu 16.04 menggunakan systemd bukan init dan karenanya konsep runlevelsdiganti dengan istilah targets. Jadi memang ada pemetaan antara runlevel berbasis init dan target berbasis 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     │
   └─────────┴───────────────────┘

Sekarang, untuk hanya mengubah "runlevel" di 16,04, Anda dapat menggunakan misalnya:

sudo systemctl isolate multi-user.target

Untuk menjadikan ini "runlevel" default, Anda dapat menggunakan:

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

Dari 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

Lihat juga man systemd.specialuntuk mengetahui lebih banyak tentang target dalam systemd.

Ron
sumber
HI @ Tolong respons Anda luar biasa. Saya melakukannya untuk menginstal driver resmi Nvidia, tetapi sekarang layar saya tidak menunjukkan apa pun kecuali layar biru. Bagaimana saya bisa memperbaikinya? Terima kasih sebelumnya atas bantuan Anda.
Raphael Teubner
Masuk ke mode pemulihan dari Grub, lalu sebagai root kembali ke runlevel sebelumnya.
LottaLava
ya. Saya hanya akan berkomentar tentang bagaimana orang-orang memberikan perintah yang sangat bagus ini dari gui boot ke mode teks tidak peduli sama sekali tentang memberi tahu kami tentang cara kembali dari text-boot ke gui boot.
nyxee
Jadi, hanya untuk dicatat, saya menjalankan sudo systemctl set-default multi-user.targetdalam mode GUI, pada reboot, saya mendapat layar kosong, yang merupakan pertanda baik bahwa GUI gagal untuk boot, jadi saya menekan Ctrl-Alt-F3untuk masuk ke Runlevel 3, melakukan apa yang saya butuhkan (menginstal NVIDIA- CUDA), jalankan sudo systemctl set-default graphical.targetdan kembali ke layar login GUI. Tapi, sekarang saya gagal login. Apakah itu cara yang benar untuk kembali ke runlevel sebelumnya ?
nyxee
2
@nyxee - Ya, sudo systemctl set-default graphical.targetadalah cara yang benar untuk kembali ke lingkungan desktop GUI. Gagal masuk Anda kedengarannya tidak terkait dengan peralihan di antara runlevel - sepertinya masalah loop boot nVidia . Untuk mengetahuinya, drop kembali ke runlevel 3, hapus driver nVidia dan Cuda, instal driver nVidia dari repo, atur default ke runlevel 5 (graphical.target), lalu reboot dan lihat apakah Anda dapat login.
Andy Turfer