Difference between revisions of "Start X at Login (Italiano)"

From ArchWiki
Jump to: navigation, search
m (bash_profile)
(flagged broken section links, simplification and beautification of wikilinks (interactive))
(Tag: wiki-scripts)
 
(48 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[Category:X Server (Italiano)]]
+
[[Category:X server (Italiano)]]
 
[[Category:Boot process (Italiano)]]
 
[[Category:Boot process (Italiano)]]
[[en:Start X at Boot]]
+
[[de:Xinitrc]]
[[es:Start X at Boot]]
+
[[el:Xinitrc]]
 +
[[en:Xinit]]
 +
[[es:Start X at login]]
 
[[fr:Startx]]
 
[[fr:Startx]]
 
[[hu:Start X at Boot]]
 
[[hu:Start X at Boot]]
 +
[[ja:ログイン時に X を起動]]
 
[[pt:Start X at Boot]]
 
[[pt:Start X at Boot]]
[[ru:Start X at Boot]]
+
[[ru:Xinitrc]]
[[th:Start X at Boot]]
+
[[th:Start X at boot]]
[[zh-CN:Start X at Boot]]
+
[[zh-hans:Xinit]]
{{Article summary start|Sommario}}
+
[[zh-hant:Start X at Login]]
{{Article summary text|Tratta i metodi .bash_profile ed inittab per inizializzare un [[Xorg (Italiano)|X server]] durante la fase di boot.}}
+
{{Related articles start (Italiano)}}
{{Article summary heading|Articoli collegati}}
+
{{Related|systemd/User (Italiano)}}
{{Article summary wiki|Display Manager (Italiano)}}
+
{{Related|Automatic login to virtual console (Italiano)}}
{{Article summary wiki|Automatic login to virtual console (Italiano)}}
+
{{Related|Display Manager (Italiano)}}
{{Article summary wiki|xinitrc (Italiano)}}
+
{{Related|Silent boot}}
{{Article summary end}}
+
{{Related|Xinitrc (Italiano)}}
 +
{{Related articles end}}
  
La maggior parte degli utenti utilizzano un [[Display Manager (Italiano)|Display manager]] per avviare il server [[Xorg (Italiano)|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.
+
Questo articolo spiega come avviare automaticamente il [[Xorg (Italiano)|Server X]] dopo il login in un terminale virtuale attraverso l'utilizzo del comando ''startx'', il cui comportamento può essere modificato come riportato nella pagina relativa a [[xinitrc (Italiano)|xinitrc]], ad esempio per scegliere quale [[Window manager (Italiano)|window manager]] avviare.
  
Per avviare manualmente X, è necessario usare i comandi {{ic|startx}} o {{ic|xinit}}. Entrambi eseguiranno il file {{ic|~/.xinitrc}}, che potrà essere personalizzato per avviare il window manager preferito, come descritto in [[Xinitrc (Italiano)|Xinitrc]].
+
In alternativa, è possibile utilizzare un [[Display manager (Italiano)|display manager]] per avviare automaticamente X e fornire un login grafico.
  
==bash_profile==
+
==File di configurazione delle shell==
  
Una via alternativa all'utilizzo di un login manager è quella di aggiungere questo codice in fondo al vostro {{ic|~/.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 {{ic|~/.zprofile}}).
+
{{Nota|Il comando di cui sotto avvia X nella stessa tty dal quale si effettua il login, condizione necessaria per mantenere la sessione di login.}}
{{hc|~/.bash_profile|<nowiki>
 
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
 
  exec startx
 
  # È possibile usare xinit invece di startx
 
  # exec xinit -- /usr/bin/X -nolisten tcp vt7
 
fi
 
</nowiki>}}
 
  
oppure, con controlli addizionali (se la tty1, accessibile con {{Keypress|Ctrl+Alt+F1}}, riporta un messaggio d'errore):
+
Se si usa [[Bash (Italiano)|Bash]], aggiungere il comando al proprio {{ic|~/.bash_profile}}.
 +
Se il file non esiste lo si copi da {{ic|/etc/skel/.bash_profile}}.
 +
Se si usa [[Zsh]] aggiungere il comando al file {{ic|~/.zlogin}} o {{ic|~/.zprofile}}.
  
{{hc|~/.bash_profile|<nowiki>
+
{{bc|1=<nowiki>
if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
+
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
  exec startx
 
fi
 
 
</nowiki>}}
 
</nowiki>}}
  
O con una richiesta esplicita:
+
{{Nota|
 +
* È possibile sostituire {{ic|-eq 1}} con {{ic|-le 3}} (per i vt dal 1 al 3) se si desidera avvalersi del login grafico su più di un terminale virtuale.
 +
* X deve essere sempre avviato dalla stessa tty dove si è effettuato il login, in modo che la sessione di logind venga mantenuta. Questo comportamento è garantito dal file {{ic|/etc/X11/xinit/xserverrc}}.
 +
* {{ic|xinit}} è generalmente più veloce di {{ic|startx}}, ma è necessario specificare manualmente dei parametri aggiuntivi come {{ic|-nolisten tcp}}.}}
  
{{hc|~/.bash_profile|<nowiki>
+
Se si utilizza la [[Fish]] shell, è necessario aggiungere quanto segue in fondo al proprio {{ic|~/.config/fish/config.fish}}
+
 
if [[ -z $DISPLAY ]] && ! [[ -e /tmp/.X11-unix/X0 ]] && (( EUID )); then
+
{{bc|1=<nowiki>
while true; do
+
# start X at login
read -p 'Do you want to start X? (y/n): '
+
if status --is-login
case $REPLY in
+
    if test -z "$DISPLAY" -a $XDG_VTNR -eq 1
  [Yy]) exec xinit -- /usr/bin/X -nolisten tcp vt7 ;;
+
        exec startx -- -keeptty
  [Nn]) break ;;
+
    end
  *) printf '%s\n' 'Please answer y or n.' ;;
+
end
esac
 
done
 
 
</nowiki>}}
 
</nowiki>}}
  
Usando questo metodo, l'utente verrà automaticamente disconnesso quando X viene terminato. Per evitare questo comportamento, rimuovere il comando {{ic|exec}} dallo script.
+
{{Nota|{{ic|startx}} richiede il parametro {{ic|-keeptty}} quando si utilizza fish. Si veda [https://github.com/fish-shell/fish-shell/issues/1772 questo] bug report.}}
  
{{Nota|Questo metodo può essere combinato con [[Automatic login to virtual console (Italiano)|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|consolekit]].}}
+
==Utilizzando systemd==
{{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 ({{Keypress|Ctrl+Alt+F1}}), ottenendo così il controllo sulla shell utente anche quando lo schermo è bloccato (ad esempio via xscreensaver, i3clock {{AUR|alock-svn}} o {{AUR|lualock-git}}). Una soluzione è quella di sostituire {{ic|exec startx}} con {{ic|setsid startx >& .xlog; logout}}. Questo comando avvierà X in una nuova sessione e non consentirà allo stesso di venir terminato tramite {{ic|^C}}, effettuerà il logout dalla tty correntte e redirigerà l'output in {{ic|~/.xlog}}.}}
 
  
==inittab==
+
Si crei un file .service (ad esempio {{ic|/etc/systemd/system/xinit@.service}}):
  
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 {{ic|/etc/inittab}}.
+
{{bc|1=<nowiki>
 +
[Unit]
 +
Description=startx for user %i
 +
After=x@vt7.service systemd-user-sessions.service
 +
Wants=x@vt7.service
 +
Conflicts=getty@tty7.service
  
{{Nota|Questo metodo non userà {{ic|/bin/login}}, né registrerà la sessione, percui essa non comparirà nell'output di comandi come {{ic|who}} o {{ic|w}}. Inoltre, la sessione non verrà autorizzata come "locale" da [[ConsoleKit|consolekit]], perciò non sarete in grado di spegnere/riavviare il pc o montare/smontare i drives senza l'ausilio di sudo o su}}
+
[Service]
 +
User=%i
 +
TTYPath=/dev/tty7
 +
PAMName=login
 +
Environment=DISPLAY=:0
 +
WorkingDirectory=/home/%I
 +
Nice=0
 +
ExecStart=/bin/bash -l -c "cd; startx >/dev/null 2>&1"
  
Si cambi:
+
[Install]
 
+
WantedBy=graphical.target
id:3:initdefault:
+
</nowiki>}}
 
[...]
 
 
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|su]] e [[Bash (Italiano)|Bash]] sono richiesti dei workarounds (si veda [http://linux.derkeiler.com/Newsgroups/comp.os.linux.misc/2006-09/msg00666.html su 5.2.1 non invoca bash come una shell di login]):
+
Assicurarsi che {{ic|~.xinitrc}} esista e sia configurato in modo corretto.
  
* Bash non effettua il normale processo di login in modalità non interattiva a meno che non sia costretto a farlo con lo switch {{ic|-l}}. L'opzione {{ic|-c}} rende la shell non interattiva
+
Si abiliti ed [[systemd (Italiano)#Usare le unità|attivi]] quindi il servizio.
* L'opzione {{ic|--}} assicura che gli switch {{ic|-l}} e {{ic|-c}} siano passati alla shell, invece che a su.
 
  
Spiegazione degli altri componenti:
+
{{Suggerimento|Rimuovere {{ic|>/dev/null 2>&1}} per effettuare il debug.}}
  
* L'opzione {{ic|-}} invoca una "shell di login" aggiungendo un trattino (-) al suo nome.
+
==Suggerimenti==
* Lo standard input deve essere rediretto ({{ic|</dev/null}}) se [[Getty|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 ({{ic|/dev/null 2>&1}}) per evitare che X scriva i suoi messaggi in console.
 
* Il campo {{ic|once}}, può essere cambiato in {{ic|respawn}} per far sì che X venga riavviato dopo la sua chiusura.
 
  
Il comando {{ic|startx}} può essere modificato secondo le proprie necessità. Di seguito, alcuni esempi:
+
* Il metodo appena presentato può essere combinato con [[Automatic login to virtual console (Italiano)|il login automatico da console virtuale]]. Quando si utilizza questo metodo sarà necessario modificare il servizio di systemd per l'autologin in modo che DBus venga avviato prima della lettura di {{ic|~/.xinitrc}}, per permettere così l'avvio di PulseAudio. (si veda [https://bbs.archlinux.org/viewtopic.php?id=155416 BBS#155416])
  
startx -- -nolisten tcp -br -deferglyphs 16
+
* Se si desidera mantenere il login su TTY quando la sessione di X viene terminata, si rimuova {{ic|exec}}.
  
È possibile ripetere l'intera procedura per più utenti, usando runlevels differenti:
+
* Per redirigere l'output della sessione di X su un file, si crei un [[Bash (Italiano)#Alias|alias]]:
  
x1:4:once:/bin/su - -- PREFERRED_USER1 -l -c '/usr/bin/startx </dev/null >/dev/null 2>&1'
+
: {{bc|1=alias startx='startx & > ~/.xlog'}}
x2:5:once:/bin/su - -- PREFERRED_USER2 -l -c '/usr/bin/startx </dev/null >/dev/null 2>&1'
 
  
E inserire due voci nel file di configurazione del vostro bootloader passando al kernel i parametri {{ic|4}} e {{ic|5}}. Si consulti [[Kernel parameters|Kernel parameters]] per ulteriori informazioni.
+
: {{Nota|la ridirezione dello ''stderr'' ({{ic|startx &>}}) crea problemi all'avvio di X da utente normale. Si veda a tal proposito [[Xorg#Rootless Xorg (v1.16)]]{{Broken section link}}.}}
  
{{Nota|1=Se si hanno problemi con caratteri non-ASCII nell'X avviato in questo modo, rimuovere lo switch {{ic|-l}} (si veda [https://bugs.gentoo.org/show_bug.cgi?id=339182#c4 qui]).}}
+
==Riferimenti==
 +
[http://unix.stackexchange.com/questions/62722/start-x-after-automatic-login Avvio di X dopo l'autologin]

Latest revision as of 02:27, 25 November 2017

Questo articolo spiega come avviare automaticamente il Server X dopo il login in un terminale virtuale attraverso l'utilizzo del comando startx, il cui comportamento può essere modificato come riportato nella pagina relativa a xinitrc, ad esempio per scegliere quale window manager avviare.

In alternativa, è possibile utilizzare un display manager per avviare automaticamente X e fornire un login grafico.

File di configurazione delle shell

Nota: Il comando di cui sotto avvia X nella stessa tty dal quale si effettua il login, condizione necessaria per mantenere la sessione di login.

Se si usa Bash, aggiungere il comando al proprio ~/.bash_profile. Se il file non esiste lo si copi da /etc/skel/.bash_profile. Se si usa Zsh aggiungere il comando al file ~/.zlogin o ~/.zprofile.

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
Nota:
  • È possibile sostituire -eq 1 con -le 3 (per i vt dal 1 al 3) se si desidera avvalersi del login grafico su più di un terminale virtuale.
  • X deve essere sempre avviato dalla stessa tty dove si è effettuato il login, in modo che la sessione di logind venga mantenuta. Questo comportamento è garantito dal file /etc/X11/xinit/xserverrc.
  • xinit è generalmente più veloce di startx, ma è necessario specificare manualmente dei parametri aggiuntivi come -nolisten tcp.

Se si utilizza la Fish shell, è necessario aggiungere quanto segue in fondo al proprio ~/.config/fish/config.fish

# start X at login
if status --is-login
    if test -z "$DISPLAY" -a $XDG_VTNR -eq 1
        exec startx -- -keeptty
    end
end
Nota: startx richiede il parametro -keeptty quando si utilizza fish. Si veda questo bug report.

Utilizzando systemd

Si crei un file .service (ad esempio /etc/systemd/system/xinit@.service):

[Unit]
Description=startx for user %i
After=x@vt7.service systemd-user-sessions.service
Wants=x@vt7.service
Conflicts=getty@tty7.service

[Service]
User=%i
TTYPath=/dev/tty7
PAMName=login
Environment=DISPLAY=:0
WorkingDirectory=/home/%I
Nice=0
ExecStart=/bin/bash -l -c "cd; startx >/dev/null 2>&1"

[Install]
WantedBy=graphical.target

Assicurarsi che ~.xinitrc esista e sia configurato in modo corretto.

Si abiliti ed attivi quindi il servizio.

Suggerimento: Rimuovere >/dev/null 2>&1 per effettuare il debug.

Suggerimenti

  • Il metodo appena presentato può essere combinato con il login automatico da console virtuale. Quando si utilizza questo metodo sarà necessario modificare il servizio di systemd per l'autologin in modo che DBus venga avviato prima della lettura di ~/.xinitrc, per permettere così l'avvio di PulseAudio. (si veda BBS#155416)
  • Se si desidera mantenere il login su TTY quando la sessione di X viene terminata, si rimuova exec.
  • Per redirigere l'output della sessione di X su un file, si crei un alias:
alias startx='startx & > ~/.xlog'
Nota: la ridirezione dello stderr (startx &>) crea problemi all'avvio di X da utente normale. Si veda a tal proposito Xorg#Rootless Xorg (v1.16)[broken link: invalid section].

Riferimenti

Avvio di X dopo l'autologin