systemadmin.es > Desktop > Controlando el escritorio desde linea de comandos mediante dbus

Controlando el escritorio desde linea de comandos mediante dbus

dbus es un sistema de comunicación entre procesos del escritorio (precisamente la D es de desktop). Vamos a ver como controlar el escritorio mediante el comando qdbus

Primero de todo si ejecutamos qdbus sin parámetros veremos todos los servicios registrados sobre los cuales podemos interactuar:

$ qdbus
:1.1
 org.kde.klauncher
:1.10
 org.kde.knotify
:1.100
:1.104
:1.105
:1.12
 org.kde.plasma-desktop
:1.14
 org.kde.kaccess
:1.157
:1.17
 org.kde.NepomukServer
:1.171
:1.172
:1.177
 org.kde.konsole
:1.188
 org.freedesktop.PackageKit
 org.kde.KPackageKitSmartIcon
:1.192
:1.2
 org.freedesktop.PowerManagement
 org.freedesktop.PowerManagement.Inhibit
 org.kde.Kephal
 org.kde.StatusNotifierWatcher
 org.kde.kded
 org.kde.network
 org.kde.powerdevil
:1.21
 org.freedesktop.ScreenSaver
 org.kde.krunner
 org.kde.screensaver
:1.23
 org.kde.NepomukStorage
 org.kde.nepomuk.services.nepomukstorage
:1.25
 org.kde.kmix
:1.27
 org.gnome.Terminal.Display_0_0
:1.28
 org.gnome.GConf
:1.34
 org.kde.StatusNotifierItem-2190-1
:1.35
:1.36
 org.gtk.vfs.Daemon
:1.37
 org.kde.amarok
 org.mpris.amarok
:1.39
:1.40
:1.42
 org.kde.nepomuk.services.digikamnepomukservice
:1.43
 org.kde.nepomuk.services.nepomukremovablestorageservice
:1.44
 org.kde.nepomuk.services.nepomukfilewatch
:1.45
 org.kde.nepomuk.services.nepomukontologyloader
:1.46
 org.kde.nepomuk.services.nepomukqueryservice
:1.47
 org.freedesktop.ReserveDevice1.Audio0
 org.pulseaudio.Server
:1.5
 org.kde.kglobalaccel
:1.50
 com.redhat.imsettings
:1.51
:1.52
 com.redhat.abrt.applet
:1.56
:1.57
 org.kde.klipper
:1.61
 org.gnome.keyring
:1.62
 com.redhat.imsettings.GConf
:1.63
 org.freedesktop.NetworkManagerUserSettings
:1.64
 org.freedesktop.Notifications
:1.66
 org.kde.printer-applet-2335
:1.68
 org.kde.kwalletd
:1.77
:1.78
 com.redhat.virt.manager
:1.79
:1.8
 org.kde.ksmserver
 org.kde.ksmserver-2154
:1.80
:1.81
:1.82
 org.gtk.Private.GduVolumeMonitor
:1.85
:1.9
 org.kde.kwin
 org.kde.kwin-2160
org.freedesktop.DBus

Un ejemplo puede ser el protector de pantalla, que tiene el identificador org.freedesktop.ScreenSaver. Si ejecutamos qdbus con este id veremos los objetos registrados:

$ qdbus org.freedesktop.ScreenSaver
/
/App
/KBookmarkManager
/KBookmarkManager/kfilePlaces
/KBookmarkManager/konqueror
/KDebug
/KIO
/KIO/Scheduler
/MainApplication
/ScreenSaver

Dentro de cada objeto tiene un conjunto de funciones, los cuales podemos ver si agregamos a la línea de comandos el objeto que nos interesa, por ejemplo /ScreenSaver:

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver
signal void org.freedesktop.ScreenSaver.ActiveChanged(bool)
method bool org.freedesktop.ScreenSaver.GetActive()
method uint org.freedesktop.ScreenSaver.GetActiveTime()
method uint org.freedesktop.ScreenSaver.GetSessionIdleTime()
method uint org.freedesktop.ScreenSaver.Inhibit(QString application_name, QString reason_for_inhibit)
method void org.freedesktop.ScreenSaver.Lock()
method bool org.freedesktop.ScreenSaver.SetActive(bool e)
method void org.freedesktop.ScreenSaver.SimulateUserActivity()
method uint org.freedesktop.ScreenSaver.Throttle(QString application_name, QString reason_for_inhibit)
method void org.freedesktop.ScreenSaver.UnInhibit(uint cookie)
method void org.freedesktop.ScreenSaver.UnThrottle(uint cookie)
method void org.kde.screensaver.configure()
method void org.kde.screensaver.saverLockReady()
method void org.kde.screensaver.setupPlasma()
method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name)
method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name)
method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value)
method QString org.freedesktop.DBus.Introspectable.Introspect()

Podemos ver como existe una función para bloquear la pantalla desde linea de comandos:

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock

También nos da otros datos, como por ejemplo, el tiempo que lleva la sesión del usuario inactiva:

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver GetSessionIdleTime
20

Evidentemente si lanzamos el comando desde la misma sesión nos dará 0

Podemos incluso desde org.kde.kwin enviar la orden de avanzar y retroceder de escritorio virtual mediante comandos:

$ qdbus org.kde.kwin /KWin nextDesktop
$ qdbus org.kde.kwin /KWin previousDesktop

dbus es todo un mundo a explorar a fondo.

2 comments to “Controlando el escritorio desde linea de comandos mediante dbus”

  1. Como lectura complementaria lo que han publicado en nixCraft esta mañana,

    http://www.cyberciti.biz/tips/spice-up-your-unix-linux-shell-scripts.html

    Saludos.

  2. ey ey ayudame, como es el qdbus para cambiar las ventanas al modo alt-tab

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>