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
Scroll to Top - Voltar ao topo da página (extensão para Firefox)
Tocando rádios no Iceweasel
Embelezando o Ubuntu 16.04
Como abrir arquivos .swp
Sobrevivendo sem Google Chrome no Debian
Leitura recomendada
Execução anônima em xpdf
Renomeando em massa sem precisar instalar comandos adicionais
Aliases Cores
Telinha simples de loading.... em Shell Script
Como fazer um pendrive butável dar boot no VirtualBox
Comentários
Nenhum comentário foi encontrado.