2015-12-13 3 views
4

Je transfère du code Qt Windows/VC++ vers Linux/GCC. L'application peut ajouter son propre raccourci au dossier Windows Autostart afin que l'application démarre après la connexion.Application Qt C++: installation autostart sous Linux

Je veux faire la même chose sous Linux. J'utilise Kubuntu 15.10 mais la solution devrait fonctionner pour presque toutes (ou au moins la plupart) les variantes de Linux là-bas. Et il devrait fonctionner sans droits super utilisateur (ou il devrait demander les droits automatiquement).

J'ai cherché sur le web et a trouvé deux solutions:

  1. Ajouter un fichier d'entrée de bureau pour $HOME/.config/autostart
  2. Ajouter un lien symbolique vers /etc/init.d/

Est-ce qu'ils travaillent tous les deux dans toutes les distributions Linux? Quelles sont les différences? Lequel doit être préféré?

Je voudrais également savoir si je devrais le faire en exécutant par programme une commande shell ou s'il y a une API native que je pourrais utiliser en C/C++ (y compris la détection d'erreur facile).

+1

Savez-vous comment ces deux choses que vous mentionnez diffèrent? –

+0

"la solution devrait fonctionner pour presque toutes (ou au moins la plupart) les variantes de Linux là-bas" - c'est presque impossible. –

+0

@Ulrich. Pas exactement. Je suppose que la solution basée sur la maison est spécifique à l'utilisateur tandis que l'autre est à l'échelle du système, est-ce correct? Peut-être y a-t-il aussi des différences dans les droits d'utilisateur nécessaires et/ou lorsque l'application est lancée? – Silicomancer

Répondre

1

Vous pouvez ajouter une application de différentes manières.

  1. Via le système d'initialisation linux. Pour le plus récent système d'exploitation Linux, systemd est un standard. In this case your need to create systemd unit for your application
  2. Via le gestionnaire de bureau, tels que gnome, kde et d'autres possibles. In this case you need also create specification for autostarting your app.
  3. Via bash files

Je pense, par unité manière preferred systemd, parce que maintenant c'est une façon standard pour processus de démarrage au moment du démarrage et for special user, le cas échéant.

+0

Si je comprends bien, je créerais un nouveau lien ou un nouveau fichier en exécutant une commande shell pour chacune de ces solutions. Donc, il n'y a pas une telle chose comme une API C++ pour cette tâche? – Silicomancer

+0

@Silicomancer Je ne sais pas à propos de cela. – Milovidov

+0

Les applications graphiques ont besoin d'une interaction de l'utilisateur pour faire quelque chose d'utile. C'est pourquoi j'ai prévu de le démarrer * après * login. Pourrait-il générer un problème lors du démarrage * avant * login (au démarrage) en utilisant systemd? – Silicomancer

0

J'ai mis un projet dans GitHub pour gérer la fonction de démarrage automatique dans différents systèmes d'exploitation. C'est écrit en Qt. S'il vous plaît vérifier et laissez-moi savoir si vous avez un problème à l'utiliser: https://github.com/b00f/qautostart