Commenti
- Questa domanda non è un duplicato. La domanda collegata sta spiegando il formato e il significato della variabile env DISPLAY mentre questa domanda riguarda lassegnazione di " a una variabile env e il programma interessato devono essere scritti nella stessa riga ".
Risposta
DISPLAY=:0 gnome-panel
è un comando della shell che esegue il comando esterno gnome-panel
con la variabile di ambiente DISPLAY
impostato su :0
. La sintassi della shell VARIABLE=VALUE COMMAND
imposta la variabile dambiente VARIABLE
solo per la durata del comando specificato. È più o meno equivalente a (export VARIABLE=VALUE; exec COMMAND)
.
La variabile dambiente DISPLAY
dice ai programmi GUI come comunicare con la GUI. Un sistema Unix può eseguire più server X , cioè più display. Questi display possono essere display fisici (uno o più monitor) o display remoti (inoltrati sulla rete, ad esempio su SSH) o display virtuali come Xvfb , ecc. La sintassi di base per specificare le visualizzazioni è HOST:NUMBER
; se ometti la parte HOST
, il display è locale.
I display sono numerati da 0, quindi :0
è il primo display locale avviato. Nelle configurazioni tipiche, questo è ciò che viene visualizzato sui monitor del computer.
Come tutte le variabili di ambiente, DISPLAY
viene ereditato dal processo genitore al figlio Ad esempio, quando si accede a una sessione GUI, il gestore degli accessi o lo starter di sessione imposta DISPLAY
in modo appropriato e la variabile viene ereditata da tutti i programmi nella sessione. Quando si apre una connessione SSH con inoltro X, SSH imposta la variabile di ambiente DISPLAY
sulla connessione inoltrata, in modo che i programmi eseguiti sulla macchina remota vengano visualizzati sulla macchina locale. Se è presente nessuna connessione X inoltrata (o perché SSH è configurato per non farlo, o perché non cè un server X locale), SSH non “imposta DISPLAY
.
Limpostazione di DISPLAY
fa sì che il programma venga visualizzato esplicitamente in una posizione in cui normalmente non sarebbe. Ad esempio, eseguendo DISPLAY=:0 gnome-panel
in un SSH stella di connessione è un pannello Gnome sul display locale della macchina remota (assumendo che ce ne sia uno e che lutente sia autorizzato ad accedervi). Limpostazione esplicita di DISPLAY=:0
è solitamente un modo per accedere alla visualizzazione locale di una macchina dallesterno della sessione locale, ad esempio tramite un accesso remoto o da un cron job.
Risposta
È una variabile dambiente che viene passata solo a quel programma, piuttosto che alla shell nel suo insieme. Questo accade quando imposti una variabile sulla stessa riga di un comando.
I programmi X11 devono sapere dove visualizzare le finestre, poiché “è un sistema client / server e potresti essere visualizzato su una macchina remota. Ciò significa semplicemente utilizzare il primo display sulla macchina locale.
Normalmente viene impostato automaticamente quando si accede a un ambiente desktop. Ad esempio, apri un terminale grafico e digita echo $DISPLAY
.
Commenti
- la sintassi di bash consente lassegnazione a una variabile env e il programma interessato da scrivere nella stessa riga, e separati da uno spazio bianco?
- Sì, ' è esattamente come hai citato nella domanda.
- @Tim Tutte le shell compatibili con POSIX Consentire questo. Significa impostare ed esportare la variabile dambiente solo per quel comando, ma non influenzare il valore della variabile di shell (se ha già un valore) in seguito.
- @MarkPlotnick – it ' è un po di più a grana più fine di quello. Quando si antepone una dichiarazione di variabile a qualsiasi comando tranne una funzione di shell o un builtin speciale, la dichiarazione non dovrebbe influenzare la definizione della ' della specifica ' d var, ma quando lo si fa per uno di questi POSIX afferma che la dichiarazione della variabile dovrebbe rimanere fissa. Quindi, POSIXLY,
one=$1 shift
dovrebbe definire simultaneamente la variabile shell corrente$one
in modo che abbia lo stesso valore della shell corrente ' è la prima posizione durante la rimozione di detta posizione.bash
, a proposito, non rispetta le specifiche per impostazione predefinita. - @mikeserv Grazie come sempre per la descrizione più precisa e corretta.