Jak mogę autologować na pulpicie za pomocą systemd?

20

Jak skonfigurować systemd, aby automatycznie logował się do środowiska pulpitu, najlepiej bez korzystania z menedżera logowania? Używam Arch.

fucho
źródło
Z którego menedżera logowania korzystasz? Niektóre (GDM, KDM, iirc, może więcej) już obsługują autologin, więc wystarczy dla nich włączyć tę usługę.
Wieland,
Obecnie używam szczupły i może być skonfigurowany do automatycznego logowania, ale bez menedżera wyświetlania procesu rozruchu byłoby szybciej i migotania :)
fhucho
Och, źle odczytałem twoje pytanie.
Wieland,

Odpowiedzi:

22

Jest to opisane w Arch Wiki :

Utwórz nowy plik usługi podobny do [email protected], kopiując go do/etc/systemd/system/

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

To w zasadzie kopiuje już istniejący [email protected]do nowego pliku, [email protected]który można dowolnie modyfikować. Jest kopiowany, /etc/systemd/systemponieważ tam przechowywane są pliki jednostek specyficzne dla witryny. /usr/lib/systemd/systemzawiera pliki jednostek dostarczane przez pakiety, więc nie powinieneś niczego w nich zmieniać.

Będziesz musiał wtedy [email protected]dowiązać symbolicznie do usługi getty dla tty, na którym chcesz się autologować, na przykład dla tty1:

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

Do tej pory jest to nadal taki sam, jak zwykły [email protected]plik, ale najważniejszą częścią jest zmodyfikowanie, [email protected]aby faktycznie logowało się automatycznie. Aby to zrobić, wystarczy zmienić ExecStartwiersz do odczytu

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

Różnica między ExecStartwierszem [email protected]a [email protected]jest tylko tym, -a USERNAMEco każe agetty automatycznie logować użytkownika o nazwie USERNAME.

Teraz musisz tylko powiedzieć systemd, aby ponownie załadował pliki demona i uruchomił usługę:

systemctl daemon-reload
systemctl start [email protected]

(Nie jestem pewien, czy usługa uruchomi się poprawnie, jeśli jesteś już zalogowany na tty1, najbezpieczniejszym sposobem jest po prostu ponowne uruchomienie zamiast uruchomienia usługi).

Jeśli następnie chcesz automatycznie uruchomić X, wstaw następujący fragment kodu do ~/.bash_profile(ponownie wzięty z wiki ):

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

Będziesz musiał zmodyfikować swoje, ~/.xinitrcaby uruchomić środowisko pulpitu, jak to zrobić, zależy od DE i prawdopodobnie jest również opisane na wiki Arch.

Wieland
źródło
Co to jest agetty arg% I?
Edward Anderson,
Co jest z charachter na końcu? Czy to jest potrzebne? Co to znaczy?
rien333
@ rien333 To nie jest konieczne, usunąłem go z odpowiedzi.
Wieland,
2
Błąd File existspojawia się, gdy robię dowiązanie symboliczne
Post Self
użyj, ln -sf /etc/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]aby go zastąpić.
Manuel Schmitzberger
5

Bezpośrednio zmodyfikuj plik /etc/systemd/system/getty.target.wants/[email protected](który jest dowiązaniem symbolicznym /lib/systemd/system/getty@service):

Dołącz -a/--autologin USERNAMEdo linii:

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

W związku z tym:

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

Możesz także usunąć -o '-p -- \\u'(tak jak w bieżącej instalacji Arch), ponieważ spowoduje to rozpoczęcie logowania, USERNAMEale nadal prosi o hasło.

Po ponownym uruchomieniu nastąpi automatyczne zalogowanie.

Ps Zmień nazwę pliku na nazwę, [email protected]na ttyktórą chcesz się zalogować.

Zac
źródło
Uwaga dla przejrzystości: jeśli jest to dowiązanie symboliczne, zamień dowiązanie symboliczne na nowy plik i edytuj ten nowy plik.
Edward Anderson,
1

IMO, Arch Wiki zaleca obecnie o wiele prostsze rozwiązanie:

Uruchom helper ( systemctl edit getty@tty1) lub zrób to, co zrobiłem ręcznie:

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

Tekst, który chcesz wprowadzić (jedną z metod) to ( pamiętaj, aby odpowiednio zmienić nazwę użytkownika ):

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

UWAGA : Pusta linia jest ważna! (co prawda nie jestem pewien, dlaczego ...)

Teraz uruchom ponownie ( shutdown -r 0) i coś się ... login: username (automatic login)stanie, gdy wcześniej zablokował oczekiwanie na nazwę użytkownika / hasło


Po ponownym uruchomieniu i automatycznym zalogowaniu, jeśli jesteś podobny do mnie i chcesz teraz włączyć SSH do tego systemu, prawdopodobnie musisz uruchomić:

systemctl enable sshd.service

Który utworzy dowiązanie symboliczne (np. ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')

jakebrinkmann
źródło
Pusty wiersz najpierw wyczyści wpis ExecStart, a następny wiersz wprowadzi nowe polecenie exec. Warto również zauważyć, że w niektórych systemach (Ubuntu) można znaleźć plik wykonywalny agetty /sbin/agetty, dlatego /etc/systemd/system/getty.target.wants/[email protected]najpierw warto sprawdzić oryginalny plik.
platforma