Script para organizar janelas em cascata no KDE Plasma 6 (Wayland)

Publicado por Xerxes em 07/03/2026

[ Hits: 41 ]

 


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.

Linux: Script para organizar janelas em cascata no KDE Plasma 6 (Wayland)

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.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts