web-dev-qa-db-fra.com

Comment démarrer une application X depuis SSH

J'ai essayé de rechercher ce sujet dans Google, mais sans résultats significatifs.

J'ai besoin de démarrer une application graphique depuis un terminal, mais je me fiche de ce que cette application me montre. De plus, je dois démarrer quelques instances de cette application dans différentes sessions. Il est connecté à des tests automatisés d'interface graphique, donc je sais ce que je veux et je cherche une réponse :).

Je pense que les étapes appropriées devraient être:

  1. Lancer une nouvelle session X Window
  2. Obtenir mon nouvel identifiant de session
  3. l'exporter dans la variable env (export DISPLAY: 13.0)
  4. lancer mon application

mais je suis coincé au premier pas. Quelqu'un at-il ici un problème similaire?

--- EDIT: 1) Je me moque de la sortie graphique - je n'ai besoin que de stdout et stderr de mon application. - c'est pourquoi cette question n'est pas en double - connaissez bien Google :). Je ne veux pas rediriger la sortie vers ma propre interface graphique.

18
Paweł Wojtal

Si vous ne vous souciez pas de voir ce que fait l'application, vous pouvez lui fournir un serveur x "virtuel" avec xvfb:

Xvfb fournit un serveur X pouvant fonctionner sur des machines sans matériel d'affichage ni périphérique d'entrée physique. Il émule un framebuffer muet utilisant la mémoire virtuelle. Ce serveur était principalement utilisé pour les tests de serveur, mais d'autres utilisations novatrices ont été découvertes, notamment le test des clients contre des profondeurs inhabituelles et des configurations d'écran, le traitement par lots avec Xvfb en tant que moteur de rendu en arrière-plan, les tests de charge, les aides pour porter le serveur X sur une nouvelle plate-forme et fournir un moyen discret d'exécuter des applications qui n'ont pas vraiment besoin d'un serveur X mais qui exigent de toute façon d'en avoir un.

Après l'avoir installé, vous pouvez le démarrer avec:

Sudo Xvfb :10 -ac -screen 0 1024x768x24 &

ça va fonctionner en arrière-plan, alors vous démarrez vos clients avec:

DISPLAY=:10 your-client
19
roadmr

Une courte commande:

ssh -X <username>@<Host> gedit &

de man ssh

-X      Enables X11 forwarding.
        This can also be specified on a per-Host basis in a configuration file.

        X11 forwarding should be enabled with caution.  Users with the
        ability to bypass file permissions on the remote Host (for the
        user's X authorization database) can access the local X11
        display through the forwarded connection. An attacker may then
        be able to perform activities such as keystroke monitoring.

  1. Vérifiez /etc/ssh/sshd_config côté serveur:

    Sudo nano /etc/ssh/sshd_config
    

    pour les lignes ci-dessous:

    X11Forwarding yes
    X11UseLocalhost no
    

    Redémarrez ssh ssh, si vous avez apporté des modifications:

    Sudo service ssh restart
    
  2. Vérifiez /etc/ssh/ssh_config côté client:

    Sudo nano /etc/ssh/ssh_config
    

    pour les lignes ci-dessous

    ForwardX11 yes
    ForwardX11Trusted yes
    
14
A.B.

Vous avez juste besoin d'exécuter export DISPLAY =: id # dans votre session SSH et les programmes exécutés seront exécutés sur l'affichage distant. Un exemple rapide:

maythux@maythuxPC:~$ ssh testSSH@myServer
maythux@maythuxPC:~$ export DISPLAY=:0
maythux@maythuxPC:~$ gedit

Désormais, gedit sera exécuté sur l'utilisateur nommé testSSH display

Vous pouvez abréger tout cela en une seule commande:

ssh testSSH@myServer "DISPLAY=:0 Nohup gedit"
8
Maythux