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サイクルを過剰に消費しないようにします。
コメントで述べたように、わずかに改善されたバージョンが投稿されています 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を追加しません。
これは、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」を付けた引用符の間のコンテンツ。
このスクリプトをスタートアップアプリケーションに追加すると、初めてログインすると機能し始めます。