web-dev-qa-db-ja.com

画面のロック/ロック解除を監視する「dbus」コードを呼び出すにはどうすればよいですか?

PulseAudioの「文書化されていない機能」は、画面がロックされているときにTVからラップトップにサウンドを切り替えるため、修正する予定の( nix.stackexchange.com-画面ロック/ロック解除でスクリプトを実行 )のコードスニペットがあります。

コードは非常に単純です:

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while true; do
    read X
    if echo $X | grep "desktop-lock" &> /dev/null; then
      SCREEN_LOCKED;
    Elif echo $X | grep "desktop-unlock" &> /dev/null; then
      SCREEN_UNLOCKED;
    fi
  done
)

私はプログラム/サブルーチンのトップダウンフローまたはループを理解しているとは本当に言えませんが、ここから誰かがそれが機能しているとコメントし、彼の判断を信頼しています。

問題は、スクリプトの命名規則は何ですか?スクリプトを配置する業界標準のディレクトリは何ですか?どうやって呼び出すのですか?すなわち、スタートアップアプリケーション、rc.local、cron @rebootなど。呼び出し後、次の再起動まで実行されると信じています。

毎週水曜日のランドリーの夜にしか使用されない場合でも、永久に実行されるため、理想的にはCPUサイクルを過剰に消費しないようにします。

5

スクリプト

コメントで述べたように、わずかに改善されたバージョンが投稿されています here (@Sergと@muruの助けを借りて):

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while read X; do
    if [[ "$X" =~ desktop-lock ]]; then
      SCREEN_LOCKED;
    Elif [[ "$X" =~ desktop-unlock ]]; then
      SCREEN_UNLOCKED;
    fi
  done
)

どこに保存しますか?

ユーザー専用の場合は$HOMEディレクトリの任意の場所に保存でき、他のユーザーが使用できるようにするには / usr/local/bin に保存できます。

いつ実行しますか?

dbus-monitorはローカルで実行されます。したがって、スクリプトをスタートアップアプリケーションに追加するだけです。ダッシュ>スタートアップアプリケーション>追加です。スクリプトを実行するコマンドを追加し、実行可能にするのが最適です。その後、単にコマンドを追加します。

/path/to/script

おそらく、スクリプトにはGUIが含まれるため、UIが完全にロードされるまで待つ必要があります。その場合は、次を使用します。

/bin/bash -c "sleep 10 && /path/to/script"

注意

スクリプトは、状態が変化するのを待って、システム上のプロセス間の通信をリッスンするだけです。システムに目立った負担anyを追加しません。

3
Jacob Vlijm

これは、Unityを使用したUbuntu 18.04で機能しました

#!/bin/bash
dbus-monitor --session "type='signal',interface='com.canonical.Unity.Session'" | \
(
    # optional: prevent consecutive unlocks/locks
  locked=0
  while true; do
    read X
        echo "$X"
        if echo "$X" | grep "member=Locked" &> /dev/null; then
      if [ $locked -eq 0 ]; then
        echo "Screen locked"
        locked=1
      fi
    Elif echo "$X" | grep "member=Unlocked" &> /dev/null; then
      if [ $locked -eq 1 ]; then
        echo "Screen unlocked"
        locked=0
      fi
    fi
  done
)

Gnomeを使用する場合、2行目を次のように置き換える必要があります。

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \

また、grepの後に「boolean true」と「boolean false」を付けた引用符の間のコンテンツ。

このスクリプトをスタートアップアプリケーションに追加すると、初めてログインすると機能し始めます。

3
1mi