J'utilise pam_usb et je veux verrouiller/déverrouiller l'ordinateur lorsque le bâton USB est supprimé/inséré. Pour verrouillage, j'utilise qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock
Et cela fonctionne parfaitement. Pour le déverrouillage, j'ai essayé une série de commandes que j'ai trouvées (la plupart d'entre elles sont agrégées ici ), mais ils ne fonctionnent pas. Plus précisément, si nous excluons ceux avec la syntaxe KDE 4, ils entrent dans 2 catégories: celles utilisant qdbus (relevant path here, several variations exists) /MainApplication quit
qui accrochent mon Xorg complètement et ceux utilisant killall
contre le processus de scénario, mais le processus ne fait que redémarrer instantanément après ça!
Donc, ma question est la suivante: comment déverrouiller l'écran KDE5 enfermé avec son casier standard programmatiquement?
Pas vraiment ma réponse, mais cela pourrait être utile à quelqu'un d'autre aussi.
Cela vient de https://forum.kde.org/viewtopic.php?f=289&t=130691#P3500 Et cela fonctionne sur le dernier Archlinux avec KDE 5.7
loginctl lock-session
loginctl unlock-session
Le casier à écran est cassé et le déverrouillage n'est plus possible. Pour déverrouiller le commutateur sur une borne virtuelle (par exemple, Ctrl + ALT + F2), connectez-vous et exécutez la commande: Sessions de déverrouillage LognStTL se retourne ensuite à la Séance d'exécution (Ctrl + Alt + F7).
Le message ci-dessus apparaît parfois sur mon ordinateur portable Running Gentoo Stable avec Plasma 5, OpenRC et Consolekit. Le script suivant que j'ai lancé à partir de TTY1 déverrouille avec succès la session X11 sur TTY7:
fitzcarraldo@clevow230ss ~ $ cat unlockKDEsession.sh
#!/bin/bash
# Screen locker broken in KDE with ConsoleKit
# See https://forums.gentoo.org/viewtopic-t-1046566.html
# and https://forums.gentoo.org/viewtopic-t-1054134.html
# Find which session is locked
session=Session$(ck-list-sessions | grep -B10 "x11-display = ':0" | grep -o -P '(?<=Session).*(?=:)')
# Create Bash script to unlock session
echo "#!/bin/bash" > /unlock.sh
echo "su -c 'dbus-send --system --print-reply --dest=\"org.freedesktop.ConsoleKit\" /org/freedesktop/ConsoleKit/$session org.freedesktop.ConsoleKit.Session.Unlock'" >> /unlock.sh
chmod +x /unlock.sh
# Run Bash script in another TTY
openvt -s -w /unlock.sh
Sur le plasma KDE moderne, la commande est apparemment:
qdbus --system org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/$session Unlock
Le nom de la session peut être obtenu à partir de
qdbus --literal --system org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager \
org.freedesktop.ConsoleKit.Manager.GetSessions | sed 's/^.*\(Session[0-9]*\).*$/\1/'
Méfiez-vous, car il peut y avoir plusieurs sessions! Il y a plusieurs GetSession*
Fonctions pour des cas d'utilisation variable cependant.
Le problème est que toutes ces fonctions bien sûr nécessitent une racine!
Je ne sais pas comment comment loginctl
circule cela, mais cela le suggère est possible. Sinon, peut-être que vous pouvez tiliser Sudo
et autoriser un script qui doit être exécuté sans entrer de mot de passe .