Pular para o conteúdo

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

Dica publicada em Shell Script / Miscelânea
Xerxes xerxeslins
Hits: 413 Categoria: Shell Script Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

(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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Internet mais rápida no Google Chrome

Debian 9 (netinstall) + Pantheon

Como instalar Bunsenlabs Helium (Debian Stretch)

alias - Comandos personalizados (para iniciantes)

Instalação do Simple Screen Recorder no Debian

Instalando Firefox Quantum no Deepin OS

Configurando acesso à VPN no Ubuntu Linux

Imprimindo repetidamente uma palavra ou frase na tela

Como restaurar as cores do terminal

Unix Emulator Online

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.