1 votos

¿Cuál es la mejor práctica para una aplicación daemon que se ejecuta como Root y que necesita acceso a la GUI?

Estoy portando una aplicación C++/Qt desde Windows. En Windows, el programa se ejecuta como un servicio. Se desaconseja que los programas que se ejecutan como servicio también interactúen con el usuario y muestren elementos de la interfaz gráfica de usuario.

Por lo tanto, mi programa tiene dos partes. La primera parte se ejecuta como un demonio de servicio y reproduce el audio en segundo plano. El programa se pone en marcha cuando se inicia el ordenador. El segundo programa, que se inicia cuando cualquier usuario se conecta (a través del menú de inicio->Todos los usuarios->Inicio), se comunica a través de un socket local con el demonio de servicio para mostrar una interfaz gráfica de usuario emergente cuando el audio se está reproduciendo.

Al pasar a MacOS, ¿cuál es la mejor práctica para utilizar el mismo programa?

¿Debería fusionar ambos programas en uno solo y ejecutarlo como Root a través de launchd y hacer que el demonio único muestre la GUI además de reproducir el audio?

¿O debería mantenerlo como dos programas como es ahora - el demonio Root reproduciendo audio y encontrar una manera de que el segundo programa pueda ejecutarse automáticamente cuando cada usuario se conecte?

2voto

Steve Evans Puntos 155

En MacOS, debe evitar ejecutar cualquier proceso como root . Apple probablemente sugeriría mantener este tipo de aplicaciones en dos partes. Cada parte debería estar aislada con los derechos apropiados.

El proceso amplio de su ordenador en segundo plano no podrá acceder a la interfaz gráfica. Usted podrá necesito un segundo proceso que se ejecuta dentro de la sesión del usuario para proporcionar una interfaz al usuario.

Utilice launchd para lanzar el proceso amplio de su ordenador a la carta; vea los servicios XPC más abajo. De este modo, mientras no se reproduce nada, se evita el consumo de recursos.

Servicios XPC

En el caso de MacOS, Apple quiere que te comuniques utilizando el Servicios XPC arquitectura. Este enfoque utiliza puertos Mach a bajo nivel, pero sus procesos no necesitan preocuparse demasiado por ese detalle.

0 votos

De acuerdo, ¿entonces es factible en el Mac hacer que el programa GUI se inicie automáticamente cuando cualquier usuario se conecte al sistema?

1 votos

Sí, un trabajo de lanzamiento en /Library/LaunchAgents/ lo proporcionará. Véase man launchd.plist para más detalles. Buena suerte; esto será un reto ;-)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X