O que é a variável de ambiente $ DISPLAY?

41

Eu sou novo em scripts de shell. Não entendo qual é a variável de ambiente $DISPLAY .

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

Perguntas:

  1. O comando echo $DISPLAY imprimirá :0.0 na minha máquina (nos dois monitores). O que isso significa?

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

  3. Há algum artigo ou tutorial sobre isso?

por Chandrayya G K 10.03.2014 / 14:50

4 respostas

63

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

  • um teclado
  • um mouse
  • e uma tela.

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

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

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

hostname:D.S

onde:

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

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

S é o número da tela. Um monitor pode 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.S significa a tela S no display D do host hostname; o servidor X desta tela está escutando na porta TCP 6000 + D.

host/unix:D.S significa a tela S no display D do host host; o servidor X para esta exibição está escutando no soquete de domínio UNIX /tmp/.X11-unix/XD (portanto, ele só pode ser acessado pelo host).

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

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

Leia mais aqui e here e aqui .

De uma página de manual do X (7):

  

Do ponto de vista do usuário, todo servidor X tem um nome de exibição   da forma:

     

hostname: displaynumber.screennumber

     

Esta informação é usada pela aplicação para determinar como deve ser   conectar-se ao servidor e qual tela ele deve usar por padrão   exibe com vários monitores):

     

hostname O hostname especifica o nome da máquina para a qual o host   a tela está fisicamente conectada. Se o nome do host não for fornecido, o   maneira mais eficiente de se comunicar com um servidor na mesma máquina   será usado. displaynumber A frase "display" é normalmente usada para   consulte a coleção de monitores que compartilham um teclado comum e   ponteiro (mouse, tablet, etc.). A maioria das estações de trabalho tendem a ter apenas uma   teclado e, portanto, apenas um monitor. Sistemas maiores, multiusuários,   no entanto, freqüentemente tem vários monitores para que mais de uma pessoa   pode estar fazendo trabalhos gráficos de uma só vez. Para evitar confusão, cada monitor   em uma máquina é atribuído um número de exibição (começando em 0) quando o X   servidor para essa exibição é iniciado. O número de exibição deve sempre ser   dado em um nome de exibição. screennumber Alguns monitores compartilham um único   teclado e ponteiro entre dois ou mais monitores. Como cada monitor   tem seu próprio conjunto de janelas, cada tela é atribuída um número de tela   (começando em 0) quando o servidor X para esse monitor é iniciado. Se o   o número da tela não é dado, a tela 0 será usada.

    
por Maythux 10.03.2014 / 14:52
2

Em link :

Variável - DISPLAY

Exemplo de valores:

:0.0
localhost:10.0
terminal01:0.0

Para que serve?

  

Esta variável é usada para indicar aos aplicativos gráficos onde exibir a interface gráfica real, 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 um número de tela.

     

A parte do nome do host pode ser usada para que a saída gráfica seja enviada 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 múltiplos servidores X rodando na mesma máquina (o Ubuntu usa múltiplos servidores X para habilitar múltiplas sessões de desktop gráfico).

     

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

    
por Pandya 07.09.2014 / 10:46
2
  

echo $ DISPLAY irá imprimir: 0.0 na minha máquina (em Ambos os monitores). o que   isso 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

  

Há algum artigo ou tutorial sobre isso?

Alguns tutoriais e recursos podem ser encontrados aqui:

por user259474 18.03.2014 / 12:21
1

As respostas existentes não abordam o quadro mais amplo.

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

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

Tradicionalmente, a GUI em um computador Ubuntu estava executando o X.org, uma implementação do X11, embora mais recentemente, um substituto modernizado chamado Mir foi introduzido pela Canonical; e, ainda mais recentemente, acredito que a Mir será abandonada favor de outro projeto com objetivos amplamente semelhantes chamado Wayland . Essas substituições são destinadas a reduzir a complexidade de uma pilha X11 completa, que não estaremos entrando aqui - elas aderem à mesma convenção DISPLAY , que é, afinal, o que estamos discutindo aqui.

No X11, a parte host de DISPLAY poderia ser um servidor remoto, e você usaria seu computador Ubuntu como um "terminal gráfico" para acessar arquivos e programas naquele servidor remoto (caso em que seu computador é o " server "que serve um teclado, um mouse e um ou mais dispositivos de exibição para programas" cliente "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) são executados em seu computador. Isso é indicado pela parte "servidor" do valor DISPLAY , que no último caso é normalmente vazio (o que implica o valor padrão, localhost ).

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

Um desses displays 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 também confundiram a situação ao ponto em que uma tela frequentemente conecta vários monitores de várias maneiras.

Se você já tocou em sistemas com vários monitores, provavelmente descobriu que pode organizar monitores de várias maneiras e acabar com uma área retangular onde os monitores exibem algumas partes e outras partes não são atribuídas a nenhum monitor. Esta é a "tela" que o X11 cria, e se você tiver mais de uma placa de exibição, você pode ter várias destas telas, cada uma atribuída a um ou mais monitores (ou, em teoria, rodando sem um monitor; Xvfb explora isso para permitir você rodar o X11 sem nenhum monitor, simplesmente mapeando a GUI para uma região de memória para qualquer propósito).

    
por tripleee 29.05.2017 / 07:53