11 de jul. de 2011

Controlando aplicativos via DBus por SSH

Precisei controlar o Clementine (media player) através do meu celular e pensei até em fazer um app pra isso.

Li na wiki do projeto clementine-player que existe um protocolo chamado MPRIS que fazia o que eu estava querendo.



O problema surgiu quando tento usar os comandos através de um túnel SSH. Ele necessita do ID de sessão referente ao processo, no caso, o Clementine.

Para resolver isso, basta executar o comando abaixo ou inserí-lo no ~/.bashrc
export DBUS_SESSION_BUS_ADDRESS=`cat /proc/$(pidof clementine)/environ | tr '\0' '\n' | grep DBUS | cut -d '=' -f2-`

Um dia, posso até fazer um app pra controle remoto pro Clementine, usando o módulo dbus python.

Vejam como é fácil:
import dbus

# Clementine lives on the Session bus
session_bus = dbus.SessionBus()

# Get Clementine's player object, and then get an interface from that object,
# otherwise we'd have to type out the full interface name on every method call.
player = session_bus.get_object('org.mpris.clementine', '/Player')
iface = dbus.Interface(player, dbus_interface='org.freedesktop.MediaPlayer')

# Call a method on the interface
metadata = iface.GetMetadata()
print metadata["title"]
print metadata["artist"]