É possível mover todas as janelas (ou todas as janelas não minimizadas) de um espaço de trabalho para outro?
Sei que posso mover uma janela para outra área de trabalho com Shift+ Ctrl+ Alt+ arrow, mas ela moverá apenas essa janela focada.
unity
compiz
workspaces
viewports
betatester07
fonte
fonte
Respostas:
Unidade: o que são viewports?
O Ubuntu Unity usa viewports - basicamente um sistema de coordenadas (com a coordenada 0,0 sendo o canto superior esquerdo), onde uma área de trabalho gigante é subdividida em partes que se ajustam à sua resolução de tela. As coordenadas crescem em valor à medida que você se move para a direita e para baixo.
O sistema de coordenadas é relativo. Se minha viewport atual estiver no canto superior esquerdo, tudo em relação a essa viewport terá valores positivos em incrementos de largura e altura. Por exemplo, se minha viewport atual estiver no canto superior esquerdo, a janela do firefox na área de trabalho intermediária que você vê acima será posicionada nos valores x 1366 e y 0, em relação à viewport superior à esquerda. Se minha viewport ativa for a principal do meio, a janela do terminal na viewport superior esquerda estará posicionada no valor x -1327 60. Esse é o principal problema
xdotool
, porquexdotool
não lida com números negativos.Observe também que o canto superior esquerdo da sua viewport atual será sempre assumido pelo xdotool como coordenadas 0 0. Isso significa que só podemos mover as coisas para a direita e para baixo.
Fazendo o xdotool funcionar para o Unity
Agora sabemos que só
xdotool
podemos mover janelas em relação ao canto superior esquerdo (ou seja, você sempre pode mover a janela para baixo e para a direita, mas nunca para cima e para a esquerda). Como fazemos isso funcionar pela unidade. Bem, a ideia básica seriaSolução de script
O script abaixo executa exatamente o procedimento descrito acima. Pode ser chamado com qualquer
-v
sinalizador para especificar manualmente as coordenadas ou você pode usar o-g
sinalizador para abrir o diálogo da GUI.-f
flag dirá ao script para mudar a viewport também; se esse sinalizador não for usado - você permanecerá na janela atual e apenas as janelas serão movidasObtendo o Script
Pode-se copiar o código fonte desta postagem diretamente ou através do github usando as seguintes etapas:
sudo apt-get install git
cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod -R +x sergrep
O arquivo de script será
/opt/sergrep/move_viewport_windows.sh
Para vincular o script ao atalho, consulte Como vincular arquivos .sh à combinação de teclado?
Observe que
wmctrl
exdotool
são necessários para que esse script funcione corretamente. Você pode instalá-los via sudo apt-get install xdotool e wmctrlCódigo fonte
Demo
Gravação Webm do script em ação:
https://www.youtube.com/watch?v=cJMlC41CWWo
Problemas
Devido ao
grid
plug-in do Unity, responsável pelo encaixe da janela, o script não pode mover as janelas maximizadas ou encaixadas à direita / esquerda. Será tentada adicionar a redefinição momentânea e a redefinição desse plug-in para que o script funcione com todas as janelas, mas como a redefinição e redefinição tem um atraso de tempo, ela pode ser abandonada como uma idéia. Se você deseja que o script funcione com todas as janelas, instaleunity-tweak-tool
e desative o snap da janela nas opções do Gerenciador de Janelas.fonte
Ambientes de desktop não baseados em Compiz (XFCE, LXDE, GNOME, KDE ...)
Você pode usar uma combinação de
wmctrl
exdotool
para isso. Primeiro verifique se esses dois utilitários estão instalados:Com as dependências satisfeitas, você poderá usar o seguinte alinhamento para mover todas as janelas da área de trabalho atual para outro:
Uma rápida descrição dos comandos utilizados:
wmctrl -l | awk -v var=$(xdotool get_desktop) '{if ($2 == var) print $0;}' | cut -d' ' -f1
Liste todas as janelas, filtre as que não estão no espaço de trabalho atual e extraia o ID da janela
wmctrl -i -t 2 -r "$i"
Mova a janela com o ID da janela
$i
para a área de trabalho 2.tudo isso é compactado em um
while read ... do; done
loop simples que itera sobre todas as janelas na área de trabalho atualAmbientes de desktop baseados em Compiz (por exemplo, Unity)
Encontrar uma solução para ambientes de desktop como o Unity é dificultado pelo fato de o Compiz (gerenciador de janelas do Unity) não usar desktops no sentido tradicional .
fonte