Комбинация xlsw и xdotool делает свое дело.
xlsw список окон по их названию и типу, xdotool выполняет над ними действия. В принципе, xdotool может также искать имена окон, но он пропустил всплывающие окна.
В bash:
xlsw | grep 'Firefox/Popup' | awk '{print $1}' | \
while read _windowID; do xdotool windowclose "${_windowID}"; done
Объяснение:
xlsw выводит список идентификаторов окон вместе с дополнительной информацией. Вывод выглядит так:
[...]
0x04800001 u-- Pale moon/pale moon Pale Moon
0x04800092 uio NA Pale Moon
0x04800093 u-o Pale moon/palemoon Pale Moon
0x04800099 u-o Pale moon/palemoon Pale Moon
0x04828D21 u-o Pale moon/Popup Pale Moon
0x0489C5D6 u-o Pale moon/Popup Pale Moon
0x03600001 ui- NA NA
0x04604E77 --o Claws-mail/claws-mail claws-mail
0x04604EAC --o Claws-mail/claws-mail claws-mail
0x04604F22 --o Claws-mail/claws-mail claws-mail
0x05C00001 uio NA NA
0x05E00001 u-- NA NA
0x05200007 ui- NA NA
0x05E00002 u-- Wine/explorer.exe
[...]
Затем, с помощью команды grep , будут выбраны всплывающие окна firefox (в приведенном выше примере они уже исчезли). awk печатает первую запись, которая является идентификатором окна, а затем xdotool windowclose закроет окна (что-то вроде нажатия кнопки закрытия), не убивая управляющее приложение. (xdotool windowkill убьет приложение.)
xdotool также имеет встроенную функцию поиска: xdotool search 'firefox' windowclose также закроет все окна с 'firefox' в их заголовке, но я не смог заставить его работать, чтобы отличить 'Popup'.