Jak skonfigurować systemd, aby automatycznie logował się do środowiska pulpitu, najlepiej bez korzystania z menedżera logowania? Używam Arch.
Jak skonfigurować systemd, aby automatycznie logował się do środowiska pulpitu, najlepiej bez korzystania z menedżera logowania? Używam Arch.
Odpowiedzi:
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@.service
do nowego pliku, autologin@.service
który można dowolnie modyfikować. Jest kopiowany, /etc/systemd/system
ponieważ tam przechowywane są pliki jednostek specyficzne dla witryny. /usr/lib/systemd/system
zawiera pliki jednostek dostarczane przez pakiety, więc nie powinieneś niczego w nich zmieniać.
Będziesz musiał wtedy autologin@.service
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/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
Do tej pory jest to nadal taki sam, jak zwykły getty@.service
plik, ale najważniejszą częścią jest zmodyfikowanie, autologin@.service
aby faktycznie logowało się automatycznie. Aby to zrobić, wystarczy zmienić ExecStart
wiersz do odczytu
ExecStart=-/sbin/agetty -a USERNAME %I 38400
Różnica między ExecStart
wierszem getty@.service
a autologin@.service
jest tylko tym, -a USERNAME
co 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, ~/.xinitrc
aby uruchomić środowisko pulpitu, jak to zrobić, zależy od DE i prawdopodobnie jest również opisane na wiki Arch.
File exists
pojawia się, gdy robię dowiązanie symboliczne
ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
aby go zastąpić.
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 USERNAME
do 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, USERNAME
ale nadal prosi o hasło.
Po ponownym uruchomieniu nastąpi automatyczne zalogowanie.
Ps Zmień nazwę pliku na nazwę, getty@tty1.service
na tty
którą chcesz się zalogować.
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'
)
/sbin/agetty
, dlatego /etc/systemd/system/getty.target.wants/getty@tty1.service
najpierw warto sprawdzić oryginalny plik.