Start X at Login (Italiano)

From ArchWiki
Jump to: navigation, search

Template:Temporary i18n Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

La maggior parte degli utenti utilizzano un Display manager per avviare il server X. Questo articolo tratta due metodi per compiere questa operazione senza l'ausilio di un display manager: il metodo .bash_profile avvierà X una volta effettuato il login in una tty, mentre il metodo inittab farà partire il server grafico automaticamente al boot, senza la necessità di inserire una password.

Per avviare manualmente X, è necessario usare i comandi startx o xinit. Entrambi eseguiranno il file ~/.xinitrc, che potrà essere personalizzato per avviare il window manager preferito, come descritto in Xinitrc.

bash_profile

Una via alternativa all'utilizzo di un login manager è quella di aggiungere questo codice in fondo al vostro ~/.bash_profile presente nella vostra home (se questo file non esiste, dovrete crearlo. Se si sta usando Zsh come shell predefinita, si aggiungano invece le righe seguenti al proprio ~/.zprofile).

~/.bash_profile
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
  exec startx
  # È possibile usare xinit invece di startx
  # exec xinit -- /usr/bin/X -nolisten tcp vt7
fi

oppure, con controlli addizionali (se la tty1, accessibile con Template:Keypress, riporta un messaggio d'errore):

~/.bash_profile
if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
  exec startx
fi

O con una richiesta esplicita:

~/.bash_profile
	
if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
 while true; do
 read -p 'Do you want to start X? (y/n): '
 case $REPLY in
   [Yy]) exec xinit -- /usr/bin/X -nolisten tcp vt7 ;;
   [Nn]) break ;;
   *) printf '%s\n' 'Please answer y or n.' ;;
 esac
done

Usando questo metodo, l'utente verrà automaticamente disconnesso quando X viene terminato. Per evitare questo comportamento, rimuovere il comando exec dallo script.

Nota: Questo metodo può essere combinato con automatic login to virtual console di modo che si comporti in modo simile al metodo inittab, con la differenza che questo registrerà correttamente la vostra sessione e funzionerà con consolekit.
Attenzione: Si noti che vi è una importante differenza in termini di sicurezza tra usare un login manager o il semplice startx. Quando si usa startx, si è sempre in grado di passare da X (solitamente avviato sulla tty7) alla console testuale (Template:Keypress), ottenendo così il controllo sulla shell utente anche quando lo schermo è bloccato (ad esempio via xscreensaver, i3clock alock-svnAUR o lualock-gitAUR). Una soluzione è quella di sostituire exec startx con exec nohup startx > .xlog & vlock. Questo comando avvierà X, redirigerà l'output in ~/.xlog e bloccherà l'accesso alla shell. Naturalmente si dovrà installare vlock affinchè funzioni.

inittab

Un altro metodo è quello di inizializzare direttamente X con il vostro DE\WM preferito, senza richiesta di nessun login, e lo si può fare editando con permessi di root, il file /etc/inittab.

Nota: Questo metodo non userà /bin/login, né registrerà la sessione, percui essa non comparirà nell'output di comandi come who o w. Inoltre, la sessione non verrà autorizzata come "locale" da consolekit, perciò non sarete in grado di spegnere/riavviare il pc o montare/smontare i drives senza l'ausilio di sudo o su

Si cambi:

id:3:initdefault:

[...]

x:5:respawn:/usr/bin/xdm -nodaemon

in:

id:5:initdefault:

[...]

x:5:once:/bin/su - -- PREFERRED_USER -l -c '/usr/bin/startx </dev/null >/dev/null 2>&1'

Per l'utilizzo combinato di GNU su e Bash sono richiesti dei workarounds (si veda su 5.2.1 non invoca bash come una shell di login):

  • Bash non effettua il normale processo di login in modalità non interattiva a meno che non sia costretto a farlo con lo switch -l. L'opzione -c rende la shell non interattiva
  • L'opzione -- assicura che gli switch -l e -c siano passati alla shell, invece che a su.

Spiegazione degli altri componenti:

  • L'opzione - invoca una "shell di login" aggiungendo un trattino (-) al suo nome.
  • Lo standard input deve essere rediretto (</dev/null) se Getty o qualche altro programma è ancora in uso sulla console, altrimenti potrebbero verificarsi conflitti tra più programmi che si "rubano" a vicenda l'output della console.
  • È altresì possibile redirigere l'output (/dev/null 2>&1) per evitare che X scriva i suoi messaggi in console.
  • Il campo once, può essere cambiato in respawn per far sì che X venga riavviato dopo la sua chiusura.

Il comando startx può essere modificato secondo le proprie necessità. Di seguito, alcuni esempi:

startx -- -nolisten tcp -br -deferglyphs 16

È possibile ripetere l'intera procedura per più utenti, usando runlevels differenti:

x1:4:once:/bin/su - -- PREFERRED_USER1 -l -c '/usr/bin/startx </dev/null >/dev/null 2>&1'
x2:5:once:/bin/su - -- PREFERRED_USER2 -l -c '/usr/bin/startx </dev/null >/dev/null 2>&1'

e inserire due voci nel /boot/grub/menu.lst di GRUB:

# (0) Arch Linux
title  Arch Linux USER1
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/disk/by-label/Arch ro 4
initrd /initramfs-linux.img
# (1) Arch Linux
title  Arch Linux USER2
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/disk/by-label/Arch ro 5
initrd /initramfs-linux.img
Nota: Se si hanno problemi con caratteri non-ASCII nell'X avviato in questo modo, rimuovere lo switch -l (si veda qui).