web-dev-qa-db-fra.com

Comment exécuter une application graphique sur un serveur distant lorsque je suis connecté via SSH?

J'essaie d'exécuter gedit à partir d'un terminal SSH sous Windows, connecté à une instance Amazon EC2 exécutant Ubuntu 12.04 Server et j'obtiens cette erreur:

Cannot open display:

Comment je le répare?

14
Gaurav Agarwal

Puisque vous utilisez Windows de votre côté, vous aurez besoin d’un client SSH qui exécute un serveur X local sous Windows pour exécuter des applications graphiques à partir du serveur à distance sur votre écran.

Par expérience, je recommanderais le logiciel gratuit MobaXTerm qui intègre cette fonctionnalité. Veuillez le télécharger et l'essayer:

enter image description here

Si vous obtenez des erreurs, c'est parce qu'une image de serveur minimale peut parfois ne pas être configurée pour permettre ( d'autoriser le transfert X dans celle-ci. Dans ce cas, veuillez commenter et je vous aiderai à le résoudre. Je l'ai fait avec beaucoup de VPS minimaux sous Ubuntu/Debian.

14
ish

Donc, vous vous connectez depuis votre PC à la maison (appelons-le votre machine ) à un serveur (appelons-le serveur ) via ssh ? Vous souhaitez démarrer un programme avec une fenêtre graphique sur le serveur via votre machine? Si cela est correct, lisez-le.

Appelons le programme pour démarrer geditmais le processus est le même pour tous. Selon l'endroit où vous souhaitez voir la fenêtre graphique, passez à l'en-tête de droite.

Fenêtre sur l'écran de votre machine

Si vous voulez voir et utiliser la fenêtre de gedit sur votre machine distante mais démarrez sur le serveur, vous voudrez que votre session Shell ressemble à ceci:

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases 

** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme

(gedit:7851): Gtk-WARNING **: Attempting to store changes 

Ne faites pas attention aux avertissements, ils sont normaux - la fenêtre gedit apparaîtra sur l'écran de votre machine distante comme si elle avait l'air sur le serveur. L'astuce consiste à utiliser l'option "-X" comme dans ssh -X qui active le tunneling X et définit la variable DISPLAYà droite.

Cela suppose que vous utilisez un client SSH prenant en charge X11 et que votre serveur a un serveur X en cours d'exécution (certains ne nécessitant pas d'interface utilisateur graphique n'exécutent pas de serveur X). Cela peut poser problème, surtout sous Windows, car la plupart des programmes de terminal Windows ne possèdent pas X. Comme izx a déclaré le MobaXTerm est l’un des nombreux clients SSH pour Windows qui a un X-Server cependant.

Pour un serveur dépourvu de X11, vous devrez l’installer.

Sur l'écran du serveur

Vous pouvez également démarrer une instance sur l'écran de votre serveur en appelant gedit comme suit:

ssh user@server
DISPLAY=:0.0 gedit

Vous devez toutefois remplacer la bonne valeur par la valeur :0.0 pour la faire apparaître sur le bon écran X (important uniquement si plusieurs écrans sont connectés à votre serveur ou si sa configuration est quelque peu particulière).

Dans ce cas, le scénario le plus courant pour que cela ne fonctionne pas serait si le serveur ne possédait pas de serveur X11, mais qu’il n’aurait pas de moniteur connecté ou d’interface utilisateur graphique et que vous ne lisiez pas ceci: D.

Un peu de théorie

Je ne suis pas un expert en la matière, mais je pense que cela fonctionne comme suit: chaque écran physique, c’est-à-dire chaque moniteur connecté à un ordinateur individuel, reçoit un numéro de fonctionnement sous la forme 0.0, 1.0, 2.0, ...

Ce numéro est attribué par le système X-Window, également appelé X11. C’est une couche qui fournit un réseau et une interface graphique de base sur lesquels Unity, Gnome, KDE, etc. peuvent s’appuyer.

Vous pouvez voir le nombre d'écrans qu'un ordinateur donné a et quels numéros sont utilisés en exécutant for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done sur l'ordinateur en question. * Chaque ordinateur configuré pour rendre ses écrans disponibles et exécutant un serveur X a un nom d'hôte. Vous pouvez utiliser les écrans d'hôtes de n'importe quelle machine du même réseau en définissant votre variable DISPLAYen conséquence sur DISPLAY=hostname:0.0. Ssh le fait pour vous d'une manière raisonnable si vous fournissez l'option -X.

* Remarque: je suppose qu'il existe un meilleur moyen que celui-ci.

Si tout échoue

Utilisez un éditeur de texte Shell. viname__, vimname__, nanoet emacssont les plus courants et au moins l'un d'entre eux sera installé et opérationnel. nanoest le plus simple et le plus explicite.

17
con-f-use

Quel con-f-use dit .

En gros, vous avez un terminal via SSH et Gedit est un programme à interface graphique. La réponse de con-f-use le fera fonctionner à partir d'une session cliente sous Linux.

L'autre option serait d'utiliser un éditeur non graphique comme nano, Vi ou de nombreux autres.

0
xyious