Wie ändere ich den Runlevel auf systemd?

27

Ganz einfach, ich versuche den Runlevel zu ändern. Alles, was ich online finde, verweist mich auf die Datei in:

/etc/init/rc-sysinit.conf

Hier habe ich versucht, "DEFAULT_RUNLEVEL" in 3 oder etwas anderes zu ändern, und es macht keinen Unterschied (der ursprüngliche Wert war 2, was auch nicht viel Sinn machte). Egal was passiert, meine Maschine bootet vollständig und wenn ich den Runlevel-Befehl überprüfe, sehe ich jedes Mal "N 5" als Ergebnis.

Wie ändere ich den Runlevel? Ich würde es lieber nicht durch Grub oder einen anderen Workaround-Mechanismus überschreiben. Und ich bin nicht auf der Suche, wie man X speziell deaktiviert.

Alle Anweisungen, die ich online gefunden habe, waren ein bisschen alt. Hat sich etwas an 16.04 geändert?

Gnomed
quelle
Möchten Sie es also manuell nach dem Booten ändern oder automatisch jedes Mal auf einen anderen Runlevel booten?
Byte Commander
jedes Mal automatisch. Es wurde mit Ubuntu Desktop eingerichtet, aber jetzt möchte ich den Runlevel senken und ihn irgendwo in eine Ecke stellen.
Gnomed
Warum willst du eigentlich den Runlevel ändern? Möchten Sie nur über eine Terminalschnittstelle booten, anstatt den Desktop zu laden? In diesem Fall sollten Sie stattdessen die Standardauslastung des Zielsystems beim Booten ändern und die Kerneloption "text" hinzufügen.
Byte Commander
4
Wahrscheinlich, weil Ubuntu seit 15.10 systemdanstelle von verwendet upstartund diese Datei, von der Sie sprechen, für ist upstart. Wenn Sie noch ältere Artikel lesen, werden Sie auch Wege für die Alten finden init. Aber mit systemd, können Sie einfach wechseln zwischen der GUI und Text - Modus sudo systemctl start graphical.targetund sudo systemctl start multi-user.target.
Byte Commander
5
An alle Rezensenten Dies ist eine gültige Frage! Es IST eine Möglichkeit , die Runlevel zu ändern (ob es „Runlevels“ genannt wird , oder „Ziele“) mitsystemctl isolate
Ron

Antworten:

50

Ubuntu 16.04 verwendet systemd anstelle von init und daher wird das Konzept von runlevelsdurch den Begriff ersetzt targets. Es gibt also tatsächlich eine Zuordnung zwischen init-basierten Runlevels und systemd-basierten Zielen:

   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     │
   └─────────┴───────────────────┘

Um nun nur die "Runlevel" in 16.04 zu ändern, können Sie zB verwenden:

sudo systemctl isolate multi-user.target

Um dies zum Standard-Runlevel zu machen, können Sie Folgendes verwenden:

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

Von 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

Schauen Sie sich auch an man systemd.special, um mehr über die Ziele in systemd zu erfahren.

Ron
quelle
HI @ Ron, Ihre Antwort ist großartig. Ich habe es getan, um den offiziellen Nvidia-Treiber zu installieren, aber jetzt zeigt mein Bildschirm nur noch einen blauen Bildschirm. Wie kann ich das beheben? Vielen Dank im Voraus für Ihre Hilfe.
Raphael Teubner
Gehen Sie von Grub in den Wiederherstellungsmodus und kehren Sie als Root zum vorherigen Runlevel zurück.
LottaLava
Ja. Ich wollte nur kommentieren, wie es den Jungs, die diese extrem netten Befehle für den Wechsel vom GUI-Boot in den Text-Modus geben, egal ist, wie wir vom Text-Boot in den GUI-Boot zurückkehren sollen.
Nyxee
Um nur zu erwähnen, dass ich sudo systemctl set-default multi-user.targetmich im GUI-Modus befinde, wurde beim Neustart ein leerer Bildschirm angezeigt. Ctrl-Alt-F3Dies war ein gutes Zeichen dafür, dass die GUI nicht gestartet werden konnte. Daher drückte ich , um Runlevel 3 aufzurufen, und tat, was ich brauchte (installierte NVIDIA- CUDA) ausführen sudo systemctl set-default graphical.targetund zum GUI-Anmeldebildschirm zurückkehren. Aber ich konnte mich jetzt nicht anmelden. Ist dies der richtige Weg, um zum vorherigen Runlevel zurückzukehren ?
Nyxee
2
@nyxee - Ja, dies sudo systemctl set-default graphical.targetist der richtige Weg, um zur GUI-Desktop-Umgebung zurückzukehren. Ihr Anmeldefehler hat nichts mit dem Wechseln zwischen Runlevels zu tun - er ähnelt eher dem Problem mit der nVidia- Bootschleife . Um sicher herauszufinden, fallen wieder nach unten 3 in Runlevel, entfernen Sie die nVidia und Cuda - Treiber, installieren Sie eine nVidia - Treiber aus dem Repo, Set standardmäßig auf Runlevel 5 (graphical.target), dann Neustart und sehen , ob Sie sich anmelden können.
Andy Turfer