¿Cómo desbloquear la pantalla desde el script en KDE Plasma 5?

5

Utilizo pam_usb y quiero bloquear / desbloquear la computadora cuando se extrae / inserta una memoria USB. Para bloqueo uso qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock y funciona perfectamente. Para el desbloqueo, he probado una serie de comandos que he encontrado (la mayoría de ellos están agregados). aquí ), pero no funcionan. Específicamente, si excluimos a aquellos con sintaxis de KDE 4, se dividen en 2 categorías: los que usan qdbus (relevant path here, several variations exists) /MainApplication quit que cuelgan mi Xorg completamente, y los que usan killall contra el proceso de screenlocker, pero el proceso se reinicia instantáneamente después de eso!

Entonces, mi pregunta es: ¿cómo desbloquear la pantalla KDE5 bloqueada con su casillero estándar mediante programación?

Ruslan Prokopchuk
fuente
Quiero hacer lo mismo pero usando BlueProximity {en 1.2.5 actualmente en mi sistema - Debian Old-stable (Wheezy)} - el anterior, escrito más completamente como qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.Lock activa el protector de pantalla en modo "bloqueado" {puede reemplazar el último fragmento con org.freedesktop.ScreenSaver.SetActive true para poner el ahorrador sin un candado} y, en cualquier caso, puede recuperar la pantalla con este último con false - pero el monitor (no toda la pantalla, ya que tengo dos monitores en un virtual ...
SlySven
... la pantalla) no responde a las pulsaciones de teclas ni a los clics del mouse: el otro monitor se comporta normalmente y también lo hacen las ventanas en el estado "inactivo" una vez que tengo & lt; alt & gt; ; alt & gt; & lt; F3 & gt; (operaciones de ventana) para moverlos con las teclas de flecha a la ventana de trabajo. Utilizo KDE y tengo widgets adicionales que se muestran en la pantalla de ahorro (un reloj y un monitor de actividad de las CPU, para esos trabajos de larga duración) y ellos y el widget de "desbloquear / cambiar usuario" también permanecen. La normalidad se restaura ingresando la contraseña en el cuadro de diálogo desde el "desbloqueo". Yo también necesito un comando para desbloquear correctamente.
SlySven
después de un poco de experimentación - Ah, estoy en KDE4 no 5 así que mi: kill `ps ax | grep "kscreenlocker" | grep -v grep | cut -d" " -f 1` no va a ser de mucha ayuda para usted, aunque funciona en mi caso particular ...
SlySven
¡Gracias por compartir una experiencia! Pero desafortunadamente, qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.SetActive false no desbloquea la pantalla en mi Arch Linux con KDE PLasma 5.6.1
Ruslan Prokopchuk
¡No es para mí tampoco! Eso solo mata el salvapantallas si se ha activado con el ... org.freedesktop.SetActive true (es decir, en modo "ahorro") en lugar de a través de ... org.freedesktop.Lock (es decir, en el modo "bloqueo"). Por eso tuve que recurrir a usar kill en cualquier kscreenlocker procesos que se ejecutan bajo mi UID. kscreenlocker es lo que ejecuta los salvapantallas seleccionados al menos en mi configuración, sin embargo YMMV .
SlySven

Respuestas:

7

No es realmente mi respuesta, pero también podría ser útil para otra persona.
Viene de https://forum.kde.org/viewtopic.php?f=289&t=130691#p350000 y funciona en el último archlinux con kde 5.7

loginctl lock-session
loginctl unlock-session
Syco
fuente
¡Gracias! Esto es eso. Ahora puedo administrar mi caja con la llave de hardware con facilidad =)
Ruslan Prokopchuk
1
¿Cómo puedo hacer esto SIN systemd, solo dbus?
Luke-Jr
@ Luke-Jr Esto funciona para mí: qdbus --system org.freedesktop.login1 /org/freedesktop/login1/session/self org.freedesktop.login1.Session.Lock (y Unlock similarmente - probablemente puedas hacer lo mismo con dbus-send, pero no estoy familiarizado con esa herramienta. En cuanto a los sistemas que no tienen systemd, todavía habrá una implementación logind porque la mayoría de los entornos de escritorio requieren logind en estos días.
Stefan Majewsky
1
El servicio 'org.freedesktop.login1' no existe. logind es solo parte de systemd en lo que a mi concierne ...
Luke-Jr
(y mirando a las implementaciones de logind alternativas, ninguna de ellas parece algo que quisiera instalar)
Luke-Jr
0

En el plasma de KDE moderno, el comando es aparentemente:

qdbus --system org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/$session Unlock

El nombre de la sesión se puede obtener de

qdbus --literal --system org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager \
org.freedesktop.ConsoleKit.Manager.GetSessions | sed 's/^.*\(Session[0-9]*\).*$/\1/'

¡Cuidado, ya que puede haber múltiples sesiones! Hay varios GetSession* Funciones para diferentes casos de uso sin embargo.

El problema es ese todas estas funciones por supuesto requiere root!

No se como loginctl evitaría esto, pero sugiere que es posible. De lo contrario tal vez puedas utilizar sudo y permitir que se ejecute un script que hace esto sin ingresar una contraseña .

Evi1M4chine
fuente
0

El bloqueador de pantalla está roto y ya no es posible desbloquear. Para desbloquear el cambio a un terminal virtual (por ejemplo, Ctrl + Alt + F2), inicie sesión y ejecute el comando: sesiones de desbloqueo loginctl Después, vuelva a la sesión en ejecución (Ctrl + Alt + F7).

El mensaje anterior aparece a veces en mi computadora portátil que ejecuta Gentoo Stable con Plasma 5, OpenRC y ConsoleKit. La siguiente secuencia de comandos que lanzo desde TTY1 desbloquea con éxito la sesión X11 en 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
fuente