Comment déverrouiller l'écran d'un script dans KDE Plasma 5?

5

J'utilise pam_usb et souhaite verrouiller / déverrouiller l'ordinateur lorsque la clé USB est retirée / insérée. J'utilise le verrouillage 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 tombent dans 2 catégories: ceux qui utilisent qdbus (relevant path here, several variations exists) /MainApplication quit qui pendent complètement mon Xorg, et ceux qui utilisent killall contre le processus de l'écran, mais le processus redémarre immédiatement après cela!

Ma question est donc la suivante: comment déverrouiller par programmation l’écran de KDE5 verrouillé avec son casier standard?

Ruslan Prokopchuk
la source
Je veux faire la même chose mais en utilisant BlueProximity {à 1.2.5 actuellement sur mon système - Debian Old-stable (Wheezy)} - ci-dessus, écrit de manière plus complète en tant que qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.Lock active l’écran de veille en mode "verrouillé" {vous pouvez remplacer le dernier fragment par org.freedesktop.ScreenSaver.SetActive true mettre en place l’économiseur sans verrou} et, dans les deux cas, l’écran peut revenir avec ce dernier avec false - mais le moniteur (pas tout l'écran car j'ai deux moniteurs dans un virtuel ...
SlySven
... écran) ne réagit pas aux frappes au clavier ou aux clics de souris - l'autre moniteur se comporte normalement, de même que les fenêtres sur "inactives" une fois que je les ai lues & lt; alt & gt; à partir de la fenêtre de travail, puis utilisées & lt ; alt & gt; & lt; F3 & gt; (opérations de la fenêtre) pour les déplacer avec les touches fléchées vers la fenêtre de travail. J'utilise KDE et des widgets supplémentaires apparaissent sur l'écran de veille (une horloge et un moniteur d'activité des processeurs - pour les tâches de construction longues) et ils restent, ainsi que le widget "Déverrouiller / changer d'utilisateur". La normalité est restaurée en saisissant le mot de passe dans la boîte de dialogue à partir du "déverrouillage". Moi aussi, j'ai besoin d'une commande pour déverrouiller correctement.
SlySven
après un peu d'expérimentation - Ah, je suis sur KDE4 pas 5 alors mon: kill `ps ax | grep "kscreenlocker" | grep -v grep | cut -d" " -f 1` ne vous sera pas d'une grande aide même si cela fonctionne dans mon cas particulier ...
SlySven
Merci de partager une expérience! Mais malheureusement, qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.SetActive false ne déverrouille pas l'écran sur mon Arch Linux avec KDE Plasma 5.6.1
Ruslan Prokopchuk
Ce n'est pas pour moi non plus! Cela ne tue l'économiseur d'écran que s'il a été activé avec le ... org.freedesktop.SetActive true (c'est-à-dire en mode "économiseur") plutôt que via ... org.freedesktop.Lock (c'est-à-dire en mode "verrouillé"). C’est pourquoi j’ai dû recourir à kill sur tout kscreenlocker processus en cours d'exécution sous mon UID. kscreenlocker est ce qui exécute le ou les écrans de veille sélectionnés au moins dans ma configuration, cependant YMMV .
SlySven

Réponses:

7

Pas vraiment ma réponse, mais cela pourrait aussi être utile à quelqu'un d'autre.
Ça vient de https://forum.kde.org/viewtopic.php?f=289&t=130691#p350000 et cela fonctionne sur le dernier archlinux avec kde 5.7

loginctl lock-session
loginctl unlock-session
Syco
la source
Merci! C'est il. Maintenant, je peux gérer ma boîte avec clé matérielle avec facilité =)
Ruslan Prokopchuk
1
Comment puis-je faire SANS systemd, juste dbus?
Luke-Jr
@ Luke-Jr Cela fonctionne pour moi: qdbus --system org.freedesktop.login1 /org/freedesktop/login1/session/self org.freedesktop.login1.Session.Lock (et Unlock de même) - Vous pouvez probablement faire la même chose avec dbus-send, mais je ne connais pas cet outil. En ce qui concerne les systèmes dépourvus de systemd, il y aura toujours une implémentation de logind car la plupart des environnements de bureau exigent une logind de nos jours.
Stefan Majewsky
1
Le service 'org.freedesktop.login1' n'existe pas. logind fait partie de systemd en ce qui me concerne ...
Luke-Jr
(et en regardant d'autres implémentations de logind, aucune d'entre elles ne ressemble à quelque chose que j'aimerais installer)
Luke-Jr
0

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/'

Attention, il peut y avoir plusieurs sessions! Il y a plusieurs GetSession* fonctions pour différents cas d'utilisation cependant.

Le problème est que toutes ces fonctions bien sûr besoin de racine!

Je ne sais pas comment loginctl contournerait cela, mais cela suggère que c'est possible. Sinon peut-être que vous pouvez utilisation sudo et autoriser l'exécution d'un script qui le fait sans entrer de mot de passe .

Evi1M4chine
la source
0

Le casier d'écran est cassé et le déverrouillage n'est plus possible. Pour déverrouiller le basculement vers un terminal virtuel (par exemple, Ctrl + Alt + F2), connectez-vous et exécutez la commande: loginctl unlock-sessions Revenez ensuite à la session en cours (Ctrl + Alt + F7).

Le message ci-dessus apparaît parfois sur mon ordinateur portable sous Gentoo Stable avec Plasma 5, OpenRC et ConsoleKit. Le script suivant que je lance à 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
Fitzcarraldo
la source