ユーザーがフルスクリーンビデオを見ているかどうかを検出する方法は?

Aug 22 2020

現在の状況

30分間アイドル状態になった後、ラップトップを一時停止しています。このスクリプト内でこのコードを使用して、アイドル期間を検出しています。

元の問題

VLC(およびスクリーンセーバーの実行を妨げる他のビデオプレーヤー)は、マウス/キーボードイベントを妨害するために定期的な信号(30秒ごと)を送信するので、スクリーンセーバー(したがって私のコード)は「終了アイドル時間に達しました」と表示され、VLCがビデオプレイリストの再生を終了するまで、目的のコマンドを実行することはありません。

導入された問題

を追跡することにより、小さなユーザー入力を無視することで回避しましたoffset。外乱が非常に短い場合は、前の測定値をoffset変数に加算するだけなので、主な問題はなくなります。ただし、VLCの「ビデオを見ながらスクリーンセーバーを抑制する」機能も無効にしました。ここで、この機能を再び追加したいと思います。

質問

VLCがフルスクリーンビデオ(または、より好ましくは、任意のプレーヤーからの「フルスクリーンビデオ状態」)を再生しているかどうかを検出して、アプリケーション/ VLCがフルスクリーンモードの場合にのみ「スクリーンセーバー」を無効にするにはどうすればよいですか?

回答

4 Quasímodo Aug 22 2020 at 19:56

を使用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ことに注意してください。そのため、これを使用するには、等式比較を行うためにさらに処理が必要です。