Не будет абсолютно без хакерского пути.
ICCCM рекомендует определять окна верхнего уровня (в отличие, в частности, от фреймов WM) путем поиска свойства WM_STATE. Таким образом, вы могли бы отличить окна приложений с этим. Однако, когда WM переопределяет окно во фрейм, будет сложно найти окно приложения внутри фрейма. Вам нужно было бы реализовать небольшую программу, чтобы сделать что-то вроде xwininfo -tree, но проверять только окна с установленным WM_STATE.
Относительно хорошим решением было бы использовать libwnck или один из инструментов на его основе (wmctrl, пирог дьявола). Тем не менее, для этого требуется оконный менеджер EWMH (который включает в себя что-то отдаленно современное или вменяемое, но звучит так, будто вы имеете дело с какими-то по-настоящему старомодными вещами).
Преимущество этих инструментов в том, что они используют EWMH для идентификации окон приложения и даже семантического типа этих окон приложения (диалоговое окно и т. Д.).
Кроме того, libwnck устраняет необходимость опроса, он может просто наблюдать за изменениями в списке окон верхнего уровня.