Come posso accedere automaticamente al desktop con systemd?


20

Come posso configurare systemd per accedere automaticamente al mio ambiente desktop, preferibilmente senza utilizzare il login manager? Sto usando Arch.


Quale gestore degli accessi stai usando? Alcuni (GDM, KDM, iirc, forse di più) supportano già l'autologin, quindi dovrai solo abilitare il servizio per loro.
Wieland,

Attualmente sto usando SLiM e può essere configurato per accedere automaticamente, ma senza un display manager il processo di avvio sarebbe più veloce e senza sfarfallio :)
fhucho

Oh, ho letto male la tua domanda.
Wieland,

Risposte:


22

Questo è descritto in Arch Wiki :

Crea un nuovo file di servizio simile getty@.servicecopiandolo in/etc/systemd/system/

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

Questo sostanzialmente copia il già esistente getty@.servicein un nuovo file autologin@.serviceche può essere modificato liberamente. Viene copiato /etc/systemd/systemperché è lì che vengono archiviati i file di unità specifici del sito. /usr/lib/systemd/systemcontiene file di unità forniti dai pacchetti, quindi non dovresti cambiare nulla.

Dovrai quindi collegarlo autologin@.serviceal servizio getty per il tty su cui vuoi autologin, per esempio per tty1:

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

Fino ad ora, questo è sempre lo stesso del solito getty@.servicefile, ma la parte più importante è modificare il autologin@.serviceper accedere effettivamente automaticamente. Per farlo, devi solo cambiare la ExecStartriga da leggere

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

La differenza tra la ExecStartlinea getty@.servicee autologin@.serviceè solo quella -a USERNAMEche dice a agetty di accedere automaticamente con il nome utente USERNAME.

Ora devi solo dire a systemd di ricaricare i suoi file daemon e avviare il servizio:

systemctl daemon-reload
systemctl start getty@tty1.service

(Non sono sicuro che il servizio si avvierà correttamente se hai già effettuato l'accesso su tty1, il modo più sicuro è probabilmente riavviare invece di avviare il servizio).

Se vuoi quindi avviare automaticamente X, inserisci il seguente frammento nel tuo ~/.bash_profile(preso di nuovo dal wiki ):

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

Dovrai modificare il tuo ~/.xinitrcper avviare il tuo ambiente desktop, come farlo dipende dal DE ed è probabilmente descritto anche nel wiki di Arch.


Cos'è l'agetty arg% I?
Edward Anderson il

Cosa succede con il carattere alla fine? È necessario? Cosa significa?
rien333,

@ rien333 Non è necessario, l'ho rimosso dalla risposta.
Wieland,

2
Ottengo l'errore File existsquando eseguo il collegamento simbolico
Post Self

usare ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceper sovrascriverlo.
Manuel Schmitzberger,

5

Modifica direttamente il file /etc/systemd/system/getty.target.wants/getty@tty1.service(che è un link simbolico a /lib/systemd/system/getty@service):

Aggiungi -a/--autologin USERNAMEalla riga:

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

Quindi:

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

È inoltre possibile rimuovere -o '-p -- \\u'(come presente nell'installazione Arch corrente) in quanto ciò avvia il login USERNAMEma richiede ancora la password.

Dopo il riavvio, si accederà automaticamente.

Ps Cambia il nome del file getty@tty1.servicenel quale ttyvuoi accedere.


Nota per chiarezza: se si tratta di un collegamento simbolico, sostituire il collegamento simbolico con un nuovo file e modificare quel nuovo file.
Edward Anderson il

1

IMO, Arch Wiki attualmente consiglia una soluzione molto più semplice:

O esegui helper ( systemctl edit getty@tty1) o fai quello che ho fatto manualmente:

mkdir -p /etc/systemd/system/getty@tty1.service.d/
touch /etc/systemd/system/getty@tty1.service.d/override.conf

Il testo che vuoi inserire (con uno dei due metodi) è ( assicurati di cambiare il nome utente in modo appropriato ):

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

NOTA : la riga vuota è importante! (devo ammettere che non sono sicuro del perché ...)

Ora, riavvia ( shutdown -r 0) e ... login: username (automatic login)succederà qualcosa a causa del quale in precedenza si è bloccato in attesa dell'inserimento di nome utente / password


Una volta riavviato e eseguito l'accesso automatico, se sei come me e desideri SSH in questo sistema ora, probabilmente dovrai eseguire:

systemctl enable sshd.service

Che creerà il collegamento simbolico (ad es. ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service')


La riga vuota per prima cosa cancellerà la voce ExecStart, mentre la riga successiva introdurrà un nuovo comando exec. Vale anche la pena notare che su alcuni sistemi (Ubuntu) potrebbe trovarsi l'agetty eseguibile /sbin/agetty, quindi vale la pena controllare /etc/systemd/system/getty.target.wants/getty@tty1.serviceprima il file originale .
Platforma
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.