Как программно отключить блокировку экрана KDE?

Я хочу написать сценарий оболочки, который отключает блокировку экрана KDE, спит некоторое время, а затем снова включает его. Но я не знаю команду оболочки для управления блокировщиком экрана. Как я могу это сделать?

4 ответа

Оказывается, что блокиратором экрана можно управлять с помощью механизма RPC D-Bus. Вы можете отправлять запросы и команды через D-Bus, используя qdbus команда. Адресуемые методы группируются в объекты, которые принадлежат сервисам. Бег

qdbus

распечатывает список услуг, и вы можете просмотреть этот список, чтобы найти службу блокировки экрана, которая org.freedesktop.ScreenSaver, затем

qdbus org.freedesktop.ScreenSaver

распечатывает список адресуемых объектов в сервисе заставки, который включает /MainApplication, (Это также включает в себя /ScreenSaverи хотя у него было несколько полезных методов, у него не было того, что я хотел.) Тогда

qdbus org.freedesktop.ScreenSaver /MainApplication

выводит список вызываемых методов, их аргументы и возвращаемые типы. Тот, который вы хотите здесь

method void org.kde.KApplication.reparseConfiguration()

Сам файл конфигурации находится в $HOME/.kde/share/config/kscreensaverrc и в прямом формате. Вы можете отредактировать этот файл (программно, если необходимо), а затем вызвать

qdbus org.freedesktop.ScreenSaver /MainApplication  reparseConfiguration

перенастроить блокировку экрана с новой конфигурацией.

Полный сценарий оболочки:

timeout=${1:-3600}
perl -i -lpe 's/^Enabled=.*/Enabled=False/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration
sleep $timeout
perl -i -lpe 's/^Enabled=.*/Enabled=True/' $HOME/.kde/share/config/kscreensaverrc
qdbus org.freedesktop.ScreenSaver /MainApplication reparseConfiguration

Фрю Шмидт также отметил, что часто существует отдельный параметр конфигурации системы, который назначает функции определенным позициям указателя мыши, чтобы можно было временно отключить блокировку экрана, поместив указатель в верхний правый угол или что-либо еще. В KDE это контролируется в Системных настройках → Поведение рабочей области → Края экрана.

Я искал ту же проблему и нашел ваш вопрос здесь, но ваше решение не работало без изменений в KDE plasma 5.9, поэтому я продолжил поиск и нашел ваш пост в блоге. Я следовал твоим шагам и заставил это работать:

switch-screenlocker() {
    enabled=""
    case "$1" in
        'on')  enabled='true'  ;;
        'off') enabled='false' ;;
    esac
    if [ -z "${enabled}" -o "$#" -ne 1 ]; then echo "Usage: $0 { on | off }"; return -1; fi
    sed -ni "/Autolock=.*/!{s/\[Daemon]/[Daemon]\nAutolock=${enabled}/;p}" ~/.config/kscreenlockerrc
    qdbus org.freedesktop.ScreenSaver /ScreenSaver configure
}

Я изменился:

  1. расположение файла конфигурации ~/.kde/share/config/kscreensaverrc~/.config/kscreenlockerrc
  2. команда замены. я предпочитаю sed над perl но существенное изменение заключается в том, чтобы заставить его работать, когда нет Autolock=true строка в конфиге. kcmshell5 screenlocker удаляет его, так как он принят по умолчанию
  3. Я завернул это в функцию

ОБНОВЛЕНИЕ: кажется, что 5-минутный тайм-аут также по умолчанию, и если тайм-аут установлен на пять минут, и шкафчик включен, весь [Daemon] раздел может отсутствовать. Я не нашел способ справиться с этой ситуацией с sed легко но вот awk команда, которая обрабатывает это:

awk -i inplace 'function p(){set=1;print "[Daemon]\nAutolock='${enabled}'"}
/\[Daemon]/{p();next}
/Autolock.*/{next}
{print}
ENDFILE{if(!set){print "";p()}}' ~/.config/kscreenlockerrc

Как предполагает Джейкоб,kwriteconfig5может использоваться как более элегантный способ редактирования файла конфигурации. Однако некоторые файлы и функции были перемещены/переименованы. В KDE 5.27 правильные команды:

      kwriteconfig5 --file kscreenlockerrc --group Daemon --key Autolock false
qdbus org.freedesktop.ScreenSaver /ScreenSaver configure

Заменятьfalseсtrueчтобы включить блокировку экрана.

В более новых версиях KDE вы можете использовать kwriteconfig вместо того, чтобы возиться с awk.

      kwriteconfig5 --file kscreensaverrc --group Daemon --key Autolock false
qdbus-qt5 org.freedesktop.ScreenSaver /MainApplication reparseConfiguration
Другие вопросы по тегам