Development/Tutorials/D-Bus/Autostart Services (es)
Proposed for Deletion |
---|
This page has been proposed for deletion for the following reason:
|
Tutorial Series | D-Bus |
Previous | Introduction Creating Interfaces |
What's Next | n/a |
Further Reading | n/a |
Resumen
El sistema D-Bus provee de un mecanismo para iniciar aplicaciones automáticamente si no se encuentran arrancadas cuando se realiza una llamada D-Bus que requiere de un servicio asociado a dicho programa. Este tutorial demuestra como crear un servicio de inicio automático de D-Bus e integrarlo dentro de tu construcción con CMake.
Los Mecanismos Básicos
Cuando llega un mensaje mediante D-Bus dirigido al servidor de entregas D-Bus, este busca el servicio correspondiente que direcciona el mensaje en el bus desde el que se envió.
Si dicho servicio no se encuentra aún registrado, entonces lo que hace es revisar en los ficheros que se encuentran en el directorio services referenciado por la trayectoria al bus de datos de D-Bus e.g. /usr/share/dbus-1/services. Revisa cada uno de los ficheros *.service para encontrar una coincidencia con el nombre del servicio. Si lo encuentra utiliza dicho fichero para determinar la aplicación que debe arrancar, espera que termine de arrancar y entonces, si todo va bien, entrega el mensaje.
Todo esto tiene lugar de forma transparente a la aplicación que generó el mensaje.
Creando un fichero de Servicio
Los ficheros de servicio son ficheros de configuración "de estilo .ini", similares al estandar. http://www.freedesktop.org/wiki/Standards_2fdesktop_2dentry_2dspec .desktop files].
Un fichero de servicio válido debe cumplir:
- Finaliza con el sufijo .service.
- Tiene un grupo [D-BUS Service].
- Tiene una llave (key) Name y Exec.
El contenido de un fichero de servicio de ejemplo para una aplicación llamada MyApp tiene la siguiente estructura:
[D-BUS Service]
Name=org.kde.myapp
Exec=/usr/bin/myapp
Las llaves o entradas Name y Exec son familiares para cualquiera que haya trabajado previamente con ficheros .desktop. A diferencia de los ficheros .desktop, la línea de Exec debe contener la trayectoria completa hacia la aplicación que se debe arrancar.
En ejemplo expuesto, si se envía un mensaje al servicio org.kde.myapp pero dicho servicio no se encuentar todavía registrado en el bus, entonces se arrancará /usr/bin/myapp. Le corresponde entonces a myapp registrar el servicio apropiado en el bus.
Instalando un fichero de servicio
Una vez que se ha creado el fichero de servicio para la aplicación, se debe ubicar en algún lugar de la fuente y añadirle un sufijo, tal como .in. Esto nos permitirá procesar el fichero durante la construcción para personalizar la entrada Exec sin el riesgo de sobreescribir el fichero fuente.
Utilizaremos una directiva simple CMake para realizar la personalización e instalación. Puesto que el prefijo de instalación no lo conoceremos hasta el momento de la construcción, necesitamos ajustar ligeramente nuestro fichero de servicio. Utilizando de nuevo el ejempo myapp , deberiamos crear un fichero llamado org.kde.myapp.service que contenga lo siguiente:
[D-BUS Service]
Name=org.kde.myapp
Exec=@CMAKE_INSTALL_PREFIX@/bin/myapp
En el fichero CMakeLists.txt añadiremos estas dos líneas:
include(DBusMacros)
dbus_add_activation_service(org.kde.myapp.service.in)
En CMake 2.6.1, esta macro no existe nativamente. Para hacer que exista, se puede ubicareste fichero de módulo CMake en el directorio cmake/ de tu aplicación, pudiendo entonces utilizar dicho mandato.
Por ejemplo, si tu aplicación está en algún lugar en kdebase/workspace, tienes que asegurarte de que este fichero de módulo para (el cual está enlazado más arriba), existe en kdebase/workspace/cmake/modules/PkgConfigGetVar.cmake.
Cuando se ejecuta make install, a properly formed service file will be generated (using the .service file that you have just created), and installed to the correct location on disk. Tu aplicación está ahora preparada para ser activada automáticamente cuando se necesite.