Aha, xprintidle parece ser a resposta para meus problemas. Ele rastreia o movimento do mouse, bem como o teclado, mas oferece tempo ocioso em milissegundos, o que parece bom o suficiente.
link
sleep 10
echo waiting for me not to be busy
while [ "$(xprintidle)" -lt 3000 ]; do sleep 1; done
echo interrupting
(unset WINDOWID; zenity --title "Annoyer" --entry --text "Are we there yet?")