SSH: lancer des programmes GUI sur l'écran distant, pas sur l'affichage X

11

Le problème

La plupart des gens veulent se connecter à un serveur via ssh avec l'option "-X" afin d'exécuter des programmes GUI sur l'hôte distant en utilisant l'affichage du client. Je voudrais exécuter des programmes GUI sur le moniteur physique connecté au serveur. Est-ce possible ? Permettez-moi d'être plus précis:

Ma situation est la suivante: j'ai un poste de travail sans clavier ni souris, mais un moniteur y est connecté. Je voudrais y SSH avec mon ordinateur portable et pouvoir lancer un programme graphique, tel que xeyes ou ssvnc et le faire apparaître sur le moniteur de la station de travail.

[xapple@laptop ~]$ ssh workstation
Last login: Mon Sep 26 20:03:35 2011 from laptop
[xapple@workstation ~]$ export DISPLAY=:0
[xapple@workstation ~]$ xeyes
No protocol specified
Error: Can't open display: :0

Modifier: informations supplémentaires

Je devrais peut-être expliquer plus clairement certaines choses:

  • J'ai un accès sudo sur le poste de travail, je peux installer n'importe quoi si besoin.
  • La station de travail exécute l'interface utilisateur GNOME.
  • Avant de déconnecter le clavier et la souris du poste de travail, je me suis connecté à une session GNOME. On peut donc voir mon bureau GNOME sur le moniteur de la station de travail actuellement.
  • Je ne souhaite pas exécuter de programmes à partir de mon ordinateur portable sur le poste de travail. Je voudrais exécuter des programmes de poste de travail sur le poste de travail. Le xeyes ou tout autre exécutable se trouve sur le serveur distant et doit être exécuté sur le moniteur du serveur distant
  • Je comprends que cette opération me laissera dans une situation où mon curseur ne sera pas connecté à l'interface. Je ne peux pas cliquer sur les choses. C'est bon.

Toute aide grandement appréciée!

xApple
la source
Avez-vous exécuté xhost +sur votre serveur?
karlphillip
Je pense que c'est aussi une question intéressante, par exemple si vous avez 3 PC Ubuntu exécutant Synergy pour utiliser le même clavier et la même souris entre les 3 ... lorsque vous vous connectez, vous devez vous connecter 3 fois. serait bien de faire un script qui vous connecte aux deux autres PC, lorsque vous vous connectez au PC principal.
Sverre

Réponses:

5

toute application xlib doit se connecter à un xserver. vous devez indiquer à l'application la connexion au serveur soit:

  • définition de la variable d'environnement DISPLAY
  • en utilisant un indicateur de ligne de commande tel que -display

le premier xserver est généralement accessible par la chaîne de connexion ': 0'. alors essayez ceci:

xeyes -display :0

ou ca

env DISPLAY=:0 xeyes
akira
la source
Dans de nombreux cas (comme lors du démarrage par GDM de GNOME), un réglage XAUTHORITYsera également nécessaire, car le serveur X11 utilisera un fichier Xauthority temporaire.
user1686
Intéressant, après avoir défini la variable $ DISPLAY, j'obtiens maintenant, en plus du message "Erreur: impossible d'ouvrir l'affichage", le message "Aucun protocole spécifié" lors de la tentative de lancement de xeyes.
xApple
@grawity Merci pour les conseils. Puis-je demander comment définir ma XAUTHORITY pour que ma commande fonctionne?
xApple
5

Ce poste de travail exécute-t-il un serveur X Windows? Sans cela, tout cela est théorique.

Vous avez besoin de QUELQUE CHOSE pour traiter les données en graphiques, pixels, couleurs et emplacements. Un «moniteur» est inutile sans une sorte de logiciel pour l'exécuter.

En supposant que ce soit le cas. (mais d'après le texte, ça sonne bien sûr autrement)

Étant donné les noms d'hôte (et la résolution DNS appropriée via / etc / hosts ou DNS ou autre) de 'station de travail' et 'ordinateur portable' ... sinon, remplacez les noms d'hôte de la machine par des adresses IP appropriées.

ssh workstation
xhost +laptop

vous pouvez ensuite vous déconnecter de la station de travail à ce stade, car cela définit les autorisations sur le serveur X de la station de travail pour permettre à «l'ordinateur portable» de se connecter.

si vous démarrez vos programmes avec le jeu d'environnement DISPLAY env correctement, vous pouvez faire en sorte que les applications s'affichent sur le poste de travail, tout en s'exécutant sur votre ordinateur portable.

DISPLAY=workstation:0 xeyes

-ou-

export DISPLAY=workstation:0
xeyes

l'une ou l'autre méthode fonctionnera, cette dernière provoque l'affichage de tout ce qui concerne X11 sur le poste de travail lors du démarrage à partir de ce shell. (j'espère que cela avait du sens)

La ligne «xhost» consiste à autoriser l'ordinateur portable à se connecter au Xserver de la station de travail. Sans cela, vous obtiendrez une autorisation refusée, sauf si vous démarrez le serveur X sans autorisations, ce qui n'est pas vraiment recommandé. La protection «xhost» est encore boiteuse, car les données sont envoyées en «texte brut» entre l'ordinateur portable et la station de travail et peuvent être reniflées, mais c'est une solution facile.

Si vous vouliez de la confidentialité, vous auriez besoin de configurer une sorte de tunnel crypté entre votre ordinateur portable et la station de travail (port 6000 pour l'affichage: 0). Ouais, ça devient bizarre à ce stade.

Si vous êtes dans un environnement contrôlé, l'utilisation de la commande 'xhost + laptop' sera suffisante, si vous quittez la partie 'laptop' de cette commande 'xhost +', alors N'IMPORTE QUI peut se connecter au Xserver et afficher des choses.

N'oubliez pas que votre souris n'est PAS «connectée» au poste de travail Xserver et que vous ne pourrez PAS manipuler les fenêtres ni cliquer sur des éléments.

Si vous souhaitez que la souris soit connectée, je recommanderais quelque chose comme x2x, synergy, vnc ou une application de partage d'écran basée sur X Windows.

lornix
la source
Merci pour votre réponse ! Vous avez raison, j'ai peut-être besoin de préciser d'autres choses: (1) La station de travail exécute l'interface utilisateur GNOME (2) Je ne souhaite pas exécuter de programmes à partir de mon ordinateur portable. Xeyes ou quoi que ce soit qui devrait être exécuté sur le poste de travail avec le moniteur du poste de travail (3) Ça va, je comprends que mon curseur ne sera pas connecté.
xApple
Oh, alors vous n'avez vraiment besoin que de ssh sur le poste de travail, définissez la variable DISPLAY sur 'localhost: 0' (ou simplement ': 0') et démarrez votre application. Vous devrez toujours gérer les autorisations (xhost + localhost probablement la meilleure réponse) et soit nohup, soit &! (background et disown), ou les commandes bg / disown du shell pour que l'application ne se ferme pas lorsque vous vous déconnectez. (sauf si c'est ce que vous voulez, bien sûr)
lornix
Ah, alors peut-être que mon problème n'est qu'un problème de permission. Cependant, si je lance "xeyes" en tant que root, le message d'erreur est le même. Si vous postez une réponse qui résout les problèmes d'autorisation, je peux la marquer comme résolue!
xApple
Quelqu'un est-il connecté à la session X Windows sur le poste de travail? Sans cela, le code qui écoute les connexions de programme n'est pas encore actif, juste les éléments de connexion. (Je simplifie énormément!) Essayez d'accéder au poste de travail, puis «startx», ALORS vous pourrez peut-être vous connecter à l'écran. Une autre façon consiste à utiliser un serveur X bare bones, en tapant «X: 0 &», en définissant la variable DISPLAY puis en exécutant «xhost + laptop» (ou simplement «xhost +»). Mais cela devient un peu bas pour la plupart. (Idéal pour les tests!)
lornix
Oui, je me suis connecté à une session GNOME sur le poste de travail avant de déconnecter le clavier et la souris. Néanmoins, j'ai essayé d'exécuter la commande "startx" à partir de ma session ssh. Le message d'erreur était le suivant: "X: utilisateur non autorisé à exécuter le serveur X, abandon."
xApple