Закрыть активное окно из терминала

Ты знаешь как это сделать? Я знаю, как сделать это с клавиатуры (Alt+F4), я знаю, как сделать это с помощью мыши (нажмите X), и я также знаю, что kill X должен убить процесс с идентификатором X (и killall Y должен убить процесс с именем Y). Но я хочу знать, как убить активное окно из терминала.

Таким образом, из того, что я сказал выше, верным ответом также будет получение идентификатора активного окна.

Прямо сейчас я реализую эту функцию из xte (имитируя Alt + F4), но я хотел бы знать, есть ли способ, который не подразумевает установку другого приложения. Спасибо вам всем.

РЕДАКТИРОВАТЬ. Вот полный сценарий. Сначала вы включаете "показывать мышь при нажатии Ctrl", затем вы добавляете этот скрипт в Commands в CompizConfig и привязываете к правому верхнему углу. При прикосновении к верхнему правому углу вокруг мыши отображается небольшое уведомление. Если вы ничего не делаете, активное окно закроется через 1 секунду. Однако, если вы снова дотронетесь до угла в течение второго, активное окно не закроется.

xte 'key Control_R'; if [ -f ~/.fcont ]; then rm -f -r ~/.fcont; else touch ~/.fcont; sleep 1;  if [ -f ~/.fcont ]; then xkill -id `xprop -root _NET_ACTIVE_WINDOW | cut -d\# -f2`; rm -f -r ~/.fcont; fi fi

Обратите внимание, что я до сих пор использую приложение xte, названное ранее, так как на этот вопрос, который я задал некоторое время назад, так и не был получен ответ.

3 ответа

Решение

И если вы хотите стать действительно волосатым и избегать приложений, которые не установлены по умолчанию:

xkill -id `xprop -root _NET_ACTIVE_WINDOW | cut -d\# -f2`

Опять же, это, кажется, работает довольно хорошо.

ПРИМЕЧАНИЕ. В случае некоторых приложений (см. Комментарии) это может означать, что все окна приложения закрыты. gnome-terminal является одним из таких приложений, но terminator а также xterm не затрагиваются. Я хотел бы предположить, что это скорее ошибка (может быть, по замыслу) в этих приложениях, а не в моей команде.

Высокоуровневая операция закрытия wmctrl

Команда ниже также закрывает текущее активное окно, используя спецификацию EWMH, хотя она требует установки другой программы, которую вы предпочитаете избегать.

конкретика

  • Это операция "закрытия" высокого уровня. Другими словами, оно отправляет приложению то же самое сообщение с просьбой закрыть окно, которое будет отправлено с помощью щелчка мышью на гаджете "закрыть" или комбинации клавиш.
  • Он не эмулирует сочетание клавиш, поэтому работает независимо от того, какие сочетания клавиш используются, или даже если у вас нет настроенных сочетаний клавиш (или, возможно, даже не настроена клавиатура).

В результате ожидается поведение:

  • Он закрывает только само окно, которое предназначено, а не все приложение (протестировано с xfce4-терминал, Chromium, Thunderbird).
  • Кроме того, это дает приложению возможность реагировать на событие закрытия, например запрашивать подтверждение (подтверждается с помощью Thunderbird с окном, в котором пишется письмо, и Firefox запрашивает подтверждение перед закрытием окна с несколькими открытыми вкладками) или, возможно, даже игнорировать событие.

Команда

wmctrl -c:ACTIVE:

Ссылка

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

-с закрыть окно изящно.

а также

Специальная строка ":ACTIVE:" (без кавычек) может использоваться для указания wmctrl использовать текущее активное окно для действия.

Я бы использовал xdotool:

xdotool windowkill `xdotool getactivewindow`

Кажется, делать работу быстро и спокойно.

Другие вопросы по тегам