Wie kann ich mich mit systemd automatisch beim Desktop anmelden?

20

Wie kann ich systemd so konfigurieren, dass ich mich automatisch bei meiner Desktop-Umgebung anmelde, vorzugsweise ohne den Anmeldemanager? Ich benutze Arch.

fhucho
quelle
Welchen Login-Manager verwenden Sie? Einige (GDM, KDM, iirc usw.) unterstützen bereits die automatische Anmeldung, sodass Sie den Dienst nur für sie aktivieren müssen.
Wieland,
Ich verwende derzeit SLiM und es kann so konfiguriert werden, dass es sich
automatisch anmeldet
Oh, ich habe deine Frage falsch verstanden.
Wieland

Antworten:

22

Dies ist im Arch Wiki beschrieben :

Erstellen Sie eine neue Servicedatei, wie Sie sie [email protected]kopieren/etc/systemd/system/

cp /usr/lib/systemd/system/[email protected] /etc/systemd/system/[email protected]

Dies kopiert im Wesentlichen die bereits vorhandene [email protected]Datei in eine neue Datei, [email protected]die frei geändert werden kann. Es wird nach kopiert, /etc/systemd/systemda dort standortspezifische Gerätedateien gespeichert werden. /usr/lib/systemd/systemEnthält Unit-Dateien, die von Paketen bereitgestellt werden, sodass Sie dort nichts ändern sollten.

Sie müssen das dann [email protected]mit dem getty-Dienst für das tty verknüpfen, auf dem Sie sich automatisch anmelden möchten, zum Beispiel für tty1:

ln -s /etc/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

Bis jetzt ist dies immer noch die gleiche wie die übliche [email protected]Datei, aber das Wichtigste ist, die zu ändern [email protected], um Sie tatsächlich automatisch anzumelden. Dazu müssen Sie nur die ExecStartzu lesende Zeile ändern

ExecStart=-/sbin/agetty -a USERNAME %I 38400

Der Unterschied zwischen der ExecStartZeile in [email protected]und [email protected]ist nur der, -a USERNAMEder agetty anweist, den Benutzer mit dem Benutzernamen USERNAME automatisch anzumelden.

Jetzt müssen Sie nur noch systemd anweisen, die Daemon-Dateien neu zu laden und den Dienst zu starten:

systemctl daemon-reload
systemctl start [email protected]

(Ich bin nicht sicher, ob der Dienst ordnungsgemäß gestartet wird, wenn Sie bereits bei tty1 angemeldet sind. Der sicherste Weg ist wahrscheinlich, einfach einen Neustart durchzuführen, anstatt den Dienst zu starten.)

Wenn Sie X dann automatisch starten möchten, fügen Sie das folgende Snippet in Ihr ~/.bash_profile(wieder aus dem Wiki entnommen ) ein:

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

Sie müssen Ihre ändern ~/.xinitrc, um Ihre Desktop-Umgebung zu starten. Wie dies zu tun ist, hängt von der DE ab und wird wahrscheinlich auch im Arch-Wiki beschrieben.

Wieland
quelle
Was ist das Agetty Arg% I?
Edward Anderson
Was ist mit dem "charachter" am Ende? Wird das gebraucht? Was heißt das?
Rien333
@ rien333 Es ist unnötig, ich habe es aus der Antwort entfernt.
Wieland
2
Ich erhalte die Fehlermeldung, File existswenn ich den Symlink
Post Self
Verwenden Sie ln -sf /etc/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected], um es zu überschreiben.
Manuel Schmitzberger
5

Ändern Sie direkt die Datei /etc/systemd/system/getty.target.wants/[email protected](die ein Symlink zu ist /lib/systemd/system/getty@service):

-a/--autologin USERNAMEAn die Zeile anhängen :

ExecStart=-/sbin/agetty --noclear %I $TERM

Daher:

ExecStart=-/sbin/agetty -a USERNAME %I $TERM

Sie können auch entfernen -o '-p -- \\u'(wie in der aktuellen Arch-Installation vorhanden), da hierdurch die Anmeldung für gestartet wird, Sie USERNAMEjedoch weiterhin nach dem Kennwort gefragt werden.

Nach dem Neustart werden Sie automatisch angemeldet.

Ps Ändern Sie den Dateinamen [email protected]in den Namen, bei dem ttySie sich anmelden möchten.

Zac
quelle
Hinweis zur Verdeutlichung: Wenn es sich um einen Symlink handelt, ersetzen Sie den Symlink durch eine neue Datei und bearbeiten Sie diese neue Datei.
Edward Anderson
1

IMO, das Arch Wiki empfiehlt derzeit eine viel einfachere Lösung:

Führen Sie entweder den Helfer ( systemctl edit getty@tty1) aus oder tun Sie, was ich manuell getan habe:

mkdir -p /etc/systemd/system/[email protected]/
touch /etc/systemd/system/[email protected]/override.conf

Der Text, den Sie (mit beiden Methoden) eingeben möchten, lautet ( achten Sie darauf, den Benutzernamen entsprechend zu ändern ):

[Service]
ExecStart=
ExecStart=-/usr/bin/agetty --autologin username --noclear %I $TERM

HINWEIS : Die Leerzeile ist wichtig! (Zugegeben, ich bin mir nicht sicher warum ...)

Jetzt starten Sie neu ( shutdown -r 0) und etwas in der Art ... login: username (automatic login)wird passieren, in der es zuvor das Warten auf die Eingabe von Benutzername / Passwort blockiert hat


Nach dem Neustart und der automatischen Anmeldung müssen Sie wahrscheinlich Folgendes ausführen, wenn Sie wie ich SSH in dieses System ausführen möchten:

systemctl enable sshd.service

Welches wird den Symlink erstellen (zB ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')

Jakebrinkmann
quelle
Die leere Zeile löscht zuerst den ExecStart-Eintrag, während die nächste Zeile einen neuen exec-Befehl einführt. Erwähnenswert ist auch, dass sich auf einigen Systemen (Ubuntu) die ausführbare Agetty-Datei befinden könnte. /sbin/agettyEs lohnt sich daher, zuerst die Originaldatei zu überprüfen /etc/systemd/system/getty.target.wants/[email protected].
Plattform