3

Как можно закрыть определенные окна из командной строки, не убивая их управляющее приложение?

Вопрос на примере, чтобы прояснить это:

Недавно у меня было приложение, запускающее хаос и открывающее много firefox -windows. Мне нужно было закрыть их, не firefox (так как это просто восстановит окна через восстановление сеанса firefox ). Как окна могут быть "просто закрыты" от оболочки, как нажатие кнопки закрытия?

3 ответа3

2

Комбинация 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'.

2

В вашем профиле я заметил, что вы являетесь пользователем Ask Ubuntu, поэтому я поделюсь методом, который я использую, чтобы выбрать и закрыть открытое окно из оболочки в Ubuntu. Тот же метод работает и во многих других дистрибутивах Linux.

  • wmctrl -mlpx перечисляет открытые окна с идентификаторами окон и описанием каждого окна. Для Firefox описание - это заголовок вкладки с фокусом, а всплывающие окна отображаются в виде отдельных окон.

  • wmctrl -ic <window-id> закрывает окно с идентификатором id = window-id из терминала.

Если у вас не установлен wmctrl, его можно установить с помощью sudo apt install wmctrl во все поддерживаемые в настоящее время версии Ubuntu, не требуя установки какого-либо другого программного обеспечения из GitHub. Существует также .rpm wmctrl в базе данных пакетов Fedora.

2

Попробуй просто

wmctrl -c firefox

Со страницы wmctrl: взаимодействуйте с EWMH/NetWM-совместимым X Window Manager.

  • Вы можете быть более строгим с опцией -F :

    -F Аргументы имени окна () должны восприниматься как точные заголовки окна с учетом регистра. Без этой опции заголовки окна считаются нечувствительными к регистру подстроками полного заголовка окна.

  • Чтобы убить определенное окно, вы можете перечислить его с помощью wmctrl -l а затем закрыть его с помощью wmctrl -ic ID .

Также ответили здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .