当应用程序到达前台时执行命令(Ubuntu 19.04,X11)

当应用程序到达前台时执行命令(Ubuntu 19.04,X11)

我希望能够在切换到特定应用程序时执行命令。特别是,我希望能够在切换到终端时更改 xmodmap,然后在切换到终端(例如转到 Firefox)时再次更改它。

我想也许可以检测到应用程序何时进入前台,然后运行 ​​xmodmap?

我该如何执行此操作(尤其是在 Ubuntu 19.04、X11 上)?

我发现了一些事情:

X 服务器可以生成一个visibilityNotify 事件。不确定如何使用它以及它是否符合我的要求?

“xdotool search --class Terminalerate %@ focus getwindowpid”通知焦点更改,这很棒。但是,getactivewindow 会导致分段错误,因此我实际上无法获取与 xwininfo 或类似内容一起使用的窗口 id。有什么类似的想法吗?

答案1

以下 perl 脚本跟踪具有“输入焦点”的窗口。

#!/usr/bin/perl
open F,"xdotool search --class '.' behave %@ focus getwindowpid |";
while (<F>) {
    ($f = `xdotool getwindowfocus`) =~s/\n//;
    my $hex = sprintf("0x%X", $f);
    $hex = lc($hex);
    $hex =~ s/0x//;
    print `wmctrl -lGpx | grep '$hex'`;
};

请注意,当窗口失去焦点时,xdotool 也会发送事件,因此输出并不像人们希望的那样干净。然而,这样就可以判断新窗口是否已获得焦点。

相关内容