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
Playonlinux no Fedora 20
Numix no Arch Linux
Pip e Pip3 no FreeBSD
Ferramentas do Kali no Ubuntu
Restaurando Fontes de Download do Hydra no Linux
Leitura recomendada
Aliases Cores
Renomeando arquivos de maiúsculo para minúsculo
Comentar em bloco
Criando um alias (atalho) no bash - Slackware 10.2
Iniciar Thunderbird minimizado
Comentários
Nenhum comentário foi encontrado.