web-dev-qa-db-fra.com

Comment démarrer l'application graphique avec upstart?

J'ai lutté avec ce problème pendant trois jours et j'ai essayé de nombreuses façons de le résoudre, mais sans succès. J'espère que vous pourrez m'aider ...

J'ai une application graphique. Je veux démarrer cette application automatiquement. Et quand il se ferme ou se ferme de façon inattendue, je veux rouvrir cette application.

J'ai essayé d'utiliser un script de démarrage, mais bien que les services avec upstart ne posent aucun problème, l'application graphique ne démarre pas avec le script de démarrage. Il dit ne peut pas connecter le serveur X.

Dois-je ajouter ou modifier certains paramètres pour ouvrir avec upstart ou y at-il un moyen d'ouvrir l'application GUI automatiquement quand une fermeture ou une fermeture inattendue se produit (pas seulement une fois après la connexion, je veux dire, pas avec Startup)?

4
goGud

Le problème que vous rencontrez est que lorsque upstart (ou systemd, ou les scripts de /etc/rc.d/) sont exécutés, aucun service graphique ("le serveur X" ne s'exécute).

De plus, la disponibilité du sous-système graphique sous Unix est strictement liée au concept selon lequel un utilisateur a procédé à une connexion graphique et seul cet utilisateur a le droit. utiliser l'environnement graphique. Il est de coutume de NE PAS démarrer un sous-système graphique pour root --- et les scripts upstart sont exécutés par root.

Pour démarrer automatiquement une application graphique au démarrage du système, mon approche serait la suivante:

  1. créer un utilisateur à cet effet. Configurez-le pour que sa session démarre automatiquement.
    enter image description here

  2. configurer une application de démarrage pour cet utilisateur avec le programme souhaité; choisissez "application de démarrage" dans le tableau de bord: enter image description here

  3. pour redémarrer l'application quand elle se ferme/se bloque, vous pouvez simplement l'intégrer dans un script:

         #!/bin/bash
         #
         while true; do 
              /full/path/to/start_myapp.sh    # NO background (&)!
              # if we land here it exited
              sleep 5
         done
    

Si vous utilisez ce script, il est vraiment important que la commande start_myapp.sh ne lance pas l'application en arrière-plan. Sinon, des stratégies plus complexes sont nécessaires pour le redémarrage automatique ...

Notez que vous pouvez également utiliser votre utilisateur normal en parallèle. choisissez simplement "changer d'utilisateur" dans le panneau (adaptez-vous à votre version d'Ubuntu) et vous aurez un autre écran de connexion graphique; vous pouvez passer en arrière avec CTRL-ALT-F7 et CTRL-ALT-F8 ...

4
Rmano

Créer un fichier $HOME/.config/upstart/myGuiStart.conf

Contenu:

start on desktop-start
stop on desktop-end

respawn

exec firefox

ou un autre exemple avec un délai:

start on desktop-start
stop on desktop-end

respawn

script
    sleep 30
    firefox 
end script

description de respawn:

 respawn
         A service or task with this stanza will be automatically started
         if it should stop abnormally.  All reasons for a service stopping,
         except the stop(8) command itself, are considered abnormal.  Tasks
         may exit with a zero exit status to prevent being respawned.

Plus d'informations:

http://ifdeflinux.blogspot.de/2013/04/upstart-user-sessions-in-ubuntu-raring.html

http://upstart.ubuntu.com/

Respawn bug? -> https://askubuntu.com/a/62461/265974

5
TuKsn