셸 스크립트 안에서 제목에 문자열이있는 창이 나타날 때까지 기다렸다가 어떤 동작을 수행 한 다음 사라질 때까지 기다렸다가 다른 동작을 수행해야합니다.
어제까지이 간단한 코드가있었습니다. 문제는 스크립트가 실행되는 동안 디스크를 절전 상태로 만들 수 없으며 여러 시간 동안 지속될 수 있다는 것입니다.
while :; do
until wmctrl -l | grep -q "$string"; do # until
sleep 0.5
done
: do action 1
while wmctrl -l | grep -q "$string"; do # while
sleep 0.5
done
: do action 2
done
언급 된 코드가 미친 듯이 디스크를 깨우고 있다고 결정했기 때문에 몇 가지 명령 줄 도구 설명서를 살펴 xdotool
보고 창이 나타날 때까지 기다렸다가 xprop
창이 사라질 때를 결정했습니다.
while :; do
# we use `until' because sometimes xdotool just crashes
until xdotool search -sync -all -onlyvisible -pid $pid -name "$string"; do
:
done
# xdotool isn't trustworthy either, so check again
wmctrl -l | grep -q "$string" ||
continue
: do action 1
xprop -spy -root _NET_CLIENT_LIST_STACKING | while read line; do
if [[ ! ${_line:-} || $_line = $line ]]; then
_line=$line
continue
else
_line=$line
if wmctrl -l | grep -q "$string"; then
continue
else
: do action 2
break
fi
fi
done
done
이제 위 코드와 관련하여 두 가지 새로운 문제가 있습니다.
xdotool
이전에 해결 한 것처럼 충돌 할뿐만 아니라 이상한 결과를 줄뿐만 아니라 창이 나타날 때까지 CPU의 약 15 %를 빨아들입니다. 즉, 디스크를 깨우는 간단한 코드를 없애고 몇 시간 동안 CPU를 낭비하는 코드를 작성한다는 것을 의미했으며, 처음에는 전원을 절약하려고했습니다.xprop -spy
포커스를 변경$_line
하거나 ( 해결 방법을 통해 ) 창을 만들고 파괴 할 때마다 알려 줍니다. xdotool보다 디스크를 더 자주 깨 웁니다.
제목 $string
이 있는 창이 나타나거나 사라질 때까지 기다리는 간단한 프로그램을 찾고 있습니다. 기존 명령 줄 도구, 파이썬 스크립트, 컴파일 가능한 C 코드 일 수 있지만 어떻게 든 정보를 fifo에 쓰더라도 스크립트에 통합 할 수 있어야합니다!
fatrace
디스크 웨이크 업을 확인 하는 데 사용 하고 있으며 bash
읽기 /bin/sleep
및 /usr/bin/wmctrl
반 초마다 알려주므로 실제로 창 이벤트를 기다리는 일부 프로그램을 찾고 있습니다. 뭔가 빠졌습니까?
btrace
from blktrace
을 참조하십시오 .
xwininfo
wmctrl보다 훨씬 적은 공유 라이브러리를로드하고 베어 X에 가까운 수준에서 작동합니다.
strace -f -e trace=file wmctrl -l
유익한 정보가 될 것 같습니다 .