Comment puis-je spécifier un affichage?
Lorsque j'exécute certains programmes sur SSH, tels que firefox &
, j'obtiens une erreur
Error: no display specified
Je voudrais ouvrir de nombreux écrans, montrant toujours le stdout
de chaque programme.
Question Initiale: Comment puis-je spécifier l'affichage pour obtenir un programme affiché?
Pablo Santa Cruz me donne le code suivant comme solution. Je ne comprends pas.
$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &
Quelles sont yourmachine
et yourdomain.com
dans la commande?
11 réponses
La façon dont X fonctionne est la même que celle de tout programme réseau. Vous avez un serveur de description (dans ce cas, le serveur d'affichage X) qui s'exécute sur une machine spécifique, et vous avez des clients X (comme firefox) qui essaient de se connecter à ce serveur pour afficher leurs informations.
Souvent (sur les machines" home"), le client et le serveur fonctionnent sur la même boîte et il n'y a qu'un seul serveur, mais X est assez puissant pour que cela n'ait pas besoin d'arriver. Il a été construit avec l' séparation serveur / client intégrée depuis le début.
Cela vous permet de faire des choses merveilleuses telles que vous connecter à votre boîte (en mode texte) à mi-chemin de la planète, lui dire que le serveur d'affichage est la boîte sur laquelle vous êtes actuellement et, voila, les fenêtres commencent soudainement à apparaître localement.
Pour un client d'interagir avec un utilisateur, il doit savoir comment trouver le serveur. Il y a un certain nombre de façons de le faire. De nombreux clients autorisent l'option -display
ou --display
à spécifiez-le:
xeyes -display paxbox1.paxco.com:0.0
Beaucoup utiliseront la variable d'environnement DISPLAY
Si un affichage n'est pas spécifiquement donné. Vous pouvez définir cette variable comme toute autre:
DISPLAY=paxbox1.paxco.com:0.0; export DISPLAY # in .profile
export DISPLAY=paxbox1.paxco.com:0.0 # in your shell
DISPLAY=paxbox1.paxco.com:0.0 firefox & # for that command (shell permitting)
La première partie de la variable DISPLAY
est juste l'adresse de la machine du serveur d'affichage. Il suit la même règle que toute autre adresse IP; il peut s'agir d'un nom DNS résoluble (y compris localhost
) ou d'une adresse IP spécifique (telle que 192.168.10.55).
La deuxième partie est spécifique à X. Il donne le x "display" (serveur X) numéro et le numéro de l'écran à utiliser. Le premier (numéro d'affichage) se réfère généralement à un groupe de périphériques contenant un ou plusieurs écrans mais avec un seul clavier et une seule souris (c'est-à-dire un seul flux d'entrée). Le numéro d'écran donne généralement l'écran spécifique au sein de ce groupe.
Un exemple serait:
+----------------------------------------+
|paxbox1.paxco.com| |
+-----------------+ |
| |
| +----------+----+ +----------+----+ |
| |Display :0| | |Display :1| | |
| +----------+ | +----------+ | |
| | | | | |
| | +-----------+ | | | |
| | |Screen :0.0| | | | |
| | +-----------+ | | | |
| | +-----------+ | | | |
| | |Screen :0.1| | | | |
| | +-----------+ | | | |
| | +-----------+ | | +-----------+ | |
| | |Screen :0.2| | | |Screen :1.0| | |
| | +-----------+ | | +-----------+ | |
| | +-----------+ | | +-----------+ | |
| | |Screen :0.3| | | |Screen :1.1| | |
| | +-----------+ | | +-----------+ | |
| | +-----------+ | | +-----------+ | |
| | | Keyboard | | | | Keyboard | | |
| | +-----------+ | | +-----------+ | |
| | +-----------+ | | +-----------+ | |
| | | Mouse | | | | Mouse | | |
| | +-----------+ | | +-----------+ | |
| +---------------+ +---------------+ |
| |
+----------------------------------------+
Ici, vous avez une seule machine (paxbox1.paxco.com
) avec deux serveurs d'affichage. Le premier a quatre écrans et le second en a deux. Les possibilités sont alors:
DISPLAY=paxbox1.paxco.com:0.0
DISPLAY=paxbox1.paxco.com:0.1
DISPLAY=paxbox1.paxco.com:0.2
DISPLAY=paxbox1.paxco.com:0.3
DISPLAY=paxbox1.paxco.com:1.0
DISPLAY=paxbox1.paxco.com:1.1
Selon où vous voulez que vos fenêtres réelles apparaissent et quels périphériques d'entrée vous souhaitez utiliser.
$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &
Lorsque vous vous connectez à une autre machine via SSH, vous pouvez activer X-Forwarding dans SSH, de sorte que X windows soit redirigé crypté via le tunnel SSH vers votre machine. Vous pouvez activer le transfert X en ajoutant -X
à la ligne de commande ssh ou en définissant ForwardX11 yes
dans votre fichier de configuration SSH.
Pour vérifier si le x-Forwarding a été configuré avec succès (le serveur peut ne pas l'autoriser), essayez simplement si echo $DISPLAY
génère quelque chose comme localhost:10.0
.
J'ai rencontré un problème similaire, alors peut-être que cette réponse aidera quelqu'un.
La raison de l'erreur Error: no display specified
est que Firefox est en cours de lancement, mais il n'y a pas de serveur X (GUI) en cours d'exécution sur l'hôte distant. Vous pouvez utiliser X11 forwarding pour exécuter Firefox sur L'hôte distant, mais l'afficher sur votre hôte local. Sur Mac OS X, vous devrez télécharger XQuartz afin d'utiliser X11 forwarding. Sans cela, vous n'aurez pas d'ensemble de variables $DISPLAY
, donc si vous essayez et echo $DISPLAY
, ce sera vide.
N'essayez pas de définir $DISPLAY manuellement lors de la connexion via SSH.
Si vous vous connectez via SSH -X
et que $DISPLAY reste vide, cela signifie généralement qu'aucun canal crypté n'a pu être établi.
Il vous manque probablement le paquet xauth
ou xorg-x11-xauth
. Essayez de l'installer sur la machine distante en utilisant:
sudo apt-get install xauth
Ou
sudo apt-get install xorg-x11-xauth
Après cette fin et redémarrez votre connexion SSH. N'oubliez pas d'utiliser SSH -X
pour que la sortie X Window soit transmise à votre machine.
Essayez à nouveau echo $DISPLAY
pour voir si $DISPLAY a été défini automatiquement par le démon SSH. Il devrait vous montrer une ligne avec une adresse IP et un port.
J'ai fait face à un problème similaire aujourd'hui. Alors, voici une solution simple: En faisant SSH à la machine, ajoutez simplement Ctrl - Y .
ssh user@ip_address -Y
Après la connexion, tapez firefox &
.
Et vous êtes bon pour aller.
Connectez-vous à votre serveur via
ssh -X root@yourIP
Éditez le fichier /etc/ssh/sshd_config et ajoutez-y cette ligne.
X11UseLocalhost no
Redémarrez sshd. pour CentOS (vérifiez votre distribution)
/sbin/service sshd restart
Vérifiez votre affichage
echo $DISPLAY
Vous devriez voir ceci
yourIP:10.0
Profitez
firefox
Même j'ai fait face à la même chose dans CentOS 6.8.
yum reinstall xorg*
Terminez votre session en cours et ouvrez une autre session dans un outil comme mobiXterm. Assurez-vous que la transmission X11 de la session est activée dans l'outil.
Je par vnc pour comprendre le X11 plus. Pour spécifier l'affichage pour obtenir un programme affiché, export DISPLAY = IP: DisplayNum.ScreenNum
Par exemple
vncserver :2
vncserver -list
echo '$DISPLAY'=$DISPLAY
export DISPLAY=:2 # export DISPLAY=IP:DisplayNum or export DISPLAY=:DisplayNum for localhost; So that can vnc connect and see the vnc desktop :2 if $DISPLAY is not :2.
echo '$DISPLAY'=$DISPLAY