ユーザーがフルスクリーンビデオを見ているかどうかを検出する方法は?
現在の状況
30分間アイドル状態になった後、ラップトップを一時停止しています。このスクリプト内でこのコードを使用して、アイドル期間を検出しています。
元の問題
VLC(およびスクリーンセーバーの実行を妨げる他のビデオプレーヤー)は、マウス/キーボードイベントを妨害するために定期的な信号(30秒ごと)を送信するので、スクリーンセーバー(したがって私のコード)は「終了アイドル時間に達しました」と表示され、VLCがビデオプレイリストの再生を終了するまで、目的のコマンドを実行することはありません。
導入された問題
を追跡することにより、小さなユーザー入力を無視することで回避しましたoffset
。外乱が非常に短い場合は、前の測定値をoffset
変数に加算するだけなので、主な問題はなくなります。ただし、VLCの「ビデオを見ながらスクリーンセーバーを抑制する」機能も無効にしました。ここで、この機能を再び追加したいと思います。
質問
VLCがフルスクリーンビデオ(または、より好ましくは、任意のプレーヤーからの「フルスクリーンビデオ状態」)を再生しているかどうかを検出して、アプリケーション/ VLCがフルスクリーンモードの場合にのみ「スクリーンセーバー」を無効にするにはどうすればよいですか?
回答
を使用xdotool
して、ルートウィンドウジオメトリとVLCウィンドウジオメトリを取得できます。それらが等しい場合、VLCウィンドウはフルスクリーンです。
gRoot=$(xdotool search --maxdepth 0 '.*' getwindowgeometry | grep 'Geometry:') gActive=$(xdotool getactivewindow getwindowgeometry | grep 'Geometry:')
if [ "$gRoot" = "$gActive" ]; then
echo "The active window is fullscreened."
else
echo "The active window is not fullscreened."
fi
最初のコマンドは--maxdepth 0
、ルートウィンドウのみが検索されるように使用します。
関連するコマンドはxdotool getdisplaygeometry
です。マニュアルには記載されていませんが、チェンジリストに記載されています。表示寸法が返されるのでは[Width] [Height]
なく、フォームで返さ[Width]x[Height]
れるgetwindowgeometry
ことに注意してください。そのため、これを使用するには、等式比較を行うためにさらに処理が必要です。