Apenas minimize as janelas em uma tela
O script abaixo pode ser usado para (apenas) minimizar as janelas na tela esquerda ou somente na tela da direita.
O script é executado com 1
ou 2
como argumento, dependendo de qual tela você deseja minimizar as janelas.
O script
#!/usr/bin/env python3
import subprocess
import sys
scr = sys.argv[1]
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8")
# find the right side of the left screen
edge = [int(s.split("x")[0]) for s in get("xrandr").split() if "+0+" in s][0]
# read the window list
wlist = [w.split() for w in get(["wmctrl", "-lG"]).splitlines()]
for w in wlist:
# retrieve the window id and -position
w_id = w[0]; xpos = int(w[2])
# check the position of the window, decide action depending on arg.
test = xpos < edge if scr == "1" else xpos >= edge
if test:
# check if the window is "normal" and / or minimized
w_data = get(["xprop", "-id", w_id])
if all([not "_NET_WM_STATE_HIDDEN" in w_data,
"_NET_WM_WINDOW_TYPE_NORMAL" in w_data]):
subprocess.Popen(["xdotool", "windowminimize", w_id])
Como usar
-
O script precisa dos dois
wmctrl
exdotool
sudo apt-get install xdotool wmctrl
-
Copie o script em um arquivo vazio, salve-o como
min_screen.py
-
Para executá-lo:
python3 /path/to/min_screen.py 1
para minimizar as janelas na tela esquerda e
python3 /path/to/min_screen.py 2
para minimizar as janelas apenas na tela da direita
- Se tudo funcionar bem, adicione-o a uma tecla de atalho
Notas
- O script assume que o python3 está instalado, mas o código não é específico do python3, acredito.
- O script foi escrito em
Unity
, mas, diferentemente das áreas de trabalho (viewports), o tratamento das telas não deve fazer diferença. - O script não minimiza as janelas com pid 0 (Idle ou outras
tkinter
windows por exemplo). Se isso é um problema, por favor mencione. Pode ser resolvido.
Explicação
O script primeiro procura a borda direita da tela esquerda, procurando a string com +0+
na saída de xrandr
, como:
1680x1050+0+0
A primeira seção, 1680
, é a largura da tela esquerda. Posteriormente, tudo o que temos a fazer é olhar a lista de janelas ( wmctrl -lG
) e ver qual das janelas está "abaixo" ou "acima" 1680
, e agir de acordo, minimizando com o comando xdotool windowminimize <window_id>
(ou não ).
O "teste" finalmente ( mmiz
): xprop -id <window_id>
é verificar se estamos lidando com uma janela "normal" (em vez de, por exemplo, sua área de trabalho, que também é listada como uma janela), e se a janela já está minimizado.
Veja também o comentário no script.
Vinculando o script a um atalho de teclado
1. No Lubuntu
Para editar os atalhos de teclado globais no Lubuntu, consulte Lubuntu minimizar todos os atalhos de teclado da área de trabalho da área de trabalho
Neste caso: salve o script desta resposta em um arquivo no computador, torne este arquivo executável, abra /.config/openbox/lubuntu-rc.xml
e substitua
<keybind key="W-d">
<action name="ToggleShowDesktop"/>
</keybind>
por
<action name="Execute">
<command>/path/to/show_desktop.py 1</command>
</action>
em que /path/to/show_desktop.py
é (é claro) o caminho para o script e 1
ou 2
da tela segmentada. Torne o script executável .
Reinicie o computador para recarregar a configuração.
2. Unidade / Gnomo
Torne o script executável e escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:
/path/to/show_desktop.py 1
... para um atalho de sua escolha