5

Я использую pam_usb и хочу заблокировать / разблокировать компьютер при извлечении / вставке USB-накопителя. Для блокировки я использую qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock и он работает отлично. Для разблокировки я попробовал несколько команд , которые я нашел (большинство из них агрегируются здесь), но они не работают. В частности, если мы исключим тех, у кого есть синтаксис KDE 4, они подразделяются на 2 категории: те, которые используют qdbus (relevant path here, several variations exists) /MainApplication quit которые полностью вешают мой Xorg, и те, кто использует killall против процесса screenlocker, но процесс просто перезапускается сразу после этого!

Итак, мой вопрос: как программно разблокировать экран KDE5, заблокированный стандартным блокировщиком?

3 ответа3

7

Не совсем мой ответ, но это может быть полезно и кому-то еще.
Она взята с https://forum.kde.org/viewtopic.php?f=289&t=130691#p350000 и работает на последних версиях archlinux с kde 5.7.

loginctl lock-session
loginctl unlock-session
0

Не работает блокировка экрана, и разблокировка невозможна. Чтобы разблокировать переключение на виртуальный терминал (например, Ctrl+Alt+F2), войдите в систему и выполните команду: loginctl unlock-session. Затем переключитесь обратно на текущий сеанс (Ctrl+Alt+F7).

Вышеуказанное сообщение иногда появляется на моем ноутбуке с Gentoo Stable с Plasma 5, OpenRC и ConsoleKit. Следующий скрипт, который я запускаю из TTY1, успешно разблокирует сеанс X11 на 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

На современной KDE Plasma команда выглядит так:

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

Название сеанса можно получить из

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

Осторожно, так как может быть несколько сеансов! Есть несколько функций GetSession* для различных случаев использования.

Проблема в том, что все эти функции, конечно, требуют root!

Я не знаю, как loginctl это, но это говорит о том, что это возможно. В противном случае, возможно, вы сможете использовать sudo и разрешить запуск сценария без ввода пароля.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .