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

6

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

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

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

ИЗМЕНИТЬ. Вот полный скрипт. Сначала вы включаете "показывать мышью при нажатии Ctrl", затем вы добавляете этот скрипт в "Команды в 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, названное ранее, после этого вопроса, который я сделал некоторое время назад никогда не отвечал.

    
задан Francisco Presencia 04.09.2012 в 00:39
источник

3 ответа

5

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

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

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

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

    
ответ дан Oli 04.09.2012 в 16:06
источник
1

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

xdotool windowkill 'xdotool getactivewindow'

Кажется, что делать работу быстро и тихо.

    
ответ дан Oli 04.09.2012 в 01:32
0

Операция «закрыть» на высоком уровне с использованием wmctrl

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

Особенности

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

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

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

Команда

wmctrl -c :ACTIVE:

Ссылка

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

  

-c Грамотно закрыть окно.

и

  

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

    
ответ дан Stéphane Gourichon 21.09.2017 в 11:36