如何检测用户是否正在观看全屏视频?

cer*_*cem 3 screensaver vlc fullscreen

现在的情况

我在闲置 30 分钟后挂起我的笔记本电脑。我在此脚本中使用此代码来检测空闲持续时间。

原问题

VLC(我很确定阻止屏幕保护程序运行的任何其他视频播放器)会发送一个周期性信号(每 30 秒)来干扰鼠标/键盘事件,因此屏幕保护程序(因此我的代码)认为“结束达到空闲时间”并且在 VLC 完成播放视频播放列表之前永远不会运行所需的命令。

引入问题

我通过跟踪offset. 如果扰动很短,我只是把之前的测量值加到offset变量上,这样,主要问题就没有了。但是,我还禁用了 VLC 的“在观看视频时抑制屏幕保护程序”功能。现在我想重新添加此功能。

如何检测 VLC 是否正在播放全屏视频(或更佳地,来自任何播放器的任何“全屏视频状态”),以便仅当应用程序/VLC 处于全屏模式时才能禁用“我的屏幕保护程序”?

Qua*_*odo 5

您可以使用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
Run Code Online (Sandbox Code Playgroud)

第一个命令使用--maxdepth 0以便仅搜索根窗口。

一个相关的命令是xdotool getdisplaygeometry. 它在手册中没有记录,但在更改列表中有一个提及。请记住,它以表单[Width] [Height]而不是[Width]x[Height]原样返回显示尺寸getwindowgeometry,因此使用它需要进一步处理以进行相等比较。