Como faço para sair do gerenciador de janelas no display X atual?

3

Digamos que o gerenciador de janelas Blackbox esteja sendo executado em dois monitores X diferentes, por exemplo, :0.0 e :1.0 lançados a partir de tty1 e tty2 , respectivamente. De um terminal (emulador), como faço para sair (matar) o processo do Blackbox que usa o atual display X? O comando killall blackbox não serve, pois encerra as duas sessões.

    
por August Karlstrom 26.01.2015 / 21:38

3 respostas

0

Aqui está uma solução inspirada na resposta de 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 -v n="$displayNumber" \
            '$0 ~ " DISPLAY=:" n "[\n .]" { print $1 }'
}

kill "$(ActiveWindowManagerPID blackbox)"
    
por 27.01.2015 / 17:12
1

ps e lista processos com sua linha de comando junto com variáveis de ambiente (inicial?). Filtrar os processos correspondentes a uma linha de comando -display :0 ou a um ambiente DISPLAY=:0 . Eu acredito que este encontrar o wm em questão se iniciado manualmente ou por algum script de sessão. então podemos simplesmente kill .

Eu ouço que existem diferentes implementações ps, o estilo de linha de comando acima (bsd?) funciona na minha máquina com debian procps-ng. consulte o manual, se necessário.

com base na observação de que wm é o proprietário da janela raiz , este arch wiki A página tem uma minisecção com uma abordagem de xprop -root _NET_WM_PID para encontrar o pid,. mas isso não funciona para mim, aparentemente porque é apenas voluntário que x windows forneçam essa propriedade, e meu wm por acaso não segue essa forma.

em relação a outras idéias não funcionais, o xkill pode desanexar clientes exceto a janela raiz, portanto, não preencha nossa necessidade aqui.

    
por 27.01.2015 / 05:36
0

Se você identificou o tty de onde o blackbox foi lançado, ps -t tty1 listará os processos iniciados a partir desse terminal (supondo que tty1 é aquele de onde você iniciou a caixa que deseja matar), então você pode identificar e mate o que você quiser.

    
por 27.01.2015 / 12:42

Tags