pourquoi l'affichage x11 ne fonctionne-t-il pas via la connexion ssh?

22

Je me suis connecté à un serveur distant et j'essaie d'afficher une application x (par exemple firefox). mais un message d'erreur apparaît. ce qui suit sont mes tentatives pour ouvrir Firefox

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

J'ai utilisé -X, -Y parce que j'ai lu quelque part que ces deux options sont liées aux informations d'identification concernant X11 et ces commutateurs feront le travail pour moi. Même sans les commutateurs -X, -Y, ma tentative a échoué.

Que signifie l'erreur «aucun affichage spécifique»?

PS La chose étrange est que si je me connecte au serveur distant via mon PUTTY et que je répète la commande 'firefox' cela fonctionne?!?! (Firefox s'affiche sur l'ordinateur local)

PS mon ordinateur local est Windows 7, donc j'ai Xming en arrière-plan afin de permettre l'affichage X11. Quant à la tentative écrite en partie haute, les commandes ont été tapées sur le terminal Cygwin.

kwagjj
la source
Avez-vous essayé d'afficher quelque chose localement depuis votre terminal Cygwin? Par exemple, vous pouvez trouver un utilitaire X local tel que xclock et l'exécuter pour voir ce qui se passe. Si vous ne pouvez pas afficher localement, l'affichage à distance ne fonctionnera pas. Vous pouvez également avoir besoin du serveur X pour Cygwin.
unxnut
1
@unxnut comme vous l'avez souligné, ma DISPLAYvariable n'a pas été définie. donc je l'ai configuré avec export DISPLAY=:0.0' and executed xclock` et le xclock est apparu. Mais quand je me suis ensuite connecté au serveur distant via ssh, et j'ai réessayé xclock, il est ditError: Can't open display:
kwagjj

Réponses:

16

Assurez-vous que la variable DISPLAY est définie dans votre environnement cygwin:

export DISPLAY=:0.0

après la connexion avec SSH, vérifiez si ce shell connaît également la variable DISPLAY correcte avec:

echo $DISPLAY
jensd
la source
4
J'ai configuré la variable DISPLAY dans le terminal cygwin de l'ordinateur local et ensuite transféré sur un serveur distant et tapé echo $DISPLAY. Mais toujours la variable DISPLAY dans le serveur distant est définie sur rien ..
kwagjj
2
Error: Can't open display: :0.0
Ahmed
2
Pour ce faire:export DISPLAY=localhost:0
trogne
18

Je viens de rencontrer ce problème de connexion à un serveur RHEL7 sans tête.

Vous avez besoin du package xorg-x11-xauth installé sur votre hôte pour que la variable DISPLAY soit définie et soit correctement autorisée.

J'espère que j'ai sauvé quelqu'un du temps.

Mike S
la source
3
exactement ce que je cherchais. Très appréciée!
josh-cain
1
Très bonne réponse! Les autres solutions (paramétrer DISPLAY manuellement via l'export) entraîneront une transmission non cryptée entre le client et le serveur! Sur Debian Squeeze, c'était le paquet «xauth» qui devait être installé pour que tout fonctionne. Après une reconnexion par ssh -Xan echo $DISPLAYretourné une URL + port et un appel d' xterm &ouvert un terminal dans une fenêtre locale.
Jpsy
7

Merci à @jensd, @unxnut de m'avoir aidé. sur la base de vos commentaires, j'ai pu comprendre le problème.

La solution nécessitait deux étapes:

  1. la variable DISPLAY doit être correctement définie.
  2. lors de la connexion au serveur distant, le commutateur -X doit être activé

mes tentatives précédentes manquent d'une ou des deux conditions.

Quoi qu'il en soit, pour les utilisateurs ultérieurs qui voient cela, voici des exemples pour vous montrer ce que j'essaie de dire.

cas 1

ma machine locale n'aura pas de variable DISPLAY définie. Et puis je vais ssh sur le serveur distant avec le commutateur -X, puis j'essaierai de l'exécuter xclock.

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

comme vous pouvez le voir, une erreur Error: Can't open display:est affichée sur le terminal du serveur distant.

case2

cette fois, sur la machine locale, je spécifierai la variable DISPLAY. Mais quand je ssh'ing, je ne vais pas activer le commutateur -X. Le résultat sera un échec:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

au début, vous pouvez voir que j'ai correctement défini la variable DISPLAY. Mais même ainsi, après ssh'ing (sans le commutateur -X) la xclock n'est pas exécutée.

* Un résultat différent avec setenv | grep DISPLAYpeut être vu ici (comparer avec le cas 1). dans case2, le résultat est juste vide. d'un autre côté, le résultat de case1 sur cette ligne de commande est DISPLAY: undefined variable.... Je ne sais pas comment cette différence est provoquée mais je reçois un pressentiment qui est lié au fait que vous ayez satisfait à la condition 1. ou 2 .

case3

cette fois, je spécifierai correctement la variable DISPLAY sur la machine locale et également ssh sur le serveur distant avec mon commutateur -X activé.

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

avec ce réglage, ça xclockmarche !! voici une capture d'écran pour prouver que je ne mens pas. entrez la description de l'image ici l'horloge est affichée avec succès sur ma machine locale.

Encore une fois, consultez le résultat de setenv | grep DISPLAYdans ce cas. Ça se voit maintenant DISPLAY=localhost:11.0. D'après ce que je sais, cela est lié à MIT-MAGIC-COOKIE dans le fichier .Xauthority, mais comme je n'en sais pas grand-chose, je n'irai pas plus loin.

Conclusion: à partir des trois cas ci-dessus, nous pouvons confirmer que pour que X Windows distant s'affiche correctement, 1. la variable DISPLAY de la machine locale et 2. le -Xcommutateur ssh doivent être correctement définis. Bien sûr, le serveur distant doit autoriser le transfert X11.

kwagjj
la source