Mova todas as janelas para a área visível
Conforme proposto / solicitado em um comentário, o script abaixo moverá todas as janelas "normais" para a área visível na área de trabalho atual.
A solução é uma solução alternativa; as informações da tela são atualizadas corretamente, dada a diferença na saída de xrandr
, antes e depois da desconexão. A razão pela qual as janelas não se movem sozinhas é (atualmente) desconhecida, a menos que outra resposta resolva o problema.
O script
#!/usr/bin/env python3
import subprocess
# get the resolution of the screen (+0+0)
res = [
int(n) for n in [
s.split("+")[0].split("x")\
for s in subprocess.check_output(["xrandr"]).decode("utf-8").split()\
if "+0+0" in s][0]
]
# create list of windows
w_list = [w.split() for w in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
# filter only "normal" ones
valid = [
w for w in w_list if "_NET_WM_WINDOW_TYPE_NORMAL" in\
subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8")
]
# get the number of valid windows and calculate a targeted position
# the targeted position is a hunch, it will be exact if the window fits completely inside the resolution
# it will work anyway
parts = len(valid)+2
positions = [(int(n*res[0]/parts), int(n*res[1]/parts)) for n in list(range(parts))[1:-1]]
# unmaximaize, move the windows to the visible area (current workspace)
for i, w in enumerate(valid):
subprocess.Popen(["wmctrl", "-ir", w[0], "-b", "remove,maximized_vert,remove,maximized_horz"])
# weird, but sometimes wmctrl refuses to move a window if it is not resized first (?)
subprocess.Popen(["wmctrl", "-ir", w[0], "-e", "0,200,200,200,200"])
subprocess.Popen(["wmctrl", "-ir", w[0], "-e", (",").join(["0", str(positions[i][0]), str(positions[i][1]),w[4],w[5]])])
Como usar
-
O script precisa de
wmctrl
:sudo apt-get install wmctrl
-
Copie o script em um arquivo vazio, como
move_windows.py
-
Teste-o: abra um número de janelas, coloque-as em espaços de trabalho diferentes, etc., ou tente desconectar o segundo monitor. Em seguida, execute o comando:
python3 /path/to/move_windows.py
Todas as janelas "normais" devem se mover para a área visível da área de trabalho atual.
-
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/move_windows.py
Agora você deve poder mover todas as janelas para a área visível no espaço de trabalho atual, com a tecla de atalho.