5 votes

Comment exécuter un script au verrouillage / déverrouillage de l'écran dans ubuntu 17.10

Mon problème est le même que celui de cette question mais je n'arrive pas à le faire fonctionner sous ubuntu 17.10 :

Comment lancer une commande ou un script lors du verrouillage/déverrouillage de l'écran ?

Je veux exécuter un script qui change la configuration RVB de mon clavier au verrouillage de l'écran. Le script s'exécute sans problème. 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

Donc en 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 (pas de Wayland) et j'ai essayé vanilla gnome et j'ai le même problème.

J'ai essayé aussi :

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.... bien... très peu de fois...

Je ne sais pas quoi faire, tout conseil sera utile.

5voto

Matthew Points 634

En supposant que vous utilisez Gnome, je pense qu'il est préférable aujourd'hui d'écouter l'application LockedHint plutôt que des messages d'économiseur d'écran. De cette façon, vous n'êtes pas lié à une implémentation d'économiseur d'écran.

Voici un simple script pour le faire :

gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint

Donne ça :

/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 [])

3voto

Jacob Vlijm Points 78990

Utiliser l'existence du processus gnome-screensaver-dialog comme déclencheur alternatif

Si dbus n'est pas possible ou n'est pas préféré pour une raison quelconque, 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

Mode d'emploi

  1. Copiez le script dans un fichier vide, enregistrez-le sous le nom de locktoggle.py

  2. Dans la section tête :

    lock_command = "/path/to/lockscript"
    unlock_command = "/path/to/unlockscript"

    définir les commandes ou les chemins vers les scripts que vous souhaitez exécuter (laissez les guillemets !).

  3. Test- Exécuter le script avec la commande :

    python3 /path/to/locktoggle.py

N.B. Dans le cas où vous n'exécutez une commande que sur l'un ou l'autre des événements verrouillage/déverrouillage, il suffit de commenter la ligne correspondante dans la section :

if lock2 != lock1:
    if lock2:
        # subprocess.Popen(lock_command)
        print("locked")
    else:
        # subprocess.Popen(unlock_command)
        print("unlocked")

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X