KDEスクリーンロッカーを無効にし、しばらくの間スリープしてから再度有効にするシェルスクリプトを作成したいと思います。しかし、私はスクリーンロッカーを制御するためのシェルコマンドを知りません。どうやってやるの?
D-Bus RPCメカニズムを介してスクリーンロッカーを制御できることを示しています。 qdbus
コマンドを使用して、D-Bus経由でクエリとコマンドを送信できます。アドレス可能なメソッドは、サービスに属するオブジェクトにグループ化されます。ランニング
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
Frew Schmidtはまた、特定のマウスポインター位置に機能を割り当てる個別のシステム構成設定があることが多いため、ポインターを右上隅などに置くことで一時的に画面ロッカーを無効にすることができることも指摘しました。 KDEでは、これは[システム設定]→[ワークスペースの動作]→[画面の端]から制御されます。
私は同じ問題を探していましたが、ここであなたの質問を見つけましたが、あなたの解決策はKDEプラズマ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
はデフォルトで想定されているため削除しますUPDATE:5分のタイムアウトもデフォルトであり、タイムアウトが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