2011-07-13 18:13:00 +0000 2011-07-13 18:13:00 +0000
117
117

Comment corriger une erreur "cannot open display" lors de l'ouverture d'un programme X après ssh'ing avec la redirection X11 activée ?

Après avoir lancé l'application X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) sur mon Mac (OS X 10.6.8), ouvert un terminal dans X11 et exécuté xhost +, j'ai ensuite ssh -Y sur ma VM Ubuntu 10.04 (fonctionnant sur VMware Fusion). Lorsque je lance gedit .bashrc (par exemple), j'obtiens :

(gedit:9510): Gtk-WARNING **: cannot open display:

set | grep DISPLAY ne renvoie rien.

Mais si je lance ssh -Y sur ma machine Ubuntu 11.04, gedit .bashrc fonctionne. echo $DISPLAY renvoie “localhost:10.0”.

J'ai essayé export DISPLAY=localhost:10.0 pendant qu'il était installé dans ma VM et qu'il tournait gedit .bashrc, mais j'ai obtenu :

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

Qu'est-ce qui pourrait être différent dans la configuration des deux machines Ubuntu différentes qui expliquerait pourquoi l'une fonctionne et l'autre pas ?

Update: Comme suggéré par Zoredache dans le commentaire ci-dessous, j'ai lancé sudo apt-get install xbase-clients, mais je continue à avoir le même problème.

Réponses (14)

62
62
62
2012-02-21 08:47:03 +0000

De xhost+ : Comment corriger l'erreur “Cannot Open Display” lors du lancement de l'interface graphique sur un serveur distant :

Réponse : Vous pouvez corriger l'erreur “Cannot open display” en suivant la procédure xhost mentionnée dans cet article.

Autoriser les clients à se connecter depuis n'importe quel hôte en utilisant xhost+

Exécuter la commande suivante pour désactiver le contrôle d'accès, par lequel vous pouvez autoriser les clients à se connecter depuis n'importe quel hôte.

$ xhost +

contrôle d'accès désactivé, les clients peuvent se connecter à partir de n'importe quel hôte

Activer le transfert X11

En faisant ssh, utilisez l'option -X pour activer le transfert X11.

$ ssh username@hostname -X

Activer le transfert X11 de confiance, en utilisant l'option -Y,

$ ssh username@hostname -Y

Ouvrir les applications GUI dans cet hôte

Après avoir ouvert la connexion ssh à l'hôte distant comme expliqué ci-dessus, vous pouvez ouvrir n'importe quelle application GUI qui l'ouvrira sans problème.

Si vous obtenez toujours l'erreur “cannot open display”, définissez la variable DISPLAY comme indiqué ci-dessous.

$ export DISPLAY='IP:0.0'

Note : IP est l'IP du poste de travail local où vous voulez que l'application GUI soit affichée.

49
49
49
2011-07-13 18:54:50 +0000

Vérifiez la configuration sshd_config du serveur (normalement /etc/ssh/sshd_config), et assurez-vous que l'option X11Forwarding est activée avec la ligne

X11Forwarding yes

Si X11Forwarding n'est pas spécifié, la valeur par défaut est no sur les machines Debian que je peux vérifier.

18
18
18
2012-06-29 20:44:03 +0000

J'ai également eu ce problème lorsque je me suis connecté à une VM Ubuntu depuis Mac OS X - il ne semble pas aimer “localhost” dans la variable d'affichage pour une raison quelconque. Donc, réglez l'adresse IP manuellement, comme le suggère harrymc :

export DISPLAY="127.0.0.1:10.0"

Alors les programmes X11 devraient fonctionner correctement. Il ne semble pas nécessaire d'indiquer au système d'exploitation que localhost et 127.0.0.1 sont équivalents, mais cela fonctionne, au moins.

14
14
14
2012-10-22 07:59:02 +0000

J'ai eu ce problème avec mon serveur KVM CentOS, il me manquait le programme “xauth”.

9
9
9
2014-10-17 08:06:53 +0000

Si vous avez ce problème après un certain temps lorsque vous utilisez -X arg. ou juste ForwardX11 dans /etc/ssh/ssh_config, alors lancez $ ssh username@hostname -Y, pour activer la redirection X11 de confiance , je ne connais pas la cause exacte mais je suppose qu'avec -X certaines fonctionnalités expirent après un certain temps, probablement pour augmenter la sécurité.

Voici ce que j'ai trouvé en ligne :

Si vous utilisez ssh -X remotemachine la machine distante est traitée comme un client non fiable. Ainsi, votre client local envoie une commande à la machine distante et reçoit la sortie graphique. Si votre commande enfreint certains paramètres de sécurité, vous recevrez une erreur à la place.

Mais si vous utilisez ssh -Y remotemachine, la machine distante est traitée comme un client de confiance. Cette dernière option peut entraîner des problèmes de sécurité. Parce qu'un autre client graphique (X11) pourrait renifler les données de la machine distante (faire des captures d'écran, enregistrer des frappes et autres choses désagréables) et il est même possible de modifier ces données.

Si vous voulez en savoir plus sur ces choses, je vous suggère de lire la page de manuel de Xsecurity ou les spécifications de l'extension X Security. De plus, vous pouvez vérifier les options ForwardX11 et ForwardX11Trusted dans votre /etc/ssh/ssh_config.

sources :

6
6
6
2017-08-30 11:36:06 +0000

Juste testé sur mon Mac, d'autres systèmes pourraient être OK :

  1. Permettre aux clients de se connecter à partir de n'importe quel hôte en utilisant xhost+

$ xhost +

  1. Vous devriez avoir un environnement qui supporte l'affichage X11

[Système Mac] Installer X11 pour mac https://www.xquartz.org/

  1. Vous devriez laisser votre serveur ssh faire suivre l'affichage x11 avec le paramètre /etc/ssh/sshd_config

    mettre à jour X11Forwarding yes et définir -X, puis redémarrer votre serveur ssh

  2. Vous devriez laisser votre session ssh faire suivre l'affichage x11 avec le paramètre echo $DISPLAY

    $ ssh -X user@ip

  3. Comment ouvrir une application X11 dans PyCharm ?

  • ouvrir une session ssh qui supporte l'affichage X11 (n'oubliez pas de garder cette session)
  • exécuter DISPLAY dans cette session ssh
  • définir la variable d'environnement &007 pour votre PyCharm
4
4
4
2017-09-01 01:17:28 +0000

J'ai dû mettre /etc/ssh/sshd_config comme suit :

X11UseLocalhost no

Plutôt que de le mettre “oui”. Bizarre si la valeur par défaut est “NO” Utilisateurs utilisant du mastic avec XMing sous Windows. J'utilise directement ssh sur Fedora. De temps en temps, il commençait à nous donner

error can't open display localhost

Le redémarrage du serveur le corrigeait habituellement mais c'est stupide. J'ai fait ce qui précède, j'ai redémarré le service sshd sur le serveur et presto les nouvelles connexions fonctionnent à nouveau correctement.

4
4
4
2012-07-10 21:26:59 +0000

Lorsque vous utilisez UXTERM ou XTERM, il suffit d'émettre

export $DISPLAY

La variable sera là. Il suffit alors de la définir et de l'exporter.

3
3
3
2019-07-08 17:25:35 +0000

Cette configuration fonctionne pour moi :

Local (64 bit Cygwin sur Windows 10) DISPLAY=:0

Server (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Ces paramètres ont été trouvés en cliquant sur “X applications menu on :0” dans la barre des tâches et en sélectionnant System Tools > Terminal

2
2
2
2015-03-18 22:52:32 +0000

J'ai également eu ce problème avec Solaris 10 et j'ai constaté que l'auditeur n'était pas installé.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop options/tcp_listen = true
1
1
1
2017-05-01 04:13:35 +0000

Si vous utilisez Konsole, passez simplement à un autre émulateur de terminal tel que Xfce Terminal et essayez à nouveau en utilisant root.

1
1
1
2014-07-15 15:13:51 +0000

Sous CentOS 6.5, j'ai soudainement perdu l'accès à distance aux X-programmes après avoir joué avec /etc/hosts. Même symptôme de la variable $DISPLAY vide (pas d'aide pour la définir/exporter manuellement).

L'entrée 127.0.0.1 pointant sur le nom de l'hôte réel est nécessaire ; en fait l'ordre semble également pertinent (mettre en dernier & ça ne marchera pas…)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

Après avoir corrigé cela, xeyes, xclock et d'autres jouets de test X fonctionnent à nouveau, donc mon virt-manager nécessaire est également de retour en ligne.

1
1
1
2016-06-10 11:56:04 +0000

Je viens de trouver un joli hoquet dans mon installation qui empêchait la transmission x : Mon pare-feu bloquait toutes les connexions provenant de localhost, empêchant ainsi l'accès au tunnel

1
1
1
2018-05-30 13:40:40 +0000

open terminal $ ssh username@hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY=“127.0.0.1:10.0” tout devrait fonctionner.