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.
Relacionados
Imprimir
20. April 2010 at 7:15 am :
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.
18. March 2011 at 10:21 am :
ey ey ayudame, como es el qdbus para cambiar las ventanas al modo alt-tab