Script para organizar janelas em cascata no KDE Plasma 6 (Wayland)
No
KDE Plasma 6 com Wayland, ferramentas de manipulação de janelas do X11 (como
wmctrl ou
xdotool) não funcionam.
Para contornar essa restrição e organizar a área de trabalho, criei este script em Bash. Ele gera um "plugin" em JavaScript compatível com a API nativa do
KWin, aplica as regras geométricas e recarrega o compositor via D-Bus.
O que o script faz
Ao ser executado, ele identifica a janela atualmente em foco (ativa) e a centraliza no monitor. Todas as outras janelas em segundo plano são redimensionadas para uma resolução padrão (1280x800) e organizadas em formato de cascata a partir do canto superior esquerdo.
Criando e salvando o script
O script pode ser salvo em qualquer local do seu diretório home. Para facilitar, criaremos o arquivo
cascata.sh diretamente na raiz do seu usuário.
Abra o terminal e execute o bloco de comando abaixo. Ele já contém a estrutura completa e concede as permissões de execução automaticamente:
cat << 'EOF_BASH' > ~/cascata.sh
#!/bin/bash
# Cria a estrutura de diretórios exigida pelo KWin localmente
mkdir -p ~/.local/share/kwin/scripts/cascata-fixa/contents/code
# Escreve o arquivo de metadados
cat << 'META_EOF' > ~/.local/share/kwin/scripts/cascata-fixa/metadata.json
{
"KPlugin": {
"Name": "Cascata Fixa",
"Description": "Janela ativa no centro, resto em cascata",
"Id": "cascata-fixa",
"Version": "1.4"
},
"X-Plasma-API": "javascript",
"X-Plasma-MainScript": "code/main.js",
"KPackageStructure": "KWin/Script"
}
META_EOF
# Escreve a lógica do motor JavaScript do KWin
cat << 'JS_EOF' > ~/.local/share/kwin/scripts/cascata-fixa/contents/code/main.js
var windows = workspace.windowList();
var activeW = workspace.activeWindow;
var largura = 1280;
var altura = 800;
var step = 60;
var tela = workspace.activeScreen.geometry;
var centerX = tela.x + Math.round((tela.width - largura) / 2);
var centerY = tela.y + Math.round((tela.height - altura) / 2);
var cascadeX = tela.x + step;
var cascadeY = tela.y + step;
// Posiciona a janela ativa no centro
if (activeW && activeW.normalWindow && !activeW.specialWindow && !activeW.deleted && !activeW.fullScreen) {
activeW.setMaximize(false, false);
activeW.frameGeometry = {
x: centerX,
y: centerY,
width: largura,
height: altura
};
}
// Posiciona o restante em cascata
for (var i = 0; i < windows.length; i++) {
var w = windows[i];
if (w !== activeW && w.normalWindow && !w.specialWindow && !w.deleted && !w.fullScreen) {
w.setMaximize(false, false);
// Trava de colisão com a borda da tela
if ((cascadeX + largura > tela.x + tela.width) || (cascadeY + altura > tela.y + tela.height)) {
cascadeX = tela.x + step;
cascadeY = tela.y + step;
}
w.frameGeometry = {
x: cascadeX,
y: cascadeY,
width: largura,
height: altura
};
cascadeX += step;
cascadeY += step;
}
}
// Eleva a janela ativa no Z-index
if (activeW) {
workspace.activeWindow = activeW;
}
JS_EOF
# Recarrega o plugin no KWin via D-Bus com prevenção de race condition
kwriteconfig6 --file kwinrc --group Plugins --key cascata-fixaEnabled false
busctl --user call org.kde.KWin /KWin org.kde.KWin reconfigure
sleep 0.3
kwriteconfig6 --file kwinrc --group Plugins --key cascata-fixaEnabled true
busctl --user call org.kde.KWin /KWin org.kde.KWin reconfigure
EOF_BASH
chmod +x ~/cascata.sh
(Nota: Para alterar o tamanho das janelas, basta editar as variáveis largura e altura na linha 16 e 17 do script bash gerado).
Adicionando o atalho de teclado no Plasma 6.6
No Wayland, o compositor parece que bloqueia atalhos globais criados por scripts de terceiros. A maneira na qual consegui executar esta automação foi através do gestor de atalhos padrão do sistema:
- Abra as Configurações do Sistema.
- Navegue até Teclado > Atalhos.
- Clique no botão Adicionar novo e selecione Comando.
- Pressione a combinação de teclas que deseja usar (Exemplo: Meta + Shift + C).
- No campo Ação/Comando, insira o caminho do seu script. Exemplo: /home/SEU_USUARIO/cascata.sh (não use o til ~, escreva o caminho completo).
- Clique em Aplicar.
Pronto. Ao pressionar o atalho, o script será engatilhado e as janelas serão organizadas instantaneamente.
Outras dicas deste autor
Jogo Skullgirls
Steam no Linux Mint - Erro: Couldn't set up Steam data - please contact technical support [Resolvido]
Integração Android + PC sem fio (em 1 segundo)
Excluindo "output errors" nas saídas dos comandos
sudo: /usr/bin/sudo deve ter como dono o uid 0 e tem definido o bit setuid [Resolvido]
Leitura recomendada
Configurando temas no Bashtop
Deixando sua Cloud em Português-BR
Automoatizar backup no pfSense
Twittar via terminal no Linux
basename - Inserindo ponto separador de milhar em expressão numérica
Comentários
Nenhum comentário foi encontrado.