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

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

  • xrandr: откуда берется выход VIRTUAL1?
  • Получение лучшего разрешения с использованием X на OpenBSD с VMWare Fusion
  • Второй монитор не работает с драйверами nvidia
  • slim: начать вторую сессию X на tty8
  • Проблемы TrackPoint с последними версиями libinput, Xorg (нужны реквизиты evdev)
  • Что такое коммутационные среды на терминале системы?
  • Клавиши AltGr не работают с Ubuntu в VirtualBox
  • Как отображать изображение на удаленной машине linux через ssh
  • 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)" 
    Linux и Unix - лучшая ОС в мире.