1 votes

Quelle est la meilleure pratique pour une application démon s'exécutant en tant que Root qui a besoin d'accéder à l'interface graphique ?

Je suis en train de porter une application C++/Qt depuis Windows. Sous Windows, le programme fonctionne comme un service. Il est déconseillé aux programmes fonctionnant en tant que service d'interagir également avec l'utilisateur et d'afficher des éléments d'interface graphique.

Par conséquent, mon programme comporte deux parties. La première partie fonctionne comme un démon de service et joue de l'audio en arrière-plan. Le programme démarre au démarrage de l'ordinateur. Le second programme, qui démarre lorsque n'importe quel utilisateur se connecte (via le menu Démarrer->Tous les utilisateurs->Démarrage), communique via un socket local avec le démon de service pour afficher une fenêtre pop-up GUI lorsque l'audio est en cours de lecture.

En passant à MacOS, quelle est la meilleure pratique pour utiliser le même programme ?

Devrais-je fusionner les deux programmes en un seul et le lancer en tant que Root via launchd et faire en sorte que le démon unique affiche l'interface graphique et joue l'audio ?

Ou dois-je plutôt conserver deux programmes comme c'est le cas actuellement - le démon racine qui joue l'audio et trouver un moyen pour que le second programme puisse s'exécuter automatiquement lorsque chaque utilisateur se connecte ?

2voto

Graham Miln Points 39606

Sous MacOS, vous devez éviter de lancer un processus en tant que root . Apple suggérerait probablement de garder ce type d'application en deux parties. Chaque partie devrait être mise en bac à sable avec les droits appropriés.

Le processus d'arrière-plan de votre ordinateur ne pourra pas accéder à l'interface graphique. Vous besoin de un second processus s'exécutant dans la session de l'utilisateur pour fournir une interface à l'utilisateur.

Utilice launchd pour lancer un processus large de votre ordinateur à la demande ; voir les services XPC ci-dessous. De cette façon, pendant que rien ne se passe, vous évitez de consommer des ressources.

Services XPC

Pour MacOS, Apple souhaite que vous communiquiez à l'aide de l'option Services XPC l'architecture. Cette approche utilise les ports Mach au bas niveau, mais vos processus ne doivent pas trop se préoccuper de ce détail.

0 votes

Ok. Il est donc possible sur le Mac de faire démarrer automatiquement le programme GUI lorsqu'un utilisateur se connecte au système ?

1 votes

Oui, un job launchd dans /Library/LaunchAgents/ le fournira. Voir man launchd.plist pour plus de détails. Bonne chance ; ce sera un défi ;-)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X