Qual é a variável de ambiente $ DISPLAY?

75

Eu sou novo no shell script. Não entendo qual é a $DISPLAYvariável ambiental.

Eu tenho o Ubuntu 13.10 e uso /bin/bashshell. Eu tenho dois monitores.

Questões:

  1. O comando echo $DISPLAYserá impresso :0.0na minha máquina (nos dois monitores). O que isto significa?

  2. Em quais casos a $DISPLAYvariável ficará em branco ou NULL?

  3. Existem artigos ou tutoriais sobre isso?

Chandrayya GK
fonte
Hoje echo $DISPLAYestá imprimindo :0NÃO:0.0
Chandrayya GK
verificar isso vai ajudar em caso de erros em branco ou: askubuntu.com/questions/432610/...
Maythux

Respostas:

86

A palavra mágica no sistema de janelas X é DISPLAY. Um display consiste (simplificado) em:

  • um teclado,
  • um rato
  • e uma tela.

Uma exibição é gerenciada por um programa de servidor, conhecido como servidor X. O servidor serve para exibir recursos para outros programas que se conectam a ele.

O servidor remoto sabe onde deve redirecionar o tráfego da rede X através da definição da variável de ambiente DISPLAY, que geralmente aponta para um servidor X Display localizado no computador local.

O valor da variável de ambiente de exibição é:

hostname:D.S

Onde:

hostname é o nome do computador em que o servidor X é executado. Um nome de host omitido significa o host local.

D é um número de sequência (geralmente 0). Pode variar se houver vários monitores conectados a um computador.

S é o número da tela. Um monitor pode realmente ter várias telas. Normalmente, há apenas uma tela, embora 0 seja o padrão.

Exemplo de valores

localhost:4
google.com:0
:0.0

hostname:D.Ssignifica tela S na exibição D do nome do host; o servidor X deste monitor está escutando na porta TCP 6000 + D.

host/unix:D.Ssignifica tela S na tela D do host host; o servidor X para esta exibição está escutando no soquete do domínio UNIX /tmp/.X11-unix/XD (portanto, é acessível apenas pelo host).

:D.S é equivalente a host / unix: DS, em que host é o nome do host local.

: 0.0 significa que estamos falando da primeira tela anexada à sua primeira exibição no host local

Leia mais aqui e aqui e aqui .

Em uma página do manual do X (7):

Da perspectiva do usuário, todo servidor X possui um nome de exibição no formulário:

nome do host: displaynumber.screennumber

Essas informações são usadas pelo aplicativo para determinar como ele deve se conectar ao servidor e qual tela ele deve usar por padrão (em monitores com vários monitores):

nome do host O nome do host especifica o nome da máquina à qual o monitor está fisicamente conectado. Se o nome do host não for fornecido, será usada a maneira mais eficiente de se comunicar com um servidor na mesma máquina. displaynumber A frase "display" geralmente é usada para se referir à coleção de monitores que compartilham um teclado e ponteiro comuns (mouse, tablet, etc.). A maioria das estações de trabalho costuma ter apenas um teclado e, portanto, apenas uma tela. Sistemas maiores para múltiplos usuários, no entanto, freqüentemente têm vários monitores, para que mais de uma pessoa possa trabalhar com gráficos ao mesmo tempo. Para evitar confusão, cada monitor de uma máquina recebe um número de monitor (começando em 0) quando o servidor X desse monitor é iniciado. O número de exibição sempre deve ser fornecido em um nome de exibição. número da tela Alguns monitores compartilham um único teclado e ponteiro entre dois ou mais monitores. Como cada monitor possui seu próprio conjunto de janelas, cada tela recebe um número de tela (começando em 0) quando o servidor X para essa exibição é iniciado. Se o número da tela não for fornecido, a tela 0 será usada.

Maythux
fonte
Quando este $ DISPLAY será nulo ou EM BRANCO.
Chandrayya GK 11/03
Normalmente, isso não deve acontecer, a menos que haja um problema no seu monitor. Geralmente, uma reinicialização do seu gerenciador de monitores resolverá o problema. Mas essa não é uma ação padrão.
Maythux 11/03/14
@ChandrayyaGK Por exemplo, quando não estou usando nenhum ambiente de área de trabalho como o GNOME ou KDE, mas efetuo login diretamente com o TTY (como /dev/tty1), fiquei em branco $DISPLAY.
Franklin Yu
@Maythux Às vezes, o número de tela parece ser omitido ao ser 0. Meu GNOME dá :0para $DISPLAY.
Franklin Yu
10

As respostas existentes não conseguem abordar a imagem mais ampla.

Se você não estiver usando um ambiente gráfico (ou seja, estiver efetuando login no console do sistema sem janelas, etc; ou se estiver efetuando login remotamente a partir de um terminal somente texto sobre SSH ou similar, como em um computador Windows executando o PuTTY), nenhuma GUI está envolvida e DISPLAYnormalmente não está definida. Seu único meio de comunicação com o computador é a linha de comando (embora possa haver maneiras de entrar em uma sessão da GUI, se você souber).

Se você estiver efetuando login no console com uma interface gráfica (no Ubuntu, normalmente o GDM greeter é usado) ou usando um terminal gráfico (como em um computador Windows executando o eXceed ou mobaX ou software de desktop remoto como um cliente VNC), DISPLAYA variável é configurada pelo programa que gerencia sua sessão gráfica para indicar aos clientes gráficos a quais dispositivos de E / S se conectam.

Tradicionalmente, a GUI em um computador Ubuntu estava executando o X.org, uma implementação do X11, embora, mais recentemente, uma substituição modernizada chamada Mir fosse introduzida pela Canonical; e ainda mais recentemente, acredito que Mir será abandonada em favor de outro projeto com objetivos amplamente semelhantes, chamados Wayland . Essas substituições visam reduzir a complexidade de uma pilha X11 completa, na qual não entraremos aqui - elas aderem à mesma DISPLAYconvenção, que é afinal o que estamos discutindo aqui.

No X11, a parte do host DISPLAYpoderia ser um servidor remoto, e você usaria o computador Ubuntu como um "terminal gráfico" para acessar arquivos e programas nesse servidor remoto (nesse caso, o computador é o "servidor" que serve o teclado , um mouse e um ou mais dispositivos de exibição para programas "clientes" em execução no servidor ... remoto). Mais comumente, o servidor X11 (ou Mir ou Wayland) e os programas clientes (um gerenciador de desktop e vários clientes gráficos, como um navegador da Web, um cliente de email, um programa de calendário etc.), todos são executados no seu computador. Isso é indicado pela parte "server" do DISPLAYvalor, que no último caso geralmente está vazio (o que implica o valor padrão localhost).

Um servidor X11 pode executar uma ou mais sessões gráficas - por exemplo, o login do console e uma sessão VNC remota podem estar em execução ao mesmo tempo. Nesse caso (se eles forem gerenciados pela mesma instância do servidor X11), você terá mais de uma "exibição" em termos do X11. Na prática, uma sessão (um evento de logon e a instância da área de trabalho gerada a partir disso) é uma exibição no X11.

Um desses monitores pode ter uma ou mais telas. Tradicionalmente, isso significava um monitor, embora a arquitetura original tivesse algumas características infelizes, como a incapacidade de mover uma janela de uma tela para outra. Complementos como o Xinerama e o Xrandr distorcem ainda mais a situação a ponto de uma tela conectar vários monitores de várias maneiras.

Se você tocou com sistemas de vários monitores, provavelmente descobriu que pode organizar os monitores de várias maneiras e acabar com uma área retangular na qual seus monitores exibem algumas partes dele e outras não são atribuídas a nenhum monitor. Essa é a "tela" que o X11 cria e, se você tiver mais de uma placa de vídeo, poderá ter várias dessas telas, cada uma atribuída a um ou mais monitores (ou, teoricamente, executando sem monitor; o Xvfb explora isso para permitir para executar o X11 sem nenhum monitor, basta mapear a GUI para uma região de memória para qualquer finalidade).

triplo
fonte
Mir foi realmente abandonado junto com Unity. Por um longo tempo, o lightdm em vez do gdm foi o padrão, mas talvez essa parte da sua resposta tenha se tornado correta novamente como antes da ascensão do Unity! Eu uso MATE, por isso não posso verificar trivialmente ...
Zanna
Eu estava executando o Linux a partir do console (sem janelas) e isso explica tudo. Faz realmente sentido: p
Jean-Francois T.
3

Em https://help.ubuntu.com/community/EnvironmentVariables :

Variável- DISPLAY

Exemplo de valores:

:0.0
localhost:10.0
terminal01:0.0

Para que serve?

Essa variável é usada para indicar às aplicações gráficas onde exibir a interface gráfica real do usuário, o valor consiste em 3 partes: um nome de host seguido por dois pontos (:), um número de exibição seguido por um ponto (.) E uma tela número.

A parte do nome do host pode ser usada para enviar a saída gráfica para uma máquina remota pela rede. Pode ser omitido quando a saída é destinada a um servidor X em execução na máquina local. O número de exibição permite selecionar entre vários servidores X em execução na mesma máquina (o Ubuntu usa vários servidores X para ativar várias sessões gráficas da área de trabalho).

Embora o número da tela seja usado para selecionar entre várias telas físicas gerenciadas pelo mesmo servidor X, raramente é definido como algo diferente de "0" atualmente. Atualmente, a configuração manual do valor da variável de ambiente "DISPLAY" raramente é necessária, pois pode ser ajustada de forma automática e inteligente por muitos aplicativos, como "GDM" e "SSH", quando necessário.

Pandya
fonte
3

echo $ DISPLAY imprimirá: 0,0 na minha máquina (nos dois monitores). O que isto significa?

: 0.0 significa o número de exibição 0 e o número de tela 0

Nesse caso, $ DISPLAY ficará em branco ou NULL?

Em caso de erro no seu $ DISPLAY e isso não acontece normalmente

Existem artigos ou tutoriais sobre isso?

Alguns tutoriais e recursos podem ser encontrados aqui:

Comunidade
fonte