web-dev-qa-db-fra.com

Comment désactiver par programmation le casier d'écran de KDE?

Je souhaite écrire un script Shell qui désactive le verrou d’écran de KDE, attend un moment, puis le réactive. Mais je ne connais pas de commande Shell pour contrôler le verrouillage de l’écran. Comment puis je faire ça?

4
MJD

Il apparaît que le verrouillage de l'écran peut être contrôlé via le mécanisme RPC D-Bus. Vous pouvez envoyer des requêtes et des commandes via D-Bus à l'aide de la commande qdbus. Les méthodes adressables sont regroupées dans des objets appartenant à des services. Fonctionnement

qdbus

affiche une liste de services que vous pouvez consulter pour trouver le service de verrouillage d’écran, qui est org.freedesktop.ScreenSaver. ensuite

qdbus org.freedesktop.ScreenSaver

imprime une liste d'objets adressables dans le service d'écran de veille, qui comprend /MainApplication. (Il inclut également /ScreenSaver, et bien que cela comportait un certain nombre de méthodes utiles, il n’avait pas ce que je voulais.)

qdbus org.freedesktop.ScreenSaver /MainApplication

affiche une liste de méthodes appelables et leurs types d'argument et de retour. Celui que vous voulez ici est

method void org.kde.KApplication.reparseConfiguration()

Le fichier de configuration lui-même est en $HOME/.kde/share/config/kscreensaverrc et est dans un format simple. Vous pouvez éditer ce fichier (par programmation, si vous le souhaitez) puis invoquer

qdbus org.freedesktop.ScreenSaver /MainApplication  reparseConfiguration

pour reconfigurer le casier d'écran avec la nouvelle configuration.

Le script shell complet est:

timeout=${1:-3600}
Perl -i -lpe 's/^Enabled=.*/Enabled=False/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration
sleep $timeout
Perl -i -lpe 's/^Enabled=.*/Enabled=True/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration

Frew Schmidt a également fait remarquer qu'il existe souvent un paramètre de configuration système distinct qui attribue des fonctions à certaines positions du pointeur de la souris, de sorte qu'il est possible de désactiver temporairement le verrouillage de l'écran en plaçant le pointeur dans le coin supérieur droit. Dans KDE, cela est contrôlé depuis Paramètres système → Comportement de l'espace de travail → Bordures d'écran.

3
MJD

Je cherchais le même problème et j'ai trouvé votre question ici mais votre solution n'a pas fonctionné sans modifications dans KDE plasma 5.9, j'ai donc continué à chercher et trouvé votre article de blog . J'ai suivi vos pas et l'ai fait fonctionner:

switch-screenlocker() {
    enabled=""
    case "$1" in
        'on')  enabled='true'  ;;
        'off') enabled='false' ;;
    esac
    if [ -z "${enabled}" -o "$#" -ne 1 ]; then echo "Usage: $0 { on | off }"; return -1; fi
    sed -ni "/Autolock=.*/!{s/\[Daemon]/[Daemon]\nAutolock=${enabled}/;p}" ~/.config/kscreenlockerrc
    qdbus org.freedesktop.ScreenSaver /ScreenSaver configure
}

J'ai changé:

  1. emplacement du fichier de configuration ~/.kde/share/config/kscreensaverrc~/.config/kscreenlockerrc
  2. commande de remplacement. Je préfère sed à Perl mais le changement important consiste à le faire fonctionner lorsqu'il n'y a pas de ligne Autolock=true dans la configuration. kcmshell5 screenlocker le supprime puisqu'il est supposé par défaut
  3. Je l'ai enveloppé dans la fonction

UPDATE: Il semble que le délai d’expiration du délai de 5 minutes soit également défini par défaut. Si le délai d’expiration est défini sur cinq minutes et que le casier est activé, l'ensemble [Daemon] section peut être manquant. Je n'ai pas trouvé comment gérer facilement cette situation avec sed mais voici une commande awk qui gère cela:

awk -i inplace 'function p(){set=1;print "[Daemon]\nAutolock='${enabled}'"}
/\[Daemon]/{p();next}
/Autolock.*/{next}
{print}
ENDFILE{if(!set){print "";p()}}' ~/.config/kscreenlockerrc
2
Grief