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?
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.
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é:
~/.kde/share/config/kscreensaverrc
→ ~/.config/kscreenlockerrc
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éfautUPDATE: 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