Development/Tutorials/D-Bus/Autostart Services (es): Difference between revisions
(Created page with '{{Template:I18n/Language Navigation Bar|Development/Tutorials/D-Bus/Autostart Services}} {{TutorialBrowser| series=D-Bus| name=Creating and Installing D-Bus Autostart Services...') |
No edit summary |
||
Line 11: | Line 11: | ||
}} | }} | ||
== | == 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: | |||
<code ini> | <code ini> | ||
Line 40: | Line 42: | ||
</code> | </code> | ||
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 == | == 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 | 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: | ||
<code ini> | <code ini> |
Revision as of 12:03, 10 September 2009
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)
As of CMake 2.6.1, this macro does not exist natively. To make it exist, you can place this CMake module file in the cmake/ directory of your application, and then you can use the above command.
Por ejemplo, si tu aplicación está en algún lugar en kdebase/workspace, you have to make sure that this cmake module file (which is linked above), exists at 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.