É 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.


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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.