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.
Respuestas:
Los programas X saben con qué sesión X deben hablar mirando la
DISPLAY
variable de entorno.Primero, deberá averiguar qué
DISPLAY
está configurado en la sesión X donde desea que se ejecute su programa. Haga esto emitiendo el comandoecho $DISPLAY
dentro de un terminal X en esa sesión X. Por lo general, se obtiene algo como:0.0
se genera.Digamos que desea iniciar el excelente programa
xclock
en su sesión X dondeDISPLAY
está:0.0
, pero desea hacerlo en la consola. Luego presiona Alt-Ctrl-F1 para cambiar a esa consola y luego escribe: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.0
antes del comando significa que laxclock
ventana siempre aparecerá en la misma sesión XDe hecho, aparte del hecho de que los programas X lo miran, la
DISPLAY
variable no tiene nada de especial . Normalmente, cuando inicia programas desde un terminal X, comienzan en el lugar correcto porqueDISPLAY
ya se ha configurado para usted.En lugar de utilizar el comando anterior, también puede dividirlo en dos configurando primero
DISPLAY
y luego ejecutandoxclock
. En este caso, laDISPLAY
configuració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 quexclock
.fuente
DISPLAY
que se configurará para exportar de forma predeterminada, ya que es importado por el shell (funciona en amboszsh
ydash
para mí sin usarexport
). Pero sí, si no puede hacer que la versión de dos líneas funcione, intente reemplazarDISPLAY=:0.0
conexport DISPLAY=:0.0
.Normalmente, los programas de cliente X usan la
DISPLAY
variable de entorno para saber a qué pantalla del servidor X conectarse. Algunos programas también aceptan un parámetro de línea de comandos (-display
o algo similar) que se puede utilizar para anular laDISPLAY
variable de entorno.fuente