Development/Tutorials/D-Bus/Autostart Services (es): Difference between revisions
Neverendingo (talk | contribs) m (Text replace - "<code>" to "<syntaxhighlight lang="text">") |
Neverendingo (talk | contribs) m (Text replace - "</code>" to "</syntaxhighlight>") |
||
Line 40: | Line 40: | ||
Name=org.kde.myapp | Name=org.kde.myapp | ||
Exec=/usr/bin/myapp | Exec=/usr/bin/myapp | ||
</ | </syntaxhighlight> | ||
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. | 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. | ||
Line 56: | Line 56: | ||
Name=org.kde.myapp | Name=org.kde.myapp | ||
Exec=@CMAKE_INSTALL_PREFIX@/bin/myapp | Exec=@CMAKE_INSTALL_PREFIX@/bin/myapp | ||
</ | </syntaxhighlight> | ||
En el fichero CMakeLists.txt añadiremos estas dos líneas: | En el fichero CMakeLists.txt añadiremos estas dos líneas: | ||
Line 63: | Line 63: | ||
include(DBusMacros) | include(DBusMacros) | ||
dbus_add_activation_service(org.kde.myapp.service.in) | dbus_add_activation_service(org.kde.myapp.service.in) | ||
</ | </syntaxhighlight> | ||
En CMake 2.6.1, esta macro no existe nativamente. Para hacer que exista, se puede ubicar[[../Accessing_Interfaces/PkgConfigGetVar.cmake|este fichero de módulo CMake]] en el directorio '''cmake/''' de tu aplicación, pudiendo entonces utilizar dicho mandato. | En CMake 2.6.1, esta macro no existe nativamente. Para hacer que exista, se puede ubicar[[../Accessing_Interfaces/PkgConfigGetVar.cmake|este fichero de módulo CMake]] en el directorio '''cmake/''' de tu aplicación, pudiendo entonces utilizar dicho mandato. |
Revision as of 20:51, 29 June 2011
Development/Tutorials/D-Bus/Autostart Services
Languages: عربي | Asturianu | Català | Česky | Kaszëbsczi | Dansk | Deutsch | English | Esperanto | Español | Eesti | فارسی | Suomi | Français | Galego | Italiano | 日本語 | 한국어 | Norwegian | Polski | Português Brasileiro | Română | Русский | Svenska | Slovenčina | Slovenščina | српски | Türkçe | Tiếng Việt | Українська | 简体中文 | 繁體中文
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.