Come posso configurare systemd per accedere automaticamente al mio ambiente desktop, preferibilmente senza utilizzare il login manager? Sto usando Arch.
Come posso configurare systemd per accedere automaticamente al mio ambiente desktop, preferibilmente senza utilizzare il login manager? Sto usando Arch.
Risposte:
Questo è descritto in Arch Wiki :
Crea un nuovo file di servizio simile
getty@.service
copiandolo in/etc/systemd/system/
cp /usr/lib/systemd/system/getty@.service /etc/systemd/system/autologin@.service
Questo sostanzialmente copia il già esistente getty@.service
in un nuovo file autologin@.service
che può essere modificato liberamente. Viene copiato /etc/systemd/system
perché è lì che vengono archiviati i file di unità specifici del sito. /usr/lib/systemd/system
contiene file di unità forniti dai pacchetti, quindi non dovresti cambiare nulla.
Dovrai quindi collegarlo autologin@.service
al 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@.service
file, ma la parte più importante è modificare il autologin@.service
per accedere effettivamente automaticamente. Per farlo, devi solo cambiare la ExecStart
riga da leggere
ExecStart=-/sbin/agetty -a USERNAME %I 38400
La differenza tra la ExecStart
linea getty@.service
e autologin@.service
è solo quella -a USERNAME
che 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 ~/.xinitrc
per avviare il tuo ambiente desktop, come farlo dipende dal DE ed è probabilmente descritto anche nel wiki di Arch.
File exists
quando eseguo il collegamento simbolico
ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.service
per sovrascriverlo.
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 USERNAME
alla 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 USERNAME
ma richiede ancora la password.
Dopo il riavvio, si accederà automaticamente.
Ps Cambia il nome del file getty@tty1.service
nel quale tty
vuoi accedere.
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'
)
/sbin/agetty
, quindi vale la pena controllare /etc/systemd/system/getty.target.wants/getty@tty1.service
prima il file originale .