Como fechar janelas específicas do X11 a partir do shell?

1

Como janelas específicas podem ser fechadas a partir da linha de comando, sem matar seu aplicativo de controle?

Questione-se com base em um exemplo para torná-lo mais claro:

Recentemente, tive um aplicativo executando o caos e abrindo muitos firefox -windows. Eu precisava fechá-los, sem terminar firefox (pois isso apenas restauraria as janelas via restauração da sessão firefox ). Como as janelas podem ser "simplesmente fechadas" a partir do shell, como apertar o botão fechar?

    
por Golar Ramblar 31.05.2017 / 10:56

2 respostas

0

A combinação de xlsw e xdotool faz o truque.

xlsw lista as janelas pelo título e tipo, xdotool faz ações nelas. Em princípio, xdotool também pode procurar nomes de janelas, mas perdeu o que eram janelas popup.

Em bash :

xlsw | grep 'Firefox/Popup' | awk '{print $1}' | \
  while read _windowID; do xdotool windowclose "${_windowID}"; done

Explicação:

xlsw gera uma lista de IDs de janela juntamente com informações adicionais. A saída parece com:

[...]
0x04800001  u--  Pale moon/pale moon  Pale Moon
0x04800092  uio  NA           Pale Moon
0x04800093  u-o  Pale moon/palemoon  Pale Moon
0x04800099  u-o  Pale moon/palemoon  Pale Moon
0x04828D21  u-o  Pale moon/Popup  Pale Moon
0x0489C5D6  u-o  Pale moon/Popup  Pale Moon
0x03600001  ui-  NA           NA
0x04604E77  --o  Claws-mail/claws-mail  claws-mail
0x04604EAC  --o  Claws-mail/claws-mail  claws-mail
0x04604F22  --o  Claws-mail/claws-mail  claws-mail
0x05C00001  uio  NA           NA
0x05E00001  u--  NA           NA
0x05200007  ui-  NA           NA
0x05E00002  u--  Wine/explorer.exe  
[...]

Em seguida, com o grep -command, as janelas pop-up de firefox serão selecionadas (no exemplo acima, todas elas já desapareceram). awk imprime a primeira entrada, que é a ID da janela, e então xdotool windowclose fechará as janelas (algo como apertando o botão "fechar") sem matar o aplicativo de controle. ( xdotool windowkill mataria o aplicativo.)

xdotool também tem uma compilação na pesquisa: xdotool search 'firefox' windowclose também fecha todas as janelas com 'firefox' no título, mas eu não consegui que funcionasse para diferenciar o 'Popup'.

    
por 31.05.2017 / 10:56
1

Eu notei no seu perfil que você é um usuário no Ask Ubuntu, então eu vou compartilhar o método que eu uso para selecionar e fechar uma janela aberta a partir do shell no Ubuntu. O mesmo método também funciona em muitas outras distruções do Linux.

  • wmctrl -mlpx lista as janelas abertas com os IDs de janela e uma descrição de cada janela. Para o Firefox, a descrição é o título da guia que tem o foco e as janelas pop-up são listadas como janelas separadas.

  • wmctrl -ic <window-id> fecha uma janela com id = window-id do terminal.

Se você não tiver o wmctrl instalado, ele pode ser instalado com sudo apt install wmctrl em todas as versões do Ubuntu atualmente suportadas sem a necessidade de instalação de qualquer outro software do GitHub. Há também um .rpm de wmctrl no banco de dados de pacotes do Fedora.

    
por 31.05.2017 / 11:12