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.


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 getty@.service, kopiując go do/etc/systemd/system/

cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service

To w zasadzie kopiuje już istniejący getty@.servicedo nowego pliku, autologin@.servicektó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 autologin@.servicedowiązać symbolicznie do usługi getty dla tty, na którym chcesz się autologować, na przykład dla tty1:

ln -s /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service

Do tej pory jest to nadal taki sam, jak zwykły getty@.serviceplik, ale najważniejszą częścią jest zmodyfikowanie, autologin@.serviceaby 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 getty@.servicea autologin@.servicejest 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 getty@tty1.service

(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.


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/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceaby go zastąpić.
Manuel Schmitzberger

5

Bezpośrednio zmodyfikuj plik /etc/systemd/system/getty.target.wants/getty@tty1.service(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ę, getty@tty1.servicena ttyktórą chcesz się zalogować.


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/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/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')


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/getty@tty1.servicenajpierw warto sprawdzić oryginalny plik.
platforma
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.