DBus desde C# (I)
He empezado a jugar un poquito con DBus. Más que nada para ver que nos puede ofrecer. Ya que mi propósito no es explicar qué es DBus, os sugiero para los que no lo conozcáis que os leais éste tutorial.
Para empezar, he decidido hacer un simple programita que activa el salvapantallas. Dado que gnome-screensaver exporta funciones para manejar ésto a través de DBus, era una buena opción. La verdad es que me ha llevado una hora programarlo a pesar de tener 3 líneas de código, ya que no he encontrado nada en internet donde explique cómo usarlo desde C# y que la API difiere un tanto de la que se usa desde C.
El primer paso, ha sido lanzar la aplicación dbus-viewer, un simple programa que te permite ver lo que se está exportando a través del bus de sesión. Así, podemos obtener los métodos, el path, y demás parámetros que tenemos que pasar a las funciones de DBus.
En segundo término he empezado a imaginar cómo usar las clases y métodos. Lo primero que he hecho es programar un programa sencillo en el que no hay paso de parámetros entre los programas. El código es el siguiente:
using DBus;
namespace pruebaboo
{
class MainClass
{public static void Main(string[] args)
{Service srv = DBus.Service.Get (DBus.Bus.GetSessionBus (), “org.gnome.ScreenSaver”);
DBus.MethodCall method = new DBus.MethodCall (srv, “/”, “org.gnome.ScreenSaver”, “Lock”);
method.Send ();
method.Dispose ();
DBus.Bus.GetSessionBus ().Flush ();}
}
}
En la primera línea, se llama al método estático DBus.Service.Get, que permite obtener del bus de sesión especificado en el primer parámetro, el servicio “org.gnome.ScreenSaver”. Un servicio es lo que exporta cada aplicación, es decir, cada aplicación tiene asociado un servicio.
En la segunda y tercera líneas se llama a una función remota. La manera de llamar a la función es realizando una nueva instancia de la clase DBus.MethodCall. En el constructor se pasa como parámetros el servicio que hemos adquirido en la primera línea, la ruta o path hasta la interfaz que contiene la función a la que queremos llamar (en éste caso “/”), la interfaz propiamente dicha (“org.gnome.ScreenSaver”) y el nombre de la función remota (“Lock”). Una vez hecho ésto, sólo nos queda enviar la llamada a la función a través del bus con la llamada al método Send ().
El tema de la ruta o path y la interfaz puede parecer un poco confuso al principio, pero suponeros que la ruta es una especie de namespace, y que la interfaz es el nombre de la clase o de una interfaz como se conoce en cualquier lenguaje de programación orientado a objetos. En caso de que la interfaz no tenga ruta como en éste caso, deberemos utilizar la raíz.
Las dos últimas líneas sirven para decirle al VM que elimine el objeto method de la memoria y para forzar a que envíe todo lo que tiene el buffer local correspondiente al bus de sesión respectivamente.
He observado que mediante DBus puedes manejar bastantes programas, desde el salvapantallas o Gaim hasta Banshee y Tomboy pasando por Beagle, Epiphany, etc… En la próxima entrega os mostraré cómo pasar parámetros a las métodos remotos.
Que lo disfrutéis.
Streaming
Flumotion es un programa que te permite hacer streaming de video y/o audio. Está desarrollado por una empresa situada en Barcelona que se llama Fluendo. Flumotion está programado en python y usa gstreamer con lo que virtualmente se puede hacer streaming en cualquiera de los formatos que soporta dicho framework. Si alguien está pensando en usarlo, puede que éste manual le sirva.
-
Archivos
- Julio de 2009 (1)
- Enero de 2009 (1)
- Diciembre de 2008 (1)
- Septiembre de 2008 (1)
- Julio de 2008 (1)
- Abril de 2008 (1)
- Marzo de 2008 (4)
- Febrero de 2008 (1)
- Noviembre de 2007 (1)
- Octubre de 2007 (4)
- Septiembre de 2007 (1)
- Agosto de 2007 (3)
-
Categorías
-
RSS
Subscripciones RSS
RSS de los Comentarios