De https://unix.stackexchange.com/a/17278/674
Se você executar
ssh -X localhost
, deverá ver que$DISPLAY
é (provavelmente)localhost:10.0
. Compare com:0.0
, que é o valor quando você não está conectado por SSH. (A.0
parte pode ser omitida; é um número de tela, mas várias telas raramente são usadas.) Existem duas formas de exibição X que você provavelmente encontrará:
- Exibições locais, sem nada antes do
:
.- TCP é exibido, com um nome de host antes do
:
.Com
ssh -X localhost
o , você pode acessar o servidor X pelas duas telas , mas as aplicações usarão um método diferente::NUMBER
acessa o servidor via sockets locais e memória compartilhada, enquantoHOSTNAME:NUMBER
acessa o servidor via TCP, que é mais lento e desabilita algumas extensões.
Quais são as relações e diferenças entre o servidor X, display e tela?
O que significa "o servidor X através de ambas as telas"? Um "display" significa um servidor de exibição, ou seja, um servidor X, então dois "displays" significam dois servidores de exibição, ou seja, dois servidores X.
O que significa "várias telas"? Uma "tela" significa um monitor de exibição?
Obrigado.
Vou dar um exemplo visual para explicar o básico do X11 e o que está acontecendo em segundo plano:
fonte
Neste exemplo, você tem um servidor X11 local com duas "telas" em seu hostA. Normalmente, haveria apenas um servidor com uma tela (:0.0), que se estende por todos os seus monitores (torna os aplicativos de vários monitores muito mais fáceis). hostB tem dois servidores X, onde o segundo não tem exibição física (por exemplo, framebuffer virtual para VNC). hostC é um servidor headless sem monitores.
terminal 1a, 2a, 5a, 6a : Se você abrir um terminal local e definir a exibição para :0.0 (padrão) ou :0.1, as chamadas de desenho para seus programas gráficos serão enviadas ao servidor X local diretamente pela memória.
terminal 1b, 5b : Se você ssh em algum servidor, geralmente a exibição será definida automaticamente para o servidor X local, se houver um disponível. Caso contrário, ele não será definido (motivo, consulte o terminal 3).
terminal 2b, 6b : Se você ssh em um servidor e habilita o encaminhamento X11 através do parâmetro "-X", um túnel é criado automaticamente através da conexão ssh. Neste caso, a porta TCP 6010 (6000+display#) no hostB está encaminhando o tráfego para a porta 6000 (X server #0) no hostA. Normalmente, as primeiras 10 exibições são reservadas para servidores "reais", portanto, os remapeamentos ssh exibem #10 (o próximo usuário que se conecta com ssh -X enquanto você está logado, obteria #11). Não há nenhum servidor X adicional iniciado e as permissões para o servidor X #0 no hostA são tratadas automaticamente pelo ssh.
terminal 4 : Se você adicionar um nome de host (por exemplo, localhost) na frente do display/screen#, o X11 também se comunicará via TCP em vez da memória.
terminal 3 : Você também pode enviar comandos X11 diretamente pela rede, sem configurar um túnel ssh primeiro. O principal problema aqui é que sua rede/firewall/etc. precisa ser configurado para permitir isso (cuidado com o X11 praticamente não é criptografado), e as permissões para o servidor X precisam ser concedidas manualmente (xhosts ou Xauthority).
Para responder suas perguntas
Um display apenas se refere a algum servidor X em algum lugar . O termo "ambos os monitores" estava se referindo a ":0.0" no computador local ("exibição local") sendo igual a "localhost:10.0" no ssh-target ("exibição TCP"). "screens" está se referindo aos diferentes monitores virtuais (framebuffers) do servidor X. "localhost:10.0" está redirecionando apenas para o servidor X local, não há servidor X iniciado no ssh-target.