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@.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.
File existsquando eseguo il collegamento simbolico
ln -sf /etc/systemd/system/autologin@.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceper 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 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.
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.serviceprima il file originale .