De Posso especificar um `$DISPLAY` arbitrário?
Não confunda a exibição real (seu(s) monitor(es)), o servidor X11 ("display") e a maneira como ele é acessado por meio de soquetes ou outros meios : DISPLAY=:0 e DISPLAY=localhost:10 conforme encaminhado via ssh consulte o mesmo monitor/xserver, a mesma placa de vídeo e o mesmo monitor.
$DISPLAY
é fornecido para iniciar um servidor X. Especifica um soquete $DISPLAY
de escuta e um destino de renderização do servidor X ao mesmo tempo? Se sim, como consegue especificar dois tipos diferentes de coisas?
$DISPLAY
especifica um soquete. Por exemplo, se$DISPLAY
é:40
, corresponde a uma porta 6040 ou a um soquete de domínio unix com o nome 40.É o soquete que
$DISPLAY
especifica o soquete de escuta do servidor X?Também é
$DISPLAY
suposto especificar um destino de renderização (ou seja, um dispositivo de exibição ou seu emulador no qual o servidor X renderizará algo)?
É correto isso
X client <-> X server <-> rendering target
e um cliente X não pode se comunicar com um destino de renderização direta, mas indiretamente por meio de um servidor X?
Obrigado.
Não. Um servidor X fornece um endpoint de comunicação para clientes X. Os clientes X escolhem o servidor com o qual desejam se comunicar por meio de uma opção de linha de comando ou de uma variável de ambiente. Do ponto de vista do cliente, este é o "display" que ele usa, portanto, a opção geralmente é
-display
, a variável de ambiente é$DISPLAY
, e as funções de biblioteca relevantes têm "display" em seu nome.A comunicação pode ser feita pela rede (insegura e, principalmente, desabilitada hoje) ou localmente. A construção unix para fornecer os dois tipos de endpoints é chamada de "socket" (consulte Recursos
man 2 socket
). O valor "display" codifica (1) o host, (2) um número de exibição que é mapeado para números de porta conhecidos ou caminhos de domínio unix (para comunicação local), (3) o número da tela (hoje principalmente0
por padrão, porque a maioria dos servidores X não fornecem várias telas), no formatohostname_or_address:display_number.screen_number
.Muitos clientes podem se conectar ao mesmo "socket" fornecido por um único servidor, então
não faz sentido.
Editar
Supondo que você queira dizer "destino de renderização" "algum pedaço de hardware que pode ser exibido como gráficos em um monitor", então sim, isso está essencialmente correto.
No entanto, o servidor X não se comunica de alguma forma com o "destino de renderização", o servidor X assume o controle exclusivo do "destino de renderização" (geralmente, um pedaço de memória na placa gráfica que serve como framebuffer e um pedaço de hardware que exibe o framebuffer em um ou vários monitores, todos abstraídos através de várias camadas de driver e kernel).
Além disso, essa é a situação do protocolo X original. Com o advento das extensões OpenGL, o que acontece é que o cliente X pode usar uma extensão do protocolo X para obter acesso mais direto ao "destino de renderização" (o driver do kernel para a GPU), ignorando o servidor X. E hoje a maioria dos aplicativos usa OpenGL para acelerar os gráficos... e é por isso que você perde a aceleração de hardware assim que um cliente X se conecta pela rede a um servidor X em uma máquina diferente.