
Suponha que você tenha várias janelas abertas distribuídas em vários monitores. Em seguida, você passa a usar um único monitor (talvez porque tenha removido o laptop da docking station). Todas as suas janelas estão agora em uma tela.
Em seguida, você volta para a configuração de vários monitores. Agora você tem mais espaço na tela, mas todas as suas janelas estão inicialmente empilhadas em um único monitor. Seria bom se suas janelas voltassem para o monitor em que estavam originalmente.
Alguma idéia de como fazer isso acontecer?
Responder1
xdotool
Ideia aproximada, mas você pode conseguir o que deseja criando alguns comandos usandoxdotool
. Então você pode executá-los adequadamente quando tiver 1 ou 2 monitores conectados.
Há um bom exemplo de como você pode fazer isso neste artigo intitulado:Xubuntu – movendo janelas entre monitores.
trecho da seção: Movendo a janela ativa para o outro monitor (finalmente!)
Aqui está o que precisamos fazer:
- Encontre a janela ativa
- Obtenha seu estado maximizado e lembre-se dele
- Remover maximização
- Obtenha sua geometria
- Calcule a nova posição
- Mova isso
- Maximizar com base no estado anterior
- Levante-o
Aqui está um script que faz isso:
wid=`xdotool getactivewindow`
max_state=`xprop -id $wid _NET_WM_STATE`
wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval `xdotool getwindowgeometry --shell $wid`
new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
new_x=0
fi
xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi
xdotool windowraise $wid
Método mais interativo
Também encontrei outra abordagem que também a utilizava, xdotool
mas a envolvia em um script de shell que você poderia associar a uma tecla de atalho. Usando este método você poderia selecionar uma janela para que ela fosse levantada e tivesse foco e pressionando a combinação de teclas de atalho, enviaria o aplicativo para outra janela. O artigo é intitulado:Mover janelas entre monitores.
O método fornece o seguinte script windowmove.sh
:
#!/bin/bash
if [ $1 -eq 2 ]
then
POS1=`xrandr --current | head -2 | tail -1 | cut -d 'x' -f1 | cut -d ' ' -f3`
POS2=0
else
POS1=0
POS2=0
fi
/usr/bin/xdotool windowmove `/usr/bin/xdotool getwindowfocus` $POS1 $POS2
exit 0
POS1 calcula a largura da sua tela principal usando a saída do xrandr. Se você achar que o script não consegue mover as janelas para a direita, mas pode movê-las para a esquerda, tente substituir essa linha por POS1=1920 e substitua 1920 pela largura em pixels do seu monitor principal.
Em seguida, execute o miniaplicativo Keyboard Bindings:
$ gnome-keybinding-properties
OBSERVAÇÃO:Isso pode ser executado em diferentes locais em diferentes distros por meio da GUI.
Crie 2 atalhos de teclado usando estes 2 lançamentos de aplicativos:
- comando de ligação nº 1:
./Scripts/windowmove.sh 1
- comando de ligação nº 2:
./Scripts/windowmove.sh 2
Responder2
Não há necessidade de xdotool
. Você pode gravar todos os locais das janelas e depois restaurá-los com apenas wmctrl
:
Registro:wmctrl -lG > ${rcfile}
Lugar:
while read row; do
IFS=" " read id g x y w h _ <<< ${row}
wmctrl -ir ${id} -e 0,${x},${y},${w},${h}
done < ${rcfile}