Lo que parecía un atajo fácil
En KDE Plasma hay una opción muy útil dentro del widget de batería: mantener la pantalla activa. Es perfecta para esos momentos en los que estás leyendo documentación, vigilando instalaciones o dejando procesos largos en marcha y no quieres que la pantalla se apague ni que el equipo entre en suspensión por inactividad.
Mi objetivo era simple: crear un atajo de teclado para activar y desactivar esa opción sin depender del widget.
Spoiler: lo que parecía trivial acabó siendo una pequeña sesión de ingeniería inversa con DBus.
Primer intento: tirar de la API clásica de PowerDevil
Lo primero fue probar directamente contra el servicio de energía de KDE, PowerDevil. Cosa que parecía sencilla segñun un usuario de StackOverflow. Empecé con esto:
qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/DPMSControl org.kde.Solid.PowerManagement.Actions.DPMSControl.toggle
Resultado:
Error: org.freedesktop.DBus.Error.UnknownObject
No such object path '/org/kde/Solid/PowerManagement/Actions/DPMSControl'
Eso ya olía a versiones antiguas y comandos desactualizados. El post era de hace 2 años. Probé entonces con métodos que históricamente se usaban para inhibiciones:
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement org.kde.Solid.PowerManagement.clearInhibitions
Y devolvió:
Error: org.freedesktop.DBus.Error.UnknownMethod
No such method 'clearInhibitions'
Luego intenté:
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement org.kde.Solid.PowerManagement.beginSuppressingSleep
qdbus6 org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement org.kde.Solid.PowerManagement.stopSuppressingSleep
Mismo desenlace: método inexistente.
Conclusión rápida: en versiones modernas de KDE Plasma, esa interfaz ya no está donde estaba.
Segundo paso: mirar qué hace KDE de verdad
Cuando la documentación no cuadra con la realidad, toca observar el tráfico real. Así que me puse a espiar DBus mientras activaba manualmente “mantener pantalla activa” desde el widget de batería:
dbus-monitor "interface='org.freedesktop.PowerManagement.Inhibit'"
Al activar la opción apareció:
method call sender=:1.47 -> destination=org.freedesktop.PowerManagement.Inhibit
member=Inhibit
string "org.kde.plasmashell"
string "La miniaplicación de la batería ha activado la supresión de la suspensión y del bloqueo de pantalla"
Y ahí cayó la ficha: el widget no está usando la API interna de PowerDevil para esto, sino la interfaz estándar de Freedesktop:
org.freedesktop.PowerManagement.Inhibit
Reproducirlo desde terminal
Con esa pista, ya podía replicar exactamente el comportamiento.
Activar inhibidor:
qdbus6 org.freedesktop.PowerManagement.Inhibit \
/org/freedesktop/PowerManagement/Inhibit \
org.freedesktop.PowerManagement.Inhibit.Inhibit \
"atajo" "Pantalla siempre activa"
Salida:
9
Ese número es el ID del inhibidor. Para desactivarlo:
qdbus6 org.freedesktop.PowerManagement.Inhibit \
/org/freedesktop/PowerManagement/Inhibit \
org.freedesktop.PowerManagement.Inhibit.UnInhibit \
9
Ver qué inhibidores siguen activos
También se puede inspeccionar el estado general con systemd:
systemd-inhibit --list
Salida típica:
WHO UID USER PID COMM WHAT
ModemManager 0 root 1061 ModemManager sleep
NetworkManager 0 root 1159 NetworkManager sleep
UPower 0 root 983 upowerd sleep
Bloqueador de pantalla 1000 user 1815 kwin_wayland sleep
PowerDevil 1000 user 2162 org_kde_powerde handle-power-key
Muy útil para entender quién está bloqueando suspensión, apagado o acciones relacionadas con inactividad.
Conclusión
Esta mini investigación deja varias cosas claras:
- KDE cada vez delega más en interfaces estándar de Freedesktop.
- Algunas APIs antiguas de PowerDevil ya no están disponibles.
- El control real de estas inhibiciones pasa por DBus y encaja con el ecosistema de systemd.
Con herramientas como qdbus6, dbus-monitor y systemd-inhibit puedes entender qué hace realmente el escritorio por debajo y montar tus propios scripts o atajos con mucha más precisión.
Y sí: misión cumplida. Ya se puede crear un atajo para “mantener la pantalla activa” sin depender del clic en el widget de batería.
El atajo puede ser algo como esto:
#!/bin/bash
FILE="/tmp/kde_inhibit_id"
if [ -f "$FILE" ]; then
ID=$(cat "$FILE")
qdbus6 org.freedesktop.PowerManagement.Inhibit \
/org/freedesktop/PowerManagement/Inhibit \
org.freedesktop.PowerManagement.Inhibit.UnInhibit $ID
rm "$FILE"
else
ID=$(qdbus6 org.freedesktop.PowerManagement.Inhibit \
/org/freedesktop/PowerManagement/Inhibit \
org.freedesktop.PowerManagement.Inhibit.Inhibit \
"atajo" "Pantalla siempre activa")
echo "$ID" > "$FILE"
fi
Basta con meterlo en la carpeta .config, guardarlo como un .sh, darle permisos de ejecución y luego asignarlo a un atajo de teclado desde la configuración del sistema.
¡Nos vemos en el próximo log!
Comentarios