Me gustaría ejecutar una pantalla si la sesión de Gnome está bloqueada y desbloqueada. ¿Hay alguna manera de que pueda interceptar esto y realizar ciertas acciones cuando el escritorio está bloqueado o desbloqueado?
54
Gnome-screensaver emite algunas señales en dbus cuando sucede algo.
Aquí la documentación (con algunos ejemplos).
Podrías escribir un script que se ejecute:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
y eso hace lo que necesita en cualquier momento dbus-monitor
imprime una línea sobre la pantalla bloqueada / desbloqueada.
Aquí un comando bash para hacer lo que necesitas:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Simplemente reemplace echo SCREEN_LOCKED
y echo SCREEN_UNLOCKED
con lo que necesita.
gnome-screensaver-command
ya está ahí. Pasando-a
agnome-screensaver-command
que va a bloquear la pantalla, mientras que podrás desbloquear con-d
. De todos modos, la mayoría de las aplicaciones gnome usan dbus ampliamente, por lo que podrás hacer muchas cosas increíbles con él.En ubuntu 14.04, el evento DBus para el desbloqueo de bloqueo de pantalla ha cambiado y el nuevo script para vincular los eventos de bloqueo de pantalla y desbloqueo se ve de la siguiente manera
fuente
Hoy en día creo que es mejor escuchar los
LockedHint
mensajes que el protector de pantalla. De esa manera no estás atado a una implementación de protector de pantalla.Aquí hay un script simple para hacer eso:
Da esto:
fuente
Ubuntu 16.04: la solución de ozma no funcionó para mí, sin embargo, esta sí:
fuente
Ampliando en respuesta ya dada.
Si intenta ejecutar un script desde dentro de una sesión
screen
otmux
,$DBUS_SESSION_BUS_ADDRESS
primero deberá encontrar el correcto y pasarlo como un argumento endbus-monitor
lugar de hacerlo--session
. Además, si lo está ejecutando como demonio, debe asegurarse de que solo se ejecute una instancia a la vez (por ejemplo, con un archivo de bloqueo) y de que el script se limpia después de sí mismotrap
. El siguiente ejemplo funcionará como un demonio en la mayoría de los entornos Gnome actuales (probado en Ubuntu GNOME 16.04):Si esto no funciona para usted, probablemente sea porque:
fuente
Si está en Kubuntu o está usando KDE / Plasma como su entorno de escritorio, debe escuchar la interfaz
org.freedesktop.ScreenSaver
, por lo que el script para escuchar ese evento se vería así:fuente
Personalization>Notifications>Notifications>Screensaver
.upstart
sesión de trabajo de apoyodesktop-lock
ydesktop-unlock
eventos enstart on
stanza. Simplemente cree un trabajo .conf para su usuario con activadores y comandos relevantes para llamar debajo$XDG_CONFIG_HOME/upstart/
o$HOME/.config/upstart
como ejemplo a continuación:fuente
Esto es lo que funcionó para mí en Ubuntu 16.04
fuente