Tag Archives: systemd

Shutdown/restart & mounting drives without display manager

Quite a long time ago I became unable to shutdown or restart my system from the Xfce logout dialog. I also couldn’t mount USB flash drives. Recently I tackled this issue which seems to be related to systemd + PolicyKit + Consolekit and found a solution. As written there I have created two files:

/etc/polkit-1/localauthority/50-local.d/consolekit.pkla:

[restart]
Identity=unix-user:<username>
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes

[stop]
Identity=unix-user:<username>
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes

/etc/polkit-1/localauthority/50-local.d/udisks.pkla:

[udisks]
Identity=unix-user:<username>
Action=org.freedesktop.udisks.*
ResultAny=yes

This finally gave me back full control over my system even though I didn’t bother digging deeper into the involved concepts.

After a recent update I once again lost these capabilities again though and had to give it another spin. Once again I found a solution and adapted my snippet for automatically launching the X server:

# Autostart X if not running
if [[ -z "$DISPLAY" ]] && [[ $(tty) = /dev/tty1 ]]; then
  startx -- vt1
fi

Getty hangs after upgrade to systemd 215

After an upgrade to systemd 215 I was not able to boot anymore and got messages like these for all of my virtual terminals:

[ TIME ] Timed out waiting for device dev-tty1.device.
[DEPEND] Dependency failed for Getty on tty1.

Turned out that I had an old copy of /etc/systemd/system/getty@.service, booting into recovery mode and replacing it with a symlink to /lib/systemd/system/getty@.service solved the issue.

Herunterfahren/Neustarten & Laufwerke einhängen ohne Display Manager

Notice: this entry is also available in English.

Vor längerer Zeit verlor ich die Möglichkeit, als regulärer Nutzer über den Xfce-Abmeldedialog mein System herunterzufahren oder neuzustarten. Auch USB-Sticks konnte ich nicht mehr einhängen. Kürzlich befasste ich mich endlich ein wenig mit diesem Problem, was offenbar mit systemd + PolicyKit + ConsoleKit zusammenhängt und stieß auf eine Lösung. Wie dort beschrieben habe ich zwei neue Dateien angelegt:

/etc/polkit-1/localauthority/50-local.d/consolekit.pkla:

[restart]
Identity=unix-user:<username>
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes

[stop]
Identity=unix-user:<username>
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes

/etc/polkit-1/localauthority/50-local.d/udisks.pkla:

[udisks]
Identity=unix-user:<username>
Action=org.freedesktop.udisks.*
ResultAny=yes

Damit konnte ich nun endlich wieder mein System ganz normal benutzen, auch wenn ich weder Zeit noch Lust hatte, mich eingehender mit dem zugrundeliegenden System zu befassen.

Bei einem kürzlichen Update verlor ich aber wiederum diese Fähigkeiten und musste mich erneut auf die Suche begeben. Glücklicherweise wurde ich wieder fündig und passte meinen Codeschnipsel für den automatischen Start des X-Servers an:

# Autostart X if not running
if [[ -z "$DISPLAY" ]] && [[ $(tty) = /dev/tty1 ]]; then
  startx -- vt1
fi

Mal sehen, wie lange diese Konstellation nun funktionstüchtig bleibt.

Mingetty und systemd

Das von systemd standardmäßig für das Öffnen virtueller Terminals genutzte agetty verfügt verglichen mit mingetty nur über einen sehr beschränkten Funktionsumfang. So ist gerade die Option --autologin von mingetty interessant, wenn man beim Start des Systems automatisch einen Nutzer ohne manuelle Eingaben anmelden möchte. Unter SysVinit ist hierfür folgender Eintrag in der /etc/inittab erforderlich:

1:2345:respawn:/sbin/mingetty --autologin USER tty1

Die Konfiguration unter systemd gestaltet sich dagegen komplett anders, ermöglicht aber eine nicht minder flexible Anpassung:

  1. Einen Symlink mit Verweis auf /lib/systemd/system/getty@.service in /etc/systemd/system anlegen
  2. Eine Datei /etc/systemd/system/getty@tty1.service.d/autologin.conf wie folgt anlegen:
    [Service]
    ExecStart=
    ExecStart=-/sbin/mingetty --autologin USER %I

Hiernach kann der Dienst neu gestartet werden. Eine laufende X-Sitzung wird damit allerings auch beendet:

systemctl restart getty@tty1.service

Ab diesem Zeitpunkt wird bei jedem Systemstart der per USER spezifierte Nutzer automatisch angemeldet. Als kleiner Bonus noch eine mögliche Vorgehensweise, um dabei auch automatisch den X-Server zu starten:

if [ -z "$DISPLAY" -a $(tty) = /dev/tty1 ]; then
  startx
fi

Hier wird geprüft, ob noch kein X-Server gestartet wurde (die Umgebungsvariable $DISPLAY ist andernfalls gesetzt) und ob wir uns gerade auf tty1 befinden, von wo aus üblicherweise der erste X-Server gestartet wird. Einzutragen ist das ganze in die ~/.bash_profile, nicht in die ~/.bashrc.

Update: Die nötigen Schritte haben sich deutlich vereinfacht.