É possível escolher em qual X exibir uma instância do programa deve ser executada?

10

Se houver vários X Windows em execução em um sistema, é possível executar um programa em uma janela específica? Como você identificaria a janela e executaria o programa lá?

Estou assumindo que tenho as permissões necessárias para executar esse programa.

vfclists
fonte
possível duplicata de O que DISPLAY =: 0.0 realmente significa?
slm

Respostas:

15

Os programas X sabem em qual sessão X eles deveriam conversar olhando a DISPLAYvariável de ambiente.

Primeiro, você precisará descobrir o que DISPLAYestá definido na sessão X em que deseja que seu programa seja executado. Faça isso emitindo o comando echo $DISPLAYdentro de um terminal X nessa sessão X. Normalmente, obter algo como :0.0é emitido.

Digamos que você queira iniciar o excelente programa xclockem sua sessão X onde DISPLAYestá :0.0, mas deseja fazer isso no console. Você pressiona Alt-Ctrl-F1 para alternar para esse console e, em seguida, digita:

DISPLAY=:0.0 xclock   # variables set w/ a command are local to that command

Então você volta ao X pressionando Alt-Ctrl-F7 ou Alt-Ctrl-F8 (ou talvez alguma outra tecla F, dependendo do seu sabor do Linux) e assiste ao novo belo relógio de parede que você tem lá.

Na verdade, você poderia ter executado o comando acima em qualquer shell da mesma máquina (via SSH, em qualquer sessão X, em qualquer console etc.) - o fato de que você especificou DISPLAY=:0.0antes do comando significa que a xclockjanela sempre aparecerá a mesma sessão X.

De fato - além do fato de os programas X analisarem - não há nada de especial nessa DISPLAYvariável. Normalmente, quando você inicia programas a partir de um terminal X, eles começam no lugar certo, porque DISPLAYjá foi definido para você.

Em vez de usar o comando acima, você também pode dividi-lo em dois pela primeira configuração DISPLAYe depois executando xclock. Nesse caso, a DISPLAYconfiguração persistirá até você fechar esse shell e todos os programas X subseqüentes iniciados a partir daí serão abertos na mesma sessão X que xclock.

                      # variables set w/o a command are local to the shell,
export DISPLAY=:0.0   # unless exported
xclock
zrajm
fonte
1
Observe que o último bit não funcionará, a menos que você exporte a variável shell para o ambiente primeiro.
Ignacio Vazquez-Abrams,
Eu acho DISPLAYque será definido para exportar por padrão, uma vez que é importado pelo shell (funciona em ambos zshe dashpara mim sem usar export). Mas, sim, se você não conseguir que a versão de duas linhas funcione, tente substituir DISPLAY=:0.0por export DISPLAY=:0.0.
Zrajm 19/11/2013
1

Normalmente, os programas clientes X usam a DISPLAYvariável de ambiente para saber a qual servidor X se conectar. Alguns programas também aceitam um parâmetro de linha de comando ( -displayou algo semelhante) que pode ser usado para substituir a DISPLAYvariável de ambiente.

Laszlo Valko
fonte