Как программно отключить блокировку экрана 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
}
Я изменился:
- расположение файла конфигурации
~/.kde/share/config/kscreensaverrc
→~/.config/kscreenlockerrc
- команда замены. я предпочитаю
sed
надperl
но существенное изменение заключается в том, чтобы заставить его работать, когда нетAutolock=true
строка в конфиге.kcmshell5 screenlocker
удаляет его, так как он принят по умолчанию - Я завернул это в функцию
ОБНОВЛЕНИЕ: кажется, что 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