Start X at Login (Italiano)

From ArchWiki
Revision as of 09:55, 10 December 2011 by Hilinus (Talk | contribs) (Metodo ~/.bash_profile)

Jump to: navigation, search

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

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

Introduzione

Tipicamente, i comandi startx o xinit sono usati per avviare X in modo manuale. Entrambi eseguiranno il contenuto del file ~/.xinitrc, che può essere personalizzato per avviare il window manager di vostra scelta, come descritto nell'articolo xinitrc.

La maggior parte degli utenti che desiderano inizializzare un server X in fase di boot installano un gestore di login grafico: si veda Display Manager per i dettagli.

Usando il #Metodo ~/.bash_profile, X verrà avviato una volta che si è fatto il login ad una tty. Il #Metodo /etc/inittab consente di avviare X automaticamente, senza che venga richiesta una password.

Metodi

Metodo ~/.bash_profile

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.

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.

Metodo /etc/inittab

Attenzione: 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

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 in questo modo:

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'

L'opzione - invoca una "shell di login" aggiungendo un trattino (-) al suo nome. Dal momento che è stato specificata l'esecuzione di un comando con lo switch -c, la shell sarà avviata in "modalità non interattiva". 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 -- assicura che gli switch -l e -c siano passati alla shell, invece che a su. Questi workarounds sono necessari a causa della combinazione tra Gnu su e Bash; si veda a tal proposito "su 5.2.1 does not invoke bash as a login shell".

Lo standard input deve essere rediretto (</dev/null 2>&1) 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 a /dev/null 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).