web-dev-qa-db-ja.com

KDEスクリーンロッカーをプログラムで無効にするにはどうすればよいですか?

KDEスクリーンロッカーを無効にし、しばらくの間スリープしてから再度有効にするシェルスクリプトを作成したいと思います。しかし、私はスクリーンロッカーを制御するためのシェルコマンドを知りません。どうやってやるの?

4
MJD

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では、これは[システム設定]→[ワークスペースの動作]→[画面の端]から制御されます。

3
MJD

私は同じ問題を探していましたが、ここであなたの質問を見つけましたが、あなたの解決策は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
}

私は変わった:

  1. 設定ファイルの場所~/.kde/share/config/kscreensaverrc~/.config/kscreenlockerrc
  2. 置換コマンド。 sedよりPerlの方が好きですが、重要な変更点は、構成にAutolock=true行がない場合に機能させることです。 kcmshell5 screenlockerはデフォルトで想定されているため削除します
  3. 関数にラップしました

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
2
Grief