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?
Puisque vous utilisez Windows de votre côté, vous aurez besoin d'un client SSH qui exécute un serveur X local sur Windows pour exécuter des applications graphiques à partir du serveur à distance sur votre écran.
Par expérience, je recommanderais le MobaXTerm gratuit qui a cette fonctionnalité intégrée. Veuillez le télécharger et l'essayer:
Si vous obtenez des erreurs, c'est parce que parfois une image de serveur minimale peut ne pas être configurée pour permettre le transfert X dans celle-ci. Dans ce cas, veuillez commenter et je vous aiderai à le résoudre; J'ai fait cela avec beaucoup de VPS minimaux exécutant Ubuntu / Debian.
Vous vous connectez donc depuis votre ordinateur personnel (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 c'est correct que par tous les moyens, lisez la suite.
Appelons le programme pour démarrer gedit
mais le processus est le même pour tous. Selon l'endroit où vous voulez voir la fenêtre graphique, passez à la droite.
Si vous voulez voir et utiliser la fenêtre de gedit sur votre machine distante mais démarrer 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 vous occupez pas des avertissements, ils sont normaux - la fenêtre gedit apparaîtra sur l'écran de votre machine distante comme sur le serveur. L'astuce consiste à utiliser l'option "-X" comme pour ssh -X
activer le tunneling X et définir la DISPLAY
variable à droite.
Cela suppose que vous utilisez un client SSH qui prend en charge X11 et que votre serveur dispose d'un serveur X en cours d'exécution (certains sans besoin d'interfaces graphiques n'exécutent pas de serveur X). Surtout sur Windows, cela pourrait être un problème car la plupart des programmes de terminaux Windows n'ont pas de X. Comme l' a déclaré izx , le MobaXTerm est l'un des nombreux clients SSH pour Windows qui a un X-Server.
Cependant, pour un serveur sans X11, vous devrez l'installer.
Vous pouvez également démarrer une instance sur l'écran de votre serveur en appelant gedit comme ceci:
ssh user@server
DISPLAY=:0.0 gedit
Vous devez remplacer la bonne valeur au lieu de :0.0
bien pour l'obtenir sur le bon écran X (seulement important si plusieurs écrans sont connectés à votre serveur ou si c'est quelque peu particulier dans sa configuration).
Ici, le scénario le plus courant pour que cela ne fonctionne pas serait si le serveur manquait d'un serveur X11 mais qu'il n'avait pas de moniteur connecté ou n'avait pas d'interface utilisateur graphique et que vous ne liriez pas ceci: D.
Je ne suis pas expert dans ce domaine , mais la façon dont je pense que cela fonctionne est que chaque écran physique, à savoir chaque moniteur connecté à un ordinateur individuel obtient un numéro en cours d' exécution sous forme de 0.0
, 1.0
, 2.0
, ...
Ce numéro est attribué par le X-Window-System alias X11. C'est une couche pour fournir un réseau et une interface graphique de base sur lesquels Unity, Gnome, KDE et similaires peuvent s'appuyer.
Vous pouvez voir le nombre d'affichages d'une machine donnée et les nombres utilisés en exécutant for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done
sur la machine en question. * Ensuite, chaque ordinateur configuré pour rendre ses écrans disponibles et exécuter un serveur X a un nom d'hôte. Vous pouvez utiliser un écran d'hôtes à partir de n'importe quelle machine du même réseau en définissant votre DISPLAY
variable en conséquence sur DISPLAY=hostname:0.0
. Ssh le fait pour vous de manière sensée si vous fournissez l' -X
option.
* Remarque: je suppose qu'il existe un meilleur moyen que cette boucle for.
Utilisez un éditeur de texte shell. vi
, vim
, nano
Et emacs
sont les plus communs et au moins un d'entre eux sera installé et opérationnel. Parmi eux, nano
c'est le plus simple et le plus explicite.
for
boucle ... elle affichera maintenant uniquement l'adresse d'affichage, par exemple:0
:0.0
. N'hésitez pas à revenir en arrière si vous pensez que ce n'est pas ce que vous voulez ..Ce que con-f-use a dit .
Fondamentalement, vous avez un terminal via SSH et Gedit est un programme GUI. La réponse de con-f-use le fera fonctionner à partir d'une session client Linux GUI.
L'autre option serait d'utiliser un éditeur non GUI comme nano, Vi ou bien d'autres.
la source