Как выйти из диспетчера окон на текущем дисплее X?

Предположим, у меня есть оконный менеджер Blackbox, работающий на двух разных X-дисплеях, например :0.0 и :1.0 запущенные из tty1 и tty2 соответственно. С терминала (эмулятора), как мне выйти (убить) процесс Blackbox, который использует текущий дисплей X? Команда killall blackbox не подходит, поскольку она завершает оба сеанса.

  • В некоторых видеороликах Netflix отображаются горизонтальные разрывы (мерцающие линии)
  • Почему система X Window использует сервер?
  • программа-обертка для просмотра окна приложения без оконных рамок
  • Как уменьшить площадь видимого окна X11 Root?
  • debian wheezy переключается с внутреннего на внешний монитор после проприетарной установки AMD
  • Почтовый уведомитель IMAP для оконного менеджера / панели задач?
  • Arch Linux: gdm дает «О нет, что-то пошло не так ...»
  • Как запустить xfreerdp на localhost?
  • 3 Solutions collect form web for “Как выйти из диспетчера окон на текущем дисплее X?”

    ps e перечисляет процессы с их командной строкой вместе с (начальными?) переменными среды. фильтров, соответствующих либо командной строке -display :0 либо среде DISPLAY=:0 . Я считаю, что найти wm в вопросе, запускается ли он вручную или с помощью какого-либо скрипта сеанса. то мы можем просто kill его.


    Я слышал, что существуют разные версии ps, описанный выше стиль командной строки (bsd?) работает на моей машине с debian procps-ng. при необходимости обратитесь к руководству.


    основанный на наблюдении, что wm является владельцем корневого окна , эта страница вики-вики имеет мини-сечение с подходом xprop -root _NET_WM_PID чтобы найти pid. но это не работает для меня, по-видимому, потому что это только добровольно для x окон, чтобы обеспечить это свойство, и мой wm, случается, не следует этому способу.

    относительно других неработающих идей, xkill может отсоединять клиентов, кроме корневого окна, поэтому не заполняйте нашу потребность здесь.

    Если вы определили tty, где вы выгрузили черный ящик, ps -t tty1 процессы, запущенные с этого терминала (при условии, что tty1 – это тот, из которого вы запустили Openbox, который хотите убить), тогда вы можете идентифицировать и убить один, который вы хотите.

    Вот решение, вдохновленное ответом soubunmei:

     #!/bin/sh ActiveWindowManagerPID() { local windowManager="$1" local windowManagerPIDs="$(pidof "$windowManager")" local displayNumber="$(echo $DISPLAY \ | awk 'BEGIN { FS = "[:.]" } { print $2 }')" ps e -p "$windowManagerPIDs" \ | awk -vn="$displayNumber" \ '$0 ~ " DISPLAY=:" n "[\n .]" { print $1 }' } kill "$(ActiveWindowManagerPID blackbox)" 
    Interesting Posts

    Почему эхо не называется как / bin / sh -c echo foo выводить что-нибудь?

    Каковы режимы readline, раскладки клавиш и их привязки по умолчанию?

    Как узнать, какой файл Apache работает, когда порт попал?

    Зачем использовать «nohup &», а не «exec &»

    Массив RAID-5 ухудшился, кажется, что это 1 отказ; можно ли восстановить без потери данных?

    Возможно ли выполнить ping 8.8.8.8 с двух интерфейсов, подключенных к разным WAN

    Как это могло случиться: безопасная загрузка моего UEFI, похоже, работает на Ubuntu, но не на Fedora или Debian?

    Как указать определенный каталог на / dev / null?

    Обратное шестнадцатеричное число в bash

    Автоматизация ввода строк в xmacro

    Как остановить мою программу как демон во время работы?

    Как найти find -exec для вызова сценария оболочки?

    Что такое ядро, «инструменты и утилиты GNU», оболочка и диспетчер окон?

    Как сделать USB загрузочным, если есть таблица разделов, которая должна быть сохранена

    Установка: Зачем загружать последний загрузчик?

    Linux и Unix - лучшая ОС в мире.