Comentários
- Esta pergunta não é uma duplicata. A questão vinculada explica o formato e o significado da variável DISPLAY env, enquanto esta pergunta pergunta sobre a " atribuição a uma variável env e o programa afetado devem ser escritos na mesma linha ".
Resposta
DISPLAY=:0 gnome-panel
é um comando shell que executa o comando externo gnome-panel
com a variável de ambiente DISPLAY
definido como :0
. A sintaxe do shell VARIABLE=VALUE COMMAND
define a variável de ambiente VARIABLE
apenas para a duração do comando especificado. É aproximadamente equivalente a (export VARIABLE=VALUE; exec COMMAND)
.
A variável de ambiente DISPLAY
diz aos programas GUI como se comunicarem com a GUI. Um sistema Unix pode executar vários servidores X , ou seja, vários monitores. Esses visores podem ser visores físicos (um ou mais monitores) ou visores remotos (encaminhados pela rede, por exemplo, por SSH) ou visores virtuais, como Xvfb , etc. A sintaxe básica para especificar telas é HOST:NUMBER
; se você omitir a parte HOST
, a exibição é local.
As exibições são numeradas a partir de 0, portanto :0
é a primeira exibição local que foi iniciada. Em configurações típicas, isso é o que é exibido no (s) monitor (es) do computador.
Como todas as variáveis de ambiente, DISPLAY
é herdado do processo pai para o filho processo. Por exemplo, quando você faz login em uma sessão GUI, o gerenciador de login ou iniciador de sessão define DISPLAY
apropriadamente, e a variável é herdada por todos os programas na sessão. Quando você abre uma conexão SSH com encaminhamento X, SSH define a variável de ambiente DISPLAY
para a conexão encaminhada, de modo que os programas executados na máquina remota sejam exibidos na máquina local. nenhuma conexão X encaminhada (porque o SSH está configurado para não fazê-lo ou porque não há um servidor X local), o SSH não define DISPLAY
.
Definir DISPLAY
explicitamente faz com que o programa seja exibido em um lugar onde normalmente não seria. Por exemplo, executar DISPLAY=:0 gnome-panel
em um SSH estrela de conexão ts um painel Gnome na tela local da máquina remota (assumindo que haja um e que o usuário esteja autorizado a acessá-lo). Definir explicitamente DISPLAY=:0
é geralmente uma maneira de acessar a tela local de uma máquina de fora da sessão local, como por meio de um acesso remoto ou de um cron job.
Resposta
É uma variável de ambiente que é passada apenas para aquele programa, ao invés do shell como um todo. Isso acontece quando você define uma variável na mesma linha de um comando.
Os programas X11 precisam saber onde exibir as janelas, já que é um sistema cliente / servidor e você pode exibi-las em uma máquina remota. Isso significa simplesmente usar a primeira tela na máquina local.
Isso normalmente é configurado automaticamente ao fazer login em um ambiente de área de trabalho. Por exemplo, abra um terminal gráfico e digite echo $DISPLAY
.
Comentários
- a sintaxe bash permite a atribuição a uma variável env e o programa afetado seja escrito na mesma linha, e separados por espaço em branco?
- Sim, ' é exatamente como você citou na pergunta.
- @Tim Todos os shells compatíveis com POSIX permitir isso. Significa definir e exportar a variável de ambiente apenas para aquele comando, mas não afetar o valor da variável shell (se já tiver um valor) depois.
- @MarkPlotnick – it ' um pouco mais mais refinado do que isso. Ao prefixar uma declaração de variável para qualquer comando, exceto uma função shell ou um embutido especial, a declaração não deve afetar a ' definição do shell pai para a especificação ' d var, mas ao fazê-lo para qualquer um dos estados POSIX que a declaração da variável deve ser mantida. Então, POSIXLY,
one=$1 shift
deve definir simultaneamente a variável shell atual$one
para o mesmo valor que o shell atual ' s primeiro posicional enquanto remove o dito posicional.bash
, a propósito, quebra com a especificação por padrão. - @mikeserv Obrigado como sempre pela descrição mais precisa e correta.