O script que fiz abaixo funciona para mim, requer apenas wmctrl
. Você pode obter isso no Ubuntu com o comando sudo apt-get install wmctrl
.
Se necessário, você pode precisar fazer algumas pequenas modificações .
$BEFORE_WINDOW_NAME
deve ser definido para a última string do nome do seu computador (você pode ver isso de System Settings
> Details
> Device name
).
$MONITORS
isso funcionará com dois monitores (com uma resolução de 1920x####
), embora seja possível redefinir essa variável definindo um elemento para cada monitor conectado ao seu dispositivo e configurando-o para qualquer coordenada x
nessa tela.
$SKIPPED_WINDOWS
é uma lista de janelas que você não deseja mover quando esse script é chamado. Sinta-se à vontade para adicionar ou remover itens. Lista de itens pode ser vista digitando o comando
wmctrl -l
.
Por fim, esse script recebe um parâmetro, por exemplo: window_control.sh n
, em que n
é o monitor que move as janelas.
#! /bin/bash
IFS=$'\n' #prevents window names from breaking in loop
#Computers Name
#change this to the last characters before window names
#0x02a00002 0 mycomputer-Envy-M3970 XdndCollectionWindowImp -> ie:last characters in computer name
BEFORE_WINDOW_NAME="M3970" #MODIFY ME!!
WINDOWS=$(wmctrl -l | grep -oh -P "(?<=$BEFORE_WINDOW_NAME\ ).*")
#MODIFY MONITORS if needed
declare -a MONITORS=(
'0' # Monitor 1
'2150' # Monitor 2
);
declare -a SKIPPED_WINDOWS=(
'XdndCollectionWindowImp'
'unity-launcher'
'unity-panel'
'unity-dash'
'Hud'
'Desktop'
'Ubuntu'
);
#loop through window names and move them
for i in $WINDOWS; do
if [[ " ${SKIPPED_WINDOWS[@]} " =~ " ${i} " ]]; then
# whatever you DO NOT want to do when arr contains value
# echo "Skipping $i"
echo ""
else
# whatever you want to do when arr contains value
echo "Moving $i"
wmctrl -r "$i" -b remove,maximized_vert,maximized_horz
wmctrl -r "$i" -e 0,"${MONITORS[$1]}",0,800,800
wmctrl -r "$i" -b add,maximized_vert,maximized_horz
fi
done