108 votes

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

Je suis nouveau dans le domaine des scripts Shell. Je ne comprends pas ce que le $DISPLAY La variable environnementale est.

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

Questions :

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

  2. Dans quels cas le $DISPLAY est vide ou NULL ?

  3. Existe-t-il des articles ou des tutoriels sur ce sujet ?

127voto

Maythux Points 77506

Le mot magique dans le système de fenêtre X est DISPLAY. Un affichage se compose (de manière simplifiée) de :

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

Un écran est géré par un programme serveur, appelé serveur X. Le serveur offre des capacités d'affichage aux 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 :

hostname:D.S

où :

Le nom d'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 varier si plusieurs écrans sont connectés à un ordinateur.

S est le numéro de l'écran. Un écran peut en fait avoir plusieurs écrans. Habituellement, il n'y a 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 l'écran S sur l'affichage D du nom d'hôte de l'hôte ; le serveur X pour cet affichage est à l'écoute au port TCP 6000+D.

host/unix:D.S signifie l'écran S sur l'écran D de l'hôte ; le serveur X pour cet écran est à l'écoute du socket de domaine UNIX /tmp/.X11-unix/XD (il n'est donc accessible que 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 dans votre hôte local.

Lire la suite ici : support.objectplanet.com y ici : superuser.com y ici : docstore.mik.ua .

Extrait d'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:numéro d'affichage.numéro d'écran

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

nom d'hôte Le nom d'hôte spécifie le nom de l'ordinateur vers lequel l'adresse de l'utilisateur doit être modifiée. l'écran est physiquement connecté. Si le nom d'hôte n'est pas indiqué, le moyen le plus efficace de communiquer avec un serveur sur la même machine. sera utilisée. displaynumber L'expression "écran" est généralement utilisée pour faire une collection de moniteurs qui partagent un clavier et un pointeur communs (souris, tablette, etc.). pointeur (souris, tablette, etc.). La plupart des stations de travail ont tendance à n'avoir qu'un seul clavier, et donc d'un seul écran. Les systèmes plus grands et multi-utilisateurs, Cependant, les systèmes multi-utilisateurs de plus grande taille disposent fréquemment de plusieurs écrans afin que plusieurs personnes puissent effectuer des travaux graphiques en même temps. peut effectuer des travaux graphiques en même temps. Pour éviter toute confusion, chaque écran sur une machine se voit attribuer un numéro d'affichage (commençant par 0) lorsque le serveur X pour cet écran est lancé. Le numéro d'affichage doit toujours être toujours être indiqué dans le nom de l'affichage. screennumber Certains affichages partagent un seul clavier et un seul clavier et un pointeur entre deux ou plusieurs moniteurs. Étant donné que chaque moniteur possède son propre ensemble de fenêtres, chaque écran se voit attribuer un numéro d'écran (commençant par 0) lorsque le serveur X de cet écran est démarré. Si le numéro d'écran numéro d'écran n'est pas indiqué, l'écran 0 est utilisé.

31voto

Victor Lin Points 3276

Les réponses existantes ne tiennent pas compte de la situation dans son ensemble.

Si vous n'utilisez pas d'environnement graphique (c'est-à-dire si vous vous connectez sur la console système sans Windows, etc., ou si vous vous connectez à distance à partir d'un terminal en mode texte via SSH ou similaire, par exemple à partir d'un ordinateur Windows exécutant PuTTY), aucune interface graphique n'est impliquée. DISPLAY sera généralement désactivé. Votre seul moyen de communiquer avec l'ordinateur est la ligne de commande (bien qu'il puisse y avoir des moyens de pivoter dans une session GUI si vous savez comment).

Si vous vous connectez à la console à l'aide d'une interface graphique (sur Ubuntu, on utilise généralement le greeter GDM) ou à l'aide d'un terminal graphique (par exemple à partir d'un ordinateur Windows exécutant eXceed ou mobaX, ou un logiciel de bureau à distance tel qu'un client VNC), l'option 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 fonctionnait avec X.org, une implémentation de X11, bien que plus récemment, un remplacement modernisé appelé Mir ait été introduit par Canonical ; et encore plus récemment, je crois que Mir sera abandonné au profit d'un autre projet aux objectifs largement similaires, appelé Wayland. . Ces remplacements ont pour but de réduire la complexité d'une pile X11 complète, que nous ne détaillerons pas ici - ils adhèrent aux mêmes principes que la pile X11. DISPLAY convention, qui est après tout ce dont nous discutons ici.

Sous 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 de ce serveur distant (dans ce cas, votre ordinateur est le "serveur" qui fournit un clavier, une souris et un ou plusieurs périphériques d'affichage aux programmes "clients" exécutés sur le serveur ... distant). Plus couramment, 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.) sont tous exécutés sur votre ordinateur. Cela est indiqué par la partie "serveur" de l'expression 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 (s'ils sont gérés par la même instance de serveur X11), vous avez plus d'un "affichage" en termes de X11. En pratique, une session (un événement de connexion et l'instance de bureau qui en découle) constitue un seul affichage dans X11.

Un tel affichage peut comporter un ou plusieurs écrans. Traditionnellement, cela signifiait un seul moniteur, bien que l'architecture d'origine présentait quelques caractéristiques malheureuses telles que l'impossibilité de déplacer une fenêtre d'un écran à l'autre. Des modules complémentaires tels que Xinerama et Xrandr ont rendu la situation encore plus confuse, au point qu'un écran est souvent relié à plusieurs moniteurs de diverses manières.

Si vous avez joué avec des systèmes à plusieurs moniteurs, vous avez probablement découvert que vous pouvez disposer les moniteurs de différentes manières et vous retrouver avec une zone rectangulaire dont certaines parties sont affichées par vos moniteurs et d'autres ne sont assignées à aucun moniteur. C'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 exploite ceci pour vous permettre de faire fonctionner X11 sans aucun moniteur, en mappant simplement l'interface graphique à une région de la mémoire pour n'importe quel but).

5voto

Pandya Points 32443

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

Variable- DISPLAY

Valeurs Exemple :

:0.0
localhost:10.0
terminal01:0.0

A quoi ça sert ?

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 de l'hôte peut être utilisée pour que la sortie graphique soit envoyée à une machine distante sur le réseau. Elle peut être omise lorsque la sortie est destinée à un serveur X fonctionnant sur la machine locale. Le numéro d'affichage permet de choisir parmi plusieurs serveurs X fonctionnant sur la même machine (Ubuntu utilise plusieurs serveurs X pour permettre plusieurs sessions de bureau graphique).

Bien que le numéro d'écran soit utilisé pour choisir parmi plusieurs écrans physiques gérés par le même serveur X, il est rarement défini à une valeur autre que "0" de nos jours. La définition manuelle de la valeur de la variable d'environnement "DISPLAY" est rarement nécessaire de nos jours car elle peut être automatiquement et intelligemment ajustée par de nombreuses applications telles que "GDM" et "SSH" lorsque cela est nécessaire.

4voto

echo $DISPLAY affichera :0.0 sur mon ordinateur (sur les deux moniteurs). Qu'est-ce que 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

Existe-t-il des articles ou des tutoriels sur ce sujet ?

Vous trouverez des tutoriels et des ressources ici :

2voto

Terrance Points 35422

Récemment, j'ai créé des scripts pour le lancement automatique de Firefox à une heure précise afin de me rappeler de pointer à l'arrivée et au départ depuis que je travaille à la maison. J'ai découvert que le DISPLAY est déterminée par le gestionnaire d'affichage, c'est-à-dire GDM3, LightDM, etc. J'ai également découvert que la variable :0 o :1 est déterminé par AutomaticLogin. Dans GDM3, si j'ai désactivé l'AutomaticLogin, alors mes DISPLAY La variable est :1 . Si j'ai activé la fonction AutomaticLogin, DISPLAY est maintenant :0 . Ces chiffres ne changent pas, quel que soit le nombre de moniteurs connectés à mon système.

La raison pour laquelle cela est important est que j'utilise cron pour lancer un script pour moi à certains moments pour lancer Firefox. cron n'a pas les variables définies, en fait elles sont très limitées, donc en haut de mon script après ma ligne SheBang j'ai cette ligne pour exporter mon DISPLAY type. Sans exporter le DISPLAY dans le script qui est appelé par crontab Firefox ne se lancera pas et affichera un message d'erreur puisqu'il n'y a pas d'adresse IP. DISPLAY est réglé.

#This line checks if automatic login is disabled in gdm3 and sets DISPLAY.
grep "# AutomaticLogin" /etc/gdm3/custom.conf >/dev/null && export DISPLAY=":1" || export DISPLAY=":0"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X