¿Qué es la variable de entorno $ DISPLAY?


75

Soy nuevo en los scripts de shell. No entiendo cuál es la $DISPLAYvariable ambiental.

Tengo Ubuntu 13.10 y uso /bin/bashshell. Tengo dos monitores

Preguntas:

  1. El comando echo $DISPLAYse imprimirá :0.0en mi máquina (en ambos monitores). ¿Qué significa esto?

  2. ¿En qué casos la $DISPLAYvariable estará en blanco o NULL?

  3. ¿Hay algún artículo o tutorial sobre esto?


Hoy echo $DISPLAYestá imprimiendo :0NO:0.0
Chandrayya GK

marque esto ayudará en caso de espacio en blanco o errores: askubuntu.com/questions/432610/…
Maythux

Respuestas:


86

La palabra mágica en el sistema de ventanas X es PANTALLA. Una pantalla consta (simplificada) de:

  • un teclado,
  • un ratón
  • y una pantalla

Una pantalla es administrada por un programa de servidor, conocido como un servidor X. El servidor sirve para mostrar capacidades a otros programas que se conectan a él.

El servidor remoto sabe dónde debe redirigir el tráfico de red X a través de la definición de la variable de entorno DISPLAY que generalmente apunta a un servidor X Display ubicado en su computadora local.

El valor de la variable de entorno de visualización es:

hostname:D.S

dónde:

hostname es el nombre de la computadora donde se ejecuta el servidor X. Un nombre de host omitido significa localhost.

D es un número de secuencia (generalmente 0). Se puede variar si hay varias pantallas conectadas a una computadora.

S es el número de pantalla. Una pantalla puede tener múltiples pantallas. Por lo general, solo hay una pantalla donde 0 es el valor predeterminado.

Ejemplo de valores

localhost:4
google.com:0
:0.0

hostname:D.Ssignifica la pantalla S en la pantalla D del nombre de host del host; el servidor X para esta pantalla está escuchando en el puerto TCP 6000 + D.

host/unix:D.Ssignifica la pantalla S en la pantalla D del host host; el servidor X para esta pantalla está escuchando en el socket de dominio UNIX /tmp/.X11-unix/XD (por lo que solo se puede acceder desde el host).

:D.S es equivalente a host / unix: DS, donde host es el nombre de host local.

: 0.0 significa que estamos hablando de la primera pantalla adjunta a su primera pantalla en su host local

Lea más aquí y aquí y aquí .

Desde una página de manual X (7):

Desde la perspectiva del usuario, cada servidor X tiene un nombre para mostrar del formulario:

nombre de host: displaynumber.screennumber

La aplicación utiliza esta información para determinar cómo debe conectarse al servidor y qué pantalla debe usar de forma predeterminada (en pantallas con varios monitores):

nombre de host El nombre de host especifica el nombre de la máquina a la que está conectada físicamente la pantalla. Si no se proporciona el nombre de host, se utilizará la forma más eficiente de comunicarse con un servidor en la misma máquina. displaynumber La frase "display" se usa generalmente para referirse a una colección de monitores que comparten un teclado y un puntero comunes (mouse, tableta, etc.). La mayoría de las estaciones de trabajo tienden a tener solo un teclado y, por lo tanto, solo una pantalla. Sin embargo, los sistemas más grandes y multiusuario con frecuencia tienen varias pantallas para que más de una persona pueda hacer trabajos gráficos a la vez. Para evitar confusiones, a cada pantalla de una máquina se le asigna un número de pantalla (que comienza en 0) cuando se inicia el servidor X para esa pantalla. El número de pantalla siempre se debe dar con un nombre para mostrar. número de pantalla Algunas pantallas comparten un solo teclado y puntero entre dos o más monitores. Como cada monitor tiene su propio conjunto de ventanas, a cada pantalla se le asigna un número de pantalla (que comienza en 0) cuando se inicia el servidor X para esa pantalla. Si no se proporciona el número de pantalla, se usará la pantalla 0.


Cuando este $ DISPLAY será nulo o EN BLANCO.
Chandrayya GK

En condiciones normales Esto no debe suceder a menos que haya un problema en su pantalla. En general, un reinicio de su administrador de pantalla resolverá el problema. Pero esta no es una acción predeterminada.
Maythux


@ChandrayyaGK Por ejemplo, cuando no estoy usando ningún entorno de escritorio como GNOME o KDE, pero inicie sesión directamente con TTY (like /dev/tty1), obtuve el espacio en blanco $DISPLAY.
Franklin Yu

@Maythux veces el número de pantalla parece ser omitido al estar 0. Mi GNOME da :0para $DISPLAY.
Franklin Yu

10

Las respuestas existentes no abordan la imagen más amplia.

Si no está utilizando un entorno gráfico (es decir, está iniciando sesión en la consola del sistema sin ventanas, etc.) o si está iniciando sesión de forma remota desde un terminal de solo texto a través de SSH o similar, como desde una computadora con Windows que ejecuta PuTTY) no hay interfaz gráfica de usuario involucrada y, por DISPLAYlo general, no se configurará. Su único medio de comunicarse con la computadora es la línea de comando (aunque puede haber formas de pasar a una sesión de GUI si sabe cómo hacerlo).

Si está iniciando sesión en la consola con una interfaz gráfica (en Ubuntu, generalmente se usa el GDM greeter) o utilizando un terminal gráfico (como desde una computadora con Windows que ejecuta eXceed o mobaX, o software de escritorio remoto como un cliente VNC) DISPLAYEl programa configura la variable que administra su sesión gráfica para indicar a los clientes gráficos a qué dispositivos de E / S conectarse.

Tradicionalmente, la GUI en una computadora Ubuntu ejecutaba X.org, una implementación X11, aunque más recientemente, Canonical introdujo un reemplazo modernizado llamado Mir; e incluso más recientemente, creo que Mir será abandonada en favor de otro proyecto con objetivos ampliamente similares llamados Wayland . Estos reemplazos están destinados a reducir la complejidad de una pila X11 completa, a la que no vamos a entrar aquí; se adhieren a la misma DISPLAYconvención, que es, después de todo, lo que estamos discutiendo aquí.

En X11, la parte del host DISPLAYpodría ser un servidor remoto, y usaría su computadora Ubuntu como una "terminal gráfica" para acceder a archivos y programas en ese servidor remoto (en cuyo caso su computadora es el "servidor" que sirve un teclado , un mouse y uno o más dispositivos de visualización para programas "cliente" que se ejecutan en el servidor remoto ...). Más comúnmente, el servidor X11 (o Mir, o Wayland) y los programas cliente (un administrador de escritorio y varios clientes gráficos como un navegador web, un cliente de correo electrónico, un programa de calendario, etc.) se ejecutan en su computadora. Esto se indica mediante la parte del "servidor" del DISPLAYvalor, que en este último caso suele estar vacío (lo que implica el valor predeterminado localhost).

Un servidor X11 puede ejecutar una o más sesiones gráficas; por ejemplo, el inicio de sesión de su consola y una sesión remota de VNC podrían ejecutarse al mismo tiempo. En este caso (si son administrados por la misma instancia del servidor X11), tiene más de una "pantalla" en términos X11. En la práctica, una sesión (un evento de inicio de sesión y la instancia de escritorio generada a partir de esto) es una pantalla en X11.

Una de esas pantallas puede tener una o más pantallas. Tradicionalmente, esto significaba un monitor, aunque la arquitectura original tenía algunos rasgos desafortunados, como la incapacidad de mover una ventana de una pantalla a otra. Complementos como Xinerama y Xrandr enturbiaron aún más la situación hasta el punto en que una pantalla a menudo conecta múltiples monitores de varias maneras.

Si ha jugado con sistemas de múltiples monitores, probablemente haya descubierto que puede organizar los monitores de varias maneras y terminar con un área rectangular donde sus monitores muestran algunas partes y otras partes no están asignadas a ningún monitor. Esta es la "pantalla" que crea X11, y si tiene más de una tarjeta de visualización, puede tener varias de estas pantallas, cada una asignada a uno o más monitores (o en teoría, ejecutándose sin un monitor; Xvfb explota esto para permitir ejecutar X11 sin ningún monitor, simplemente mapeando la GUI a una región de memoria para cualquier propósito).


Mir ha sido abandonado junto con Unity. Durante mucho tiempo, lightdm en lugar de gdm fue el valor predeterminado, ¡pero tal vez esa parte de su respuesta se haya vuelto correcta nuevamente como lo era antes del ascenso de Unity! Uso MATE, así que no puedo verificar trivialmente ...
Zanna

Estaba ejecutando Linux desde la consola (sin Windows) y eso explica todo. Tiene sentido: p
Jean-Francois T.

3

Desde https://help.ubuntu.com/community/EnvironmentVariables :

Variable- PANTALLA

Ejemplo de valores:

:0.0
localhost:10.0
terminal01:0.0

Para que sirve

Esta variable se utiliza para indicar a las aplicaciones gráficas dónde mostrar la interfaz gráfica de usuario real, el valor consta de 3 partes: un nombre de host seguido de dos puntos (:), un número de pantalla seguido de un punto (.) Y una pantalla número.

La parte del nombre de host se puede usar para enviar la salida gráfica a una máquina remota a través de la red. Se puede omitir cuando la salida está destinada a un servidor X que se ejecuta en la máquina local. El número de pantalla permite seleccionar entre múltiples servidores X que se ejecutan en la misma máquina (Ubuntu usa múltiples servidores X para habilitar múltiples sesiones gráficas de escritorio).

Aunque el número de pantalla se usa para seleccionar entre múltiples pantallas físicas que son administradas por el mismo servidor X, hoy en día rara vez se establece en otra cosa que no sea "0". Hoy en día, rara vez se necesita configurar manualmente el valor de la variable de entorno "DISPLAY", ya que muchas aplicaciones, como "GDM" y "SSH", pueden ajustarlo de forma automática e inteligente cuando sea necesario.


3

echo $ DISPLAY imprimirá: 0.0 en mi máquina (en ambos monitores). ¿Lo que esto significa?

: 0.0 significa número de pantalla 0 y número de pantalla 0

¿En qué caso $ DISPLAY estará en blanco o NULL?

En caso de error en su $ DISPLAY y esto no sucede normalmente

¿Hay algún artículo o tutorial sobre esto?

Algunos tutoriales y recursos se pueden encontrar aquí:

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.