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:
Os programas X sabem em qual sessão X eles deveriam conversar olhando a
DISPLAY
variável de ambiente.Primeiro, você precisará descobrir o que
DISPLAY
está definido na sessão X em que deseja que seu programa seja executado. Faça isso emitindo o comandoecho $DISPLAY
dentro de um terminal X nessa sessão X. Normalmente, obter algo como:0.0
é emitido.Digamos que você queira iniciar o excelente programa
xclock
em sua sessão X ondeDISPLAY
está:0.0
, mas deseja fazer isso no console. Você pressiona Alt-Ctrl-F1 para alternar para esse console e, em seguida, digita: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.0
antes do comando significa que axclock
janela 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
DISPLAY
variável. Normalmente, quando você inicia programas a partir de um terminal X, eles começam no lugar certo, porqueDISPLAY
já foi definido para você.Em vez de usar o comando acima, você também pode dividi-lo em dois pela primeira configuração
DISPLAY
e depois executandoxclock
. Nesse caso, aDISPLAY
configuraçã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 quexclock
.fonte
DISPLAY
que será definido para exportar por padrão, uma vez que é importado pelo shell (funciona em amboszsh
edash
para mim sem usarexport
). Mas, sim, se você não conseguir que a versão de duas linhas funcione, tente substituirDISPLAY=:0.0
porexport DISPLAY=:0.0
.Normalmente, os programas clientes X usam a
DISPLAY
variável de ambiente para saber a qual servidor X se conectar. Alguns programas também aceitam um parâmetro de linha de comando (-display
ou algo semelhante) que pode ser usado para substituir aDISPLAY
variável de ambiente.fonte