Qu'est-ce que la variable d'environnement $ DISPLAY?

42

Je suis nouveau dans les scripts shell. Je ne comprends pas ce qu'est la variable environnementale $DISPLAY .

J'ai Ubuntu 13.10 et j'utilise /bin/bash shell. J'ai deux moniteurs.

Questions:

  1. La commande echo $DISPLAY affichera :0.0 sur ma machine (sur les deux moniteurs). Qu'est-ce que cela signifie?

  2. Dans quels cas la variable $DISPLAY sera-t-elle vide ou NULL?

  3. Y a-t-il des articles ou des tutoriels à ce sujet?

posée Chandrayya G K 10.03.2014 - 14:50
la source

4 réponses

65

Le mot magique dans le système de fenêtre X est DISPLAY. Un affichage est constitué de:

  • un clavier,
  • une souris
  • et un écran.

Un affichage est géré par un programme serveur, appelé serveur X. Le serveur offre des fonctionnalités d'affichage à d'autres programmes qui s'y connectent.

Le serveur distant sait où il doit rediriger le trafic réseau X via la définition de la variable d’environnement DISPLAY qui pointe généralement vers un serveur X Display situé sur votre ordinateur local.

La valeur de la variable d'environnement d'affichage est la suivante:

hostname:D.S

où:

nom_hôte est le nom de l'ordinateur sur lequel le serveur X est exécuté. Un nom d'hôte omis signifie l'hôte local.

D est un numéro de séquence (généralement 0). Il peut être modifié si plusieurs écrans sont connectés à un ordinateur.

S est le numéro de l'écran. Un affichage peut effectivement avoir plusieurs écrans. En général, il n’ya qu’un seul écran où 0 est la valeur par défaut.

Exemple de valeurs

localhost:4
google.com:0
:0.0

hostname:D.S signifie que l'écran S est affiché à l'écran D du nom d'hôte de l'hôte; le serveur X pour cet affichage écoute le port TCP 6000 + D.

host/unix:D.S signifie l'écran S sur l'affichage D de l'hôte hôte; le serveur X pour cet affichage écoute le socket de domaine UNIX /tmp/.X11-unix/XD (il est donc uniquement accessible depuis l'hôte).

:D.S est équivalent à host / unix: D.S, où host est le nom d'hôte local.

: 0.0 signifie que nous parlons du premier écran attaché à votre premier affichage sur votre hôte local

En savoir plus ici et ici et ici .

Depuis une page de manuel X (7):

  

Du point de vue de l'utilisateur, chaque serveur X a un nom d'affichage   de la forme:

     

nom d'hôte: displaynumber.screennumber

     

Cette information est utilisée par l'application pour déterminer comment   connecter au serveur et quel écran utiliser par défaut (sur   affiche avec plusieurs moniteurs):

     

hostname Le nom d’hôte spécifie le nom de la machine à laquelle le   l'affichage est physiquement connecté. Si le nom d'hôte n'est pas donné, le   moyen le plus efficace de communiquer avec un serveur sur la même machine   sera utilisé. displaynumber La phrase "display" est généralement utilisée pour   se référer à la collection de moniteurs qui partagent un clavier commun et   pointeur (souris, tablette, etc.). La plupart des postes de travail ont tendance à n'en avoir qu'un   clavier, et par conséquent, un seul écran. Systèmes plus grands et multi-utilisateurs,   cependant, ont souvent plusieurs affichages de sorte que plus d'une personne   peut faire du travail graphique à la fois. Pour éviter toute confusion, chaque affichage   sur une machine est assigné un numéro d'affichage (commençant à 0) lorsque le X   le serveur pour cet affichage est démarré. Le numéro d'affichage doit toujours être   donné dans un nom d'affichage. nombre d'écrans Certains écrans partagent un seul   clavier et pointeur entre deux ou plusieurs moniteurs. Depuis chaque moniteur   possède son propre ensemble de fenêtres, un numéro d'écran est attribué à chaque écran   (commençant à 0) lorsque le serveur X pour cet affichage est démarré. Si la   le numéro d'écran n'est pas donné, l'écran 0 sera utilisé.

    
réponse donnée Maythux 10.03.2014 - 14:52
la source
3

Les réponses existantes ne permettent pas d’aborder la situation dans son ensemble.

Si vous n’utilisez pas d’environnement graphique (c.-à-d. que vous vous connectez à la console système sans Windows, etc. ou que vous vous connectez à distance à partir d’un terminal texte sur SSH ou similaire, par exemple à partir PuTTY) alors aucune interface graphique n'est impliquée, et DISPLAY sera généralement non défini. Votre seul moyen de communiquer avec l'ordinateur est la ligne de commande (bien qu'il puisse y avoir des façons de passer à une session GUI si vous savez comment).

Si vous vous connectez sur la console avec une interface graphique (sur Ubuntu, généralement l’appareil GDM est utilisé) ou un terminal graphique (par exemple, un ordinateur Windows exécutant eXceed ou mobaX, ou un logiciel de bureau distant comme un VNC) client) la variable DISPLAY est configurée par le programme qui gère votre session graphique pour indiquer aux clients graphiques les périphériques d'E / S auxquels se connecter.

Traditionnellement, l’interface graphique d’un ordinateur Ubuntu exécutait X.org, une implémentation X11, mais plus récemment, Canonical a introduit un remplacement modernisé appelé Mir; et encore plus récemment, je crois que Mir sera abandonné dans en faveur d'un autre projet avec des objectifs largement similaires, appelé Wayland . Ces remplacements visent à réduire la complexité d'une pile X11 complète, ce que nous n'entrerons pas ici - ils respectent la même convention DISPLAY , ce dont nous discutons après tout.

Sur X11, la partie hôte de DISPLAY pourrait être un serveur distant et vous utiliseriez votre ordinateur Ubuntu comme un "terminal graphique" pour accéder aux fichiers et aux programmes sur ce serveur distant (auquel cas votre ordinateur est le " serveur "qui sert un clavier, une souris et un ou plusieurs périphériques d’affichage aux programmes" clients "exécutés sur le serveur distant. Plus communément, le serveur X11 (ou Mir ou Wayland) et les programmes clients (un gestionnaire de bureau et divers clients graphiques tels qu'un navigateur Web, un client de messagerie, un programme de calendrier, etc.) fonctionnent tous sur votre ordinateur. Cela est indiqué par la partie "serveur" de la valeur DISPLAY , qui dans ce dernier cas est généralement vide (ce qui implique la valeur par défaut, localhost ).

Un serveur X11 peut exécuter une ou plusieurs sessions graphiques - par exemple, votre connexion à la console et une session VNC distante peuvent être exécutées en même temps. Dans ce cas (si elles sont gérées par la même instance de serveur X11), vous avez plusieurs "affichages" en termes X11. En pratique, une session (un événement de connexion et l'instance de bureau issue de cette session) est un affichage dans X11.

Un tel affichage peut avoir un ou plusieurs écrans. Traditionnellement, cela signifiait un seul moniteur, même si l’architecture originale avait des traits malheureux tels que l’impossibilité de déplacer une fenêtre d’un écran à un autre. Des add-ons comme Xinerama et Xrandr ont encore compliqué la situation au point où un écran connecte souvent plusieurs moniteurs de différentes manières.

Si vous avez joué avec des systèmes à plusieurs moniteurs, vous avez probablement découvert que vous pouvez organiser les moniteurs de différentes manières et obtenir une zone rectangulaire où vos moniteurs affichent certaines parties et d'autres ne sont affectés à aucun moniteur. Ceci est "l'écran" que X11 crée, et si vous avez plus d'une carte d'affichage, vous pouvez avoir plusieurs de ces écrans, chacun assigné à un ou plusieurs moniteurs (ou en théorie, fonctionnant sans moniteur; Xvfb l'exploite pour permettre vous devez exécuter X11 sans aucun moniteur, en mappant simplement l'interface graphique à une région de mémoire pour n'importe quel but).

    
réponse donnée tripleee 29.05.2017 - 07:53
la source
2

De lien :

Variable-DISPLAY

Exemple de valeurs:

:0.0
localhost:10.0
terminal01:0.0

À quoi cela sert-il?

  

Cette variable est utilisée pour indiquer aux applications graphiques où afficher l’interface utilisateur graphique réelle, la valeur se compose de 3 parties: Un nom d’hôte suivi de deux points (:), un numéro d’affichage suivi d’un point (.) et un numéro d'écran.

     

La partie nom-hôte peut être utilisée pour envoyer la sortie graphique à une machine distante via le réseau. Il peut être omis lorsque la sortie est destinée à un serveur X exécuté sur la machine locale. Le numéro d'affichage permet de sélectionner plusieurs serveurs X exécutés sur la même machine (Ubuntu utilise plusieurs serveurs X pour activer plusieurs sessions de bureau graphiques).

     

Bien que le numéro d'écran soit utilisé pour sélectionner plusieurs écrans physiques gérés par le même serveur X, il est rarement défini sur autre chose que "0". Le réglage manuel de la valeur de la variable d'environnement "DISPLAY" est rarement nécessaire car il peut être ajusté automatiquement et intelligemment par de nombreuses applications telles que "GDM" et "SSH" si nécessaire.

    
réponse donnée Pandya 07.09.2014 - 10:46
la source
2
  

echo $ DISPLAY imprimera: 0.0 sur ma machine (sur les deux moniteurs). Quelle   cela signifie?

: 0.0 signifie le numéro d’affichage 0 et le numéro d’écran 0

  

Dans ce cas, $ DISPLAY sera vide ou NULL?

En cas d'erreur dans votre $ DISPLAY et que cela ne se produit pas normalement

  

Y a-t-il des articles ou des tutoriels à ce sujet?

Certains tutoriels et ressources peuvent être trouvés ici:

réponse donnée user259474 18.03.2014 - 12:21
la source

Lire d'autres questions sur les étiquettes