web-dev-qa-db-fra.com

Comment déverrouiller l'écran du script dans KDE plasma 5?

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?

7
Ruslan Prokopchuk

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
11
Syco

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
0
Fitzcarraldo

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 .

0
Evi1M4chine