Development/Tutorials/D-Bus/Autostart Services (es): Difference between revisions

From KDE TechBase
(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:
}}
}}


== Abstract ==
== Resumen ==


The D-Bus systems provides a mechanism to autostart applications if they aren't already running when a D-Bus call is made to a service provided by that program. This tutorial demonstrates how to create a D-Bus autostart service and integrate it into your CMake build.
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.


== The Basic Mechanics ==
== Los Mecanismos Básicos ==


Whenever a D-Bus message arrives for the D-Bus server to deliver, it looks for the corresponding service that the message is addressed to on the bus it was sent on.
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ó.


If no such service is currently registered, it then falls back to looking through files kept in the '''services''' directory in the D-Bus data path, e.g. '''/usr/share/dbus-1/services'''. It looks through each '''*.service''' file one by one for a matching service name. It then uses this file to determine what application to launch, waits for the application to finish launching and then (if all goes well) delivers the message.
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.


All of this happens transparently to the application the message originated with.
Todo esto tiene lugar de forma transparente a la aplicación que generó el mensaje.


== Creating a Service File ==
== Creando un fichero de Servicio ==


The service files are simple ".ini style" configuration files, much like standard [http://www.freedesktop.org/wiki/Standards_2fdesktop_2dentry_2dspec .desktop files].
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].


A valid service file:
Un fichero de servicio válido debe cumplir:
* ends with the suffix '''.service'''
* has a '''[D-BUS Service]''' group
* has a Name and Exec key


The contents of an example service file for an application called MyApp might look like this:
* 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>


The Name and Exec keys will be familiar to anyone who has worked with .desktop files before. Unlike .desktop files, though, the Exec line must contain the full path to the application that is to be started.
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.


In the above example, if a message was sent to the '''org.kde.myapp''' service but such a service had not yet been registered on the bus, then '''/usr/bin/myapp''' will be launched. It is then up to myapp to register the proper service on the bus.
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 ==


Once you have created a service file for your application, place it somewhere in the source tree and add a suffix, such as '''.in''' to it. This will allow us to process the file during the build to customize the Exec entry without the risk of overwriting the source file.
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ónn. Puesto que el prefijo de instalación no lo conoceremos hasta el momento de la construcción, necesitamos ajustar ligeramente nuestro servicio de fichero. Using the myapp example again, we might create a file called '''org.kde.myapp.service''' that contains the following content:
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


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:

[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.