1 votes

Ouvrir un programme Java depuis SSH dans l'affichage VNC

Si j'ai un système Ubuntu 12.04 sur lequel LXDE et TightVNCserver sont installés et que je lance une session sur le port :1 (sans tunnel SSH) et une connexion SSH active, comment puis-je utiliser SSH pour démarrer un programme qui nécessite un écran actif pour utiliser la session tightVNC disponible ?

Je voulais utiliser SSH pour démarrer un fichier java qui normalement démarre bien lorsqu'il est démarré dans la session vnc, mais j'obtiens une erreur :

xxx@yyy:~# java zzz
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
        at sun.awt.HeadlessToolkit.getScreenSize(HeadlessToolkit.java:282)
        at zzz.<clinit>(zzz.java:35)

Pour le dire autrement : Je veux démarrer un programme et le laisser utiliser la fenêtre de la session VNC ouverte sans utiliser la session de visualisation du client VNC pour le démarrer, est-ce possible ?

(Je pense que n'importe quel programme qui a besoin d'un affichage réagirait de cette façon, donc je pense que ce n'est pas tant une question de java que de ssh/vnc).

2voto

Alex Cannon Points 121

Vous devrez activer la redirection X11, ce qui la redirigera vers votre propre serveur X11 (vous devez donc disposer d'un serveur X11 en cours d'exécution sur le client à partir duquel vous vous connectez en SSH).

Pour ce faire, il suffit d'ajouter -X à votre commande SSH. Exemple : ssh -X user@server

Assurez-vous ensuite que la variable $DISPLAY est réglée sur l'affichage correct. Vérifiez-le avec echo $DISPLAY

Si votre objectif est d'accéder à une fenêtre ouverte sur votre serveur X11 via SSH, je vous suggère de jeter un coup d'œil à ceci : http://www.wensley.org.uk/x

Il explique comment obtenir un comportement similaire à celui de 'screen', mais avec des applications X11.

2voto

muru Points 180007

Essayez de régler le DISPLAY au serveur X de la session VNC :

DISPLAY=:1 java xxx

0voto

Johannes Gerer Points 5662

Il y a deux choses que vous pouvez faire ici, je suppose, l'une d'entre elles est d'utiliser ssh -X commande.

Cependant, j'aime l'approche qui consiste à lancer un serveur VNC (comme tightvnc) sur l'hôte auquel vous essayez de vous connecter. Vous pouvez alors ssh sur cet hôte et utilisez une visionneuse vnc pour l'affichage si vous en avez besoin. Sur votre ssh connectez-vous à votre hôte vnc et redirigez son port 5901 (en supposant que votre serveur tightvnc écoute sur le port 5901) vers le port local 5901.

ssh -L 5901:127.0.0.1:5901 -C user@192.168.186.111

Et, sur un autre terminal, connectez-vous au port transféré pour afficher X11 :

vncviewer localhost:5901

Maintenant, lorsque vous exécutez une commande qui vous donne une erreur, c'est parce que votre variable DISPLAY n'est pas définie. Vous pouvez la définir en tapant export DISPLAY=:N sur votre ssh terminal. Note : Le N est généralement 1, mais pour vérifier, vous pouvez ouvrir un terminal dans votre fenêtre x11-vnc et taper echo $DISPLAY , N est la valeur affichée ici.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X