¿Es posible elegir en qué pantalla X debe ejecutarse una instancia de programa?

10

Si hay múltiples X Windows ejecutándose en un sistema, ¿es posible hacer que un programa se ejecute en una ventana en particular? ¿Cómo identificarías la ventana y conseguirías que el programa se ejecute allí?

Supongo que tengo todos los permisos necesarios para ejecutar dicho programa.

vfclists
fuente

Respuestas:

15

Los programas X saben con qué sesión X deben hablar mirando la DISPLAYvariable de entorno.

Primero, deberá averiguar qué DISPLAYestá configurado en la sesión X donde desea que se ejecute su programa. Haga esto emitiendo el comando echo $DISPLAYdentro de un terminal X en esa sesión X. Por lo general, se obtiene algo como :0.0se genera.

Digamos que desea iniciar el excelente programa xclocken su sesión X donde DISPLAYestá :0.0, pero desea hacerlo en la consola. Luego presiona Alt-Ctrl-F1 para cambiar a esa consola y luego escribe:

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

Luego regresas a X presionando Alt-Ctrl-F7 o Alt-Ctrl-F8 (o tal vez alguna otra tecla F, dependiendo de tu sabor de Linux) y miras el nuevo reloj de pared bonito que tienes allí.

De hecho, podría haber ejecutado el comando anterior en cualquier shell en esa misma máquina (a través de SSH, en cualquier sesión X, en cualquier consola, etc.); el hecho de que haya especificado DISPLAY=:0.0antes del comando significa que la xclockventana siempre aparecerá en la misma sesión X

De hecho, aparte del hecho de que los programas X lo miran, la DISPLAYvariable no tiene nada de especial . Normalmente, cuando inicia programas desde un terminal X, comienzan en el lugar correcto porque DISPLAYya se ha configurado para usted.

En lugar de utilizar el comando anterior, también puede dividirlo en dos configurando primero DISPLAYy luego ejecutando xclock. En este caso, la DISPLAYconfiguración persistirá hasta que cierre ese shell, y todos los programas X posteriores que se inicien desde allí se abrirán en la misma sesión X que xclock.

                      # variables set w/o a command are local to the shell,
export DISPLAY=:0.0   # unless exported
xclock
zrajm
fuente
1
Tenga en cuenta que el último bit no funcionará a menos que primero exporte la variable de shell al entorno.
Ignacio Vazquez-Abrams
Creo DISPLAYque se configurará para exportar de forma predeterminada, ya que es importado por el shell (funciona en ambos zshy dashpara mí sin usar export). Pero sí, si no puede hacer que la versión de dos líneas funcione, intente reemplazar DISPLAY=:0.0con export DISPLAY=:0.0.
zrajm
1

Normalmente, los programas de cliente X usan la DISPLAYvariable de entorno para saber a qué pantalla del servidor X conectarse. Algunos programas también aceptan un parámetro de línea de comandos ( -displayo algo similar) que se puede utilizar para anular la DISPLAYvariable de entorno.

Laszlo Valko
fuente