Mon problème est le même de cette question mais je ne peux pas le faire fonctionner dans Ubuntu 17.10:
Comment exécuter une commande ou un script lors du verrouillage/déverrouillage de l'écran?
Je souhaite exécuter un script qui modifie la configuration RVB de mon clavier lors du verrouillage de l'écran. Le script fonctionne sans faille. Le problème est d'obtenir l'événement du verrouillage/déverrouillage. J'ai essayé d'utiliser dbus-monitor comme indiqué dans cette question et comme indiqué ici:
https://people.gnome.org/~mccann/gnome-screensaver/docs/gnome-screensaver.html
Alors exécutant ce script:
#!/bin/bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
( while true
do read X
if echo $X | grep "boolean true" &> /dev/null; then
echo "locking at $(date)" >> $HOME/time_xprofile
Elif echo $X | grep "boolean false" &> /dev/null; then
echo "unlocking at $(date)" >> $HOME/time_xprofile
fi
done )
Mais cela ne fonctionne que ... quelques fois (!) .... Je ne comprends pas ce qui se passe.
J'utilise Ubuntu 17.10 avec le gnome d'ubuntu sur X-server (no Wayland) et j'ai essayé Vanilla gnome et le même problème.
J'ai aussi essayé:
dbus-monitor > out.log
Pour voir TOUTES les traces qui se produisent lors du verrouillage/déverrouillage et il ne semble pas que le signal ... Seulement .... eh bien ... très peu de fois ...
Je ne sais pas quoi faire, tout conseil sera utile.
En supposant que vous utilisiez Gnome, je pense qu’aujourd’hui, il est préférable d’écouter les messages LockedHint
plutôt que les messages d’économiseur d’écran. De cette façon, vous n'êtes pas lié à une implémentation d'économiseur d'écran.
Voici un script simple pour le faire:
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
Donne ceci:
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <true>}, @as [])
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <false>}, @as [])
Si dbus
n'est pas possible ou non préféré pour quelque raison que ce soit, vous pouvez utiliser l'existence du processus gnome-screensaver-dialog
comme déclencheur. Le processus est appelé sur l'écran de verrouillage.
Dans un script python:
#!/usr/bin/env python3
import psutil
import time
import subprocess
procname = "gnome-screensaver-dialog"
lock_command = "/path/to/lockscript"
unlock_command = "/path/to/unlockscript"
lock1 = None
while True:
time.sleep(2)
lock2 = procname in (p.name() for p in psutil.process_iter())
if lock2 != lock1:
if lock2:
subprocess.Popen(lock_command)
print("locked")
else:
subprocess.Popen(unlock_command)
print("unlocked")
lock1 = lock2
locktoggle.py
Dans la section principale:
lock_command = "/path/to/lockscript"
unlock_command = "/path/to/unlockscript"
définissez les commandes ou les chemins d'accès aux scripts que vous souhaitez exécuter (laissez les guillemets doubles!)
Tester le script avec la commande:
python3 /path/to/locktoggle.py
N.B. Au cas où vous n'exécuteriez une commande que sur l'un des événements verrouillé/déverrouillé, commentez simplement la ligne correspondante dans la section:
if lock2 != lock1:
if lock2:
# subprocess.Popen(lock_command)
print("locked")
else:
# subprocess.Popen(unlock_command)
print("unlocked")