コンピュータがアイドル状態であることを確認し、スクリプトを実行しようとします。rootユーザーとしてx時間後。
最後のユーザー入力が発生してからの時間を測定するためにxprintidleを使用します。問題は、動画や音楽が再生されているときにxprintidleがリセットされないことです。
それで、現在のオーディオ出力レベルを見ることができるターミナルコマンドを見つけました。
私がテストしたほとんどのコマンドは、リアルタイムオーディオ出力レベルではなく、現在の音量パーセント/値設定のみを表示します。
次のコマンドを使用して、オーディオを出力するすべてのアプリケーションソースを取得できました。
pacmd list-sink-inputs | grep -c 'state: RUNNING'
ただし、rootとして実行すると、次のエラーメッセージが表示されます。
No PulseAudio daemon running, or not running as session daemon.
現在のライブオーディオ出力レベルを確認するためにどのコマンド/ファイルがあるかを知っている人はいますか?
または単に確認してください。いいえオーディオ再生中ですか?
答え1
pacmd
環境変数を使用して、XDG_RUNTIME_DIR
実行中のPulseAudioデーモンへのパスを見つけます。ただし、ユーザーが一致しない場合、接続は拒否されます。これは、ルートがpacmd
通常のユーザーのPulseAudioと通信するために直接実行できないことを意味します。
ルートとして実行されるスクリプトは正しいユーザーとして使用され、実行できますが、まだ適切な権限がありますsudo
(例:pacmd
XDG_RUNTIME_DIR
この回答)。スクリプトは複数の値を知る必要があります。
PulseAudioにアクセスできる一般ユーザー(pacmd list-sink-inputs
職場など)として呼び出されます。
id -u
echo "$XDG_RUNTIME_DIR"
1000
出力はそれぞれとです/run/user/1000
。次に、スクリプトでこの値を使用します。次のようになります。
sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 pacmd … | grep …
通常、渡される変数はsudo VAR=value …
制限されます(参考資料を参照man 8 sudo
)。sudo
rootで実行すると何も変わるのかわかりません。設定でこの方法で設定することをsudo
許可しない場合は、XDG_RUNTIME_DIR
シェルを使用してください。
sudo -u '#1000' sh -c 'XDG_RUNTIME_DIR=/run/user/1000 pacmd …' | grep …