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

Publicado por Xerxes em 07/03/2026

[ Hits: 42 ]

 


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

Portpkg: Portage para Slackware

Lista de jogos grátis na Desura

Habilitando Virtualização no BIOS do HP 6005 Pro

Sem wireless no Ubuntu em notebook Dell [RESOLVIDO]

Limitando taxa de download do Yum (Fedora)

Leitura recomendada

Caracteres Gráficos no Emulador de Dos

Proxy sem autenticação - Configurando através do terminal

Script para avisar compromissos

Kermit e comandos AT

Iniciando automaticamente o Firestarter com o modo gráfico sem senha

  

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