Como fechar todos os aplicativos em um espaço de trabalho?

7

Existe uma extensão do gnome 3 ou um atalho do fedora 25 para fechar todos os aplicativos abertos em um espaço de trabalho? (Fechando a própria área de trabalho pressionando um X por exemplo).

Eu já vi essa funcionalidade em algum lugar há muito tempo, esqueci onde, mas não está disponível no fedora por padrão.

    
por Lynob 07.03.2017 / 23:33

1 resposta

3

A resposta abaixo foi escrita e testada no Gnome3 / Ubuntu. Por favor, mencione se você tiver problemas ao executá-lo no Fedora / Gnome.

Script para fechar todas as janelas de aplicativos em um espaço de trabalho específico no Gnome

O script abaixo fechará todas as janelas em um espaço de trabalho específico, com duas opções:

  1. Quando executado sem argumentos, ele fecha todas as janelas na área de trabalho atual , por exemplo:

    python3 /path/to/script.py
    
  2. quando executado com um espaço de trabalho específico como argumento, ele fechará todas as janelas nesse espaço de trabalho, por exemplo:

    python3 /path/to/script.py 0 
    

    fechará todos os aplicativos no espaço de trabalho 1. Observe que o primeiro espaço de trabalho possui índice 0

O script

#!/usr/bin/env python3
import subprocess
import sys

arg = sys.argv[1:]

def check_close(w_id):
    w_data = get(["xprop", "-id", w_id])
    if "_NET_WM_WINDOW_TYPE_NORMAL" in w_data:
        subprocess.call(["wmctrl", "-ic", w])

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8")

wlist = [l.split() for l in get(["wmctrl", "-lG"]).splitlines()]

arg = arg[0] if arg else [
    l.split()[0] for l in get(["wmctrl", "-d"]).splitlines() if '*' in l
    ][0]

for w in [w[0] for w in wlist if w[1] == arg]:
    check_close(w)

Como usar

  1. O script precisa de wmctrl , que deve ser instalado se não estiver em seu sistema.
  2. Copie o script em um arquivo vazio, salve-o como close_wins.py
  3. Agora teste o script a partir de uma janela de terminal, com o espaço de trabalho de destino como argumento, por exemplo:

    python3 /path/to/close_wins.py 2
    

    para fechar todas as janelas na área de trabalho 3 (0 = worspace 1)

    Para fechar todas as janelas no espaço de trabalho atual , execute-o sem argumentos:

    python3 /path/to/close_wins.py
    
  4. Se tudo funcionar bem, adicione-o a uma tecla de atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/close_wins.py
    

... ou execute de qualquer outra maneira que você preferir.

Explicação

O comando wmctrl -lG nos dará informações sobre as janelas abertas no momento. A saída se parece com:

0x018000f9  0 135  206  650  500  jacob-System-Product-Name pscript_6.py (1,6 GB Volume /media/jacob/6C08-F637) - gedit
0x01600a09  1 283  275  724  443  jacob-System-Product-Name jacob@jacob-System-Product-Name: ~
0x018018be  1 152  407  650  500  jacob-System-Product-Name Untitled Document 1 - gedit
0x0140008c  2 0    101  1280 960  jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox
0x01600a49  2 47   146  724  443  jacob-System-Product-Name jacob@jacob-System-Product-Name: ~

Na segunda coluna, podemos recuperar a localização da janela:

0x0140008c  2 0    101  1280 960  jacob-System-Product-Name gnome - Can I have a countdown window show the time until next suspend? - Ask Ubuntu - Mozilla Firefox

O 2 significa que a janela está no espaço de trabalho 3, pois 0 refere-se ao primeiro espaço de trabalho.

Se o script é executado com o espaço de trabalho como argumento , o script analisa os id correspondentes da janela e subsequentemente os fecha graciosamente com o comando (por exemplo):

wmctrl -ic 0x0140008c

Se o script for executado sem o espaço de trabalho como argumento , o script recuperará o espaço de trabalho atual a partir do comando:

wmctrl -d

e subsequentemente usa internamente o espaço de trabalho atual como argumento.

    
por 08.03.2017 / 10:53