18.04 espaços de trabalho (gnome) - Como manipular (por exemplo, reordenar arbitrariamente) espaços de trabalho?

18.04 espaços de trabalho (gnome) - Como manipular (por exemplo, reordenar arbitrariamente) espaços de trabalho?

Os espaços de trabalho do Gnome são muito convenientes de usar, mas acho-os muito difíceis de gerenciar. Por exemplo:

  • Fechar a última janela em um espaço de trabalho faz com que esse espaço de trabalho feche (se não imediatamente, então em breve)
  • Novas janelas só podem ser inseridas na área de trabalho vazia sempre presente na parte inferior.
  • A movimentação dos espaços de trabalho exigiria a movimentação de cada janela individualmente e, se um espaço de trabalho ficar vazio durante o processo pretendido, o espaço de trabalho será fechado.

Os recursos que existo, mas não consigo encontrar, são:

  • Capacidade de suprimir o fechamento automático de espaços de trabalho, talvez para substituí-lo por um comando close-(empty)-workspace.
  • Capacidade de girar espaços de trabalho (para que o espaço de trabalho vazio possa ser colocado em qualquer lugar)
  • Capacidade de trocar qualquer espaço de trabalho com seu vizinho inferior

Talvez eu seja apenas ignorante sobre fatos comumente conhecidos. Ou talvez o Gnome ofereça uma API para programar esse comportamento. Ou talvez seja impossível.

Por favor informe.


Adendo: Poucos dias depois de selecionar a resposta para esta pergunta, encontrei uma API relativamente fácil para atingir os objetivos declarados. Essa informação é fornecidaabaixocomo uma nova resposta.

Responder1

Nota: respondendo minha própria pergunta-deixando a resposta aceita porque reflete com precisão o status do Gnome.


Existe um projetoxdotoolque é convenientemente fornecido como pacote gerenciado do Ubuntu 18.04. Oferece acesso de leitura e gravação a desktops, janelas e seus relacionamentos. (Também muitos outros recursos que não usei.)

Usando este pacote foi simples codificar as funções desejadas. O Direct CLI não é útil, mas vinculá-los aos atalhos personalizados do Ubuntu significou que eu era, por exemplo, capaz de mover, selecionar e mover desktops individuais para cima e para baixo com teclas enquanto observava todos os desktops com a visão aérea padrão do Gnomes.

O olho de pássaro padrão do Gnome está disponível através de "Super+a, Super+a" e depois movendo o mouse para o lado direito da tela, onde todas as áreas de trabalho aparecerão em uma disposição vertical.

Para evitar interferência no Gnome, foi necessário desligar o Gnomeáreas de trabalho dinâmicase use odesktops estáticosem vez disso. Usandodesktops estáticosfoi sugerido na resposta selecionada.

Meuo código completo é fornecido como uma essência.

Por exemplo, este trecho de código é para troca de desktops:

swaprelative(){
    nbr=$1
    ndt=$(xdotool get_num_desktops)
    if [[ $ndt -lt 2 ]] ; then return 0 ; fi
    adt=$(xdotool get_desktop)
    bdt=$((( adt + ndt + nbr) % ndt ))
    if [[ $bdt == $adt ]] ; then return 0; fi
    if [[ $bdt -lt 0 ]] ; then
        echo "relative neighbor value $nbr is out of bounds"
        return 1;
    fi
    xdotool search '.*' | while read w ; do
        if ! window_has_desktop $w ; then continue; fi
        wdt=$(xdotool get_desktop_for_window $w)
        if [[ $wdt -eq $adt ]] ; then
            xdotool set_desktop_for_window $w $bdt
        elif [[ $wdt -eq $bdt ]] ; then
            xdotool set_desktop_for_window $w $adt
        fi
    done
    xdotool set_desktop $bdt
}

Deve-se enfatizar que a codificação foi tão simples devido ao poder do xdotoolprojeto. Esse projeto não dependeGnomo, mas antes opera em paralelo comGnomoacessando o mesmoXprimitivos. Provavelmente ele pode ser usado em vários gerenciadores de janelas diferentes, desde que se tome cuidado para evitar interferência mútua entre o WM e o xdotool, (por exemplo, desligar desktops dinâmicos no Gnome).

Responder2

No GNOME Shell, por padrão, não é possível mover espaços de trabalho inteiros com os aplicativos que eles contêm. Embora este seja um recurso poderoso, não conheço ambientes de desktop Linux que apresentem isso.

No que diz respeito a uma API, o GNOME Shell possui o mecanismo de extensões. Na verdade, isso não é uma API. É essencialmente uma "brecha (de segurança potencial)" no sistema onde os desenvolvedores podem injetar seu próprio código javascript para alterar o comportamento do Shell. As muitas extensões do GNOME Shell existentes ilustram o que pode ser feito, em muitos casos com grande sucesso.

Com relação aos recursos que você espera, a situação é a seguinte:

Capacidade de suprimir o fechamento automático de espaços de trabalho, talvez para substituí-lo por um comando close-(empty)-workspace.
Por padrão, o GNOME Shell vem com espaços de trabalho dinâmicos. No entanto, isso pode ser desativado e você pode definir vários espaços de trabalho fixos. Para conseguir isso, instale o (GNOME) Tweaks e selecione "Espaços de trabalho estáticos" na guia "Espaços de trabalho"como ilustrado aqui.

Capacidade de girar espaços de trabalho (para que o espaço de trabalho vazio possa ser colocado em qualquer lugar)
Infelizmente, não há possibilidade de alterar a ordem dos espaços de trabalho (e seu conteúdo). Você só pode mover aplicativos. É claro que, com espaços de trabalho estáticos, um espaço de trabalho vazio permanece vazio.

Capacidade de trocar qualquer espaço de trabalho com seu vizinho inferior
Depende do que você quer dizer com isso. Se você quiser alterar novamente a ordem dos espaços de trabalho, consulte o ponto acima. Se você quer mudar rapidamente de espaço de trabalho, isso é facilmente conseguido com as teclas de atalho Ctrl+ Alt+ Up/ Downou Super+ PgDn/ PgUp.

Mudar para espaços de trabalho estáticos pode lhe dar mais controle sobre o que está onde, com a restrição de que você não pode mover espaços de trabalho inteiros.

Algumas dicas para aprimorar um fluxo de trabalho com espaços de trabalho estáticos

  • Você pode instalar oIndicador de espaço de trabalhoExtensão do GNOME Shell para fornecer um indicador do espaço de trabalho atual em que você está. A extensão permite renomear seus espaços de trabalho se desejar (por exemplo, "1 - Navegação" em vez de "1").

  • Você pode configurar teclas de atalho para alternar rapidamente para um espaço de trabalho específico ou mover um aplicativo, por exemplo:

    gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Super>4']"
    gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['<Super><Shift>4']"
    

Esses comandos configurarão uma tecla de atalho Super+ 4que leva você imediatamente ao WS 4, e uma tecla de atalho Super+ Shift+ 4que move um aplicativo para o WS 4 (da mesma forma que funciona no gerenciador de janelas lado a lado i3).

Responder3

Capacidade de trocar qualquer espaço de trabalho com seu vizinho inferior

Existe uma extensão que permite reordenar espaços de trabalho compatíveis com o Gnome 3.38:Reorder Workspaces

https://extensions.gnome.org/extension/3685/reorder-workspaces/

Observe que os atalhos funcionam apenas na visão geral do espaço de trabalho. Abri um problema para tornar isso possível na visualização da janela:https://github.com/jeremiahmegel/gnome-reorder-workspaces/issues/5

informação relacionada