![애플리케이션이 포그라운드에 도달하면 명령 실행(Ubuntu 19.04, X11)](https://linux55.com/image/158813/%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%B4%20%ED%8F%AC%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EC%97%90%20%EB%8F%84%EB%8B%AC%ED%95%98%EB%A9%B4%20%EB%AA%85%EB%A0%B9%20%EC%8B%A4%ED%96%89(Ubuntu%2019.04%2C%20X11).png)
특정 애플리케이션으로 전환할 때 명령을 실행할 수 있기를 원합니다. 특히 터미널로 전환할 때 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은 창이 포커스를 잃을 때도 이벤트를 전송하므로 출력이 원하는 만큼 깨끗하지 않습니다. 그러나 이를 통해 새 창이 포커스를 얻었는지 여부를 알 수 있습니다.