애플리케이션이 포그라운드에 도달하면 명령 실행(Ubuntu 19.04, X11)

애플리케이션이 포그라운드에 도달하면 명령 실행(Ubuntu 19.04, X11)

특정 애플리케이션으로 전환할 때 명령을 실행할 수 있기를 원합니다. 특히 터미널로 전환할 때 xmodmap을 변경하고 터미널로 전환할 때(예: Firefox로 이동) 다시 변경할 수 있기를 원합니다.

앱이 포그라운드로 나오는 시점을 감지한 다음 xmodmap을 실행하는 것이 가능할 것이라고 생각했습니다.

어떻게 해야 하나요(특히 Ubuntu 19.04, X11의 경우)?

나는 몇 가지 사실을 발견했습니다:

X 서버는 visibleNotify 이벤트를 생성할 수 있습니다. 어떻게 사용하는지, 내 요구 사항에 맞는지 잘 모르시나요?

"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은 창이 포커스를 잃을 때도 이벤트를 전송하므로 출력이 원하는 만큼 깨끗하지 않습니다. 그러나 이를 통해 새 창이 포커스를 얻었는지 여부를 알 수 있습니다.

관련 정보