Development/Tutorials/D-Bus/Autostart Services (es)

From KDE TechBase
Revision as of 20:36, 29 June 2011 by Neverendingo (talk | contribs) (Text replace - "<code ini>" to "<syntaxhighlight lang="ini">")


Development/Tutorials/D-Bus/Autostart Services


Creating and Installing D-Bus Autostart Services
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:

<syntaxhighlight lang="ini"> [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:

<syntaxhighlight lang="ini"> [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.