Ubuntu / Gnome: abra um aplicativo em um espaço de trabalho específico

10

Como dizer a um aplicativo para abrir em um espaço de trabalho específico?


Mais informações:

Eu gosto de ter meu IDE C ++ na área de trabalho 2, meu IDE Java na área de trabalho 3 e meu email, navegador e diversos na área de trabalho quatro. Eu também uso um script de shell que é executado após o logon:

#!/bin/bash
gnome-terminal & # WS 1
netbeans-6-9-1 & # WS2
qtcreator-2-0-1 & # WS 3
firefox & # WS 4
thunderbird & # WS 4

É claro que atualmente tudo é aberto no espaço de trabalho atual ... Existe uma maneira de especificar em qual espaço de trabalho cada comando deve iniciar?

Desde já, obrigado!

bguiz
fonte
11
Se você sempre tem esses programas em execução, a maneira mais fácil e simples é carregá-los onde você quiser e 'lembrar os aplicativos ao fazer logout'
Unfundednut
11
@MrStatic: Obrigado pela sugestão, mas eu preciso que ele seja em um shell script por outras razões - e por que não posso 'lembrar aplicações ao sair'
bguiz

Respostas:

4

Você pode usar o devilspie para definir regras para quais janelas vão em qual espaço de trabalho.

Veja os documentos para um exemplo exatamente disso.

Mas MrStatic também tem uma boa sugestão. Experimente primeiro, talvez você nem precise do seu script de shell.

Se você precisar que seja um comando que possa ser usado em um script de shell, consulte wmctrl .

Mikel
fonte
obrigado pela sugestão, verifique - eu ainda consideraria uma solução somente para CLI uma solução superior; portanto, se você tiver alguma idéia, informe-me!
bguiz
4
Tente wmctrl. Eu adicionei um link na minha resposta acima.
Mikel
7

Eu tentei a wmctrlferramenta e descobri que a solução mais fácil que funcionou para mim é mover a janela com o seguinte comando:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Observe que os números da área de trabalho começam em 0. Por fim, você pode ir para a sua área de trabalho preferida com o comando:

wmctrl -s <WorkspaceNumber>
VGe0rge
fonte
1

Eu uso essa estrutura básica em scripts para abrir um conjunto específico de aplicativos em áreas de trabalho específicas ... o exemplo abre meu terminal e o move para a área de trabalho 1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1
Steve Murphy
fonte
Uma pequena explicação sobre esse código seria bem-vinda. Por que começa com cd? o que você está esperando no até? é "me @ myspc ~" um nome de janela?
Wranvaud 15/03/19
0

Instale o wmctrl

sudo apt install wmctrl

E crie um script (neste exemplo, thunderbird no segundo espaço de trabalho ( -t 1)):

#!/bin/sh
(thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Para saber o nome do seu aplicativo no wmctrl, você pode visualizá-lo tocando no seu terminal:

wmctrl -l

E substitua-o pelo nome correto no script.

Tenha cuidado com a letra maiúscula ("Thunderbird" e não "thunderbird") !!

Outro exemplo com o Firefox no espaço de trabalho 3d ( -t 2):

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

Trabalhe no Debain 10 com canela. Mas deve funcionar para todos

pzim
fonte
-1

Estou bastante certo de que é impossível fazer isso. O motivo é que ambientes com janelas como o GNOME esperam que o software lide com isso, e os fabricantes de software esperam que os ambientes com janelas lidem com isso.

Devilspie é uma boa idéia, mas faz a correspondência de padrões (por exemplo, se name == 'google-chrome'). Então, o que acontece se eu abrir dois navegadores? Ambos são movidos para o mesmo espaço de trabalho? Eu tenho 6x3 = 18 espaços de trabalho, cada um com uma instância específica do chrome. Ajudaria se eu pudesse renomear esses programas (por exemplo, 'google-chrome1', 'google-chrome2' ...), mas não consigo encontrar uma maneira de fazer isso. Então, temos que usar wmctrl.

wmctrl é um pouco melhor b / c, além de usar títulos de janela, você também pode usar IDs de janela ou apenas usar a janela destacada no momento. Os IDs de janela são difíceis de obter porque não são gerados imediatamente. Ver abaixo

gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

mas, em seguida, o controle não será retornado para a linha de comando até que o Gedit seja encerrado. Tudo o que precisamos fazer para contornar isso é colocar um &sinal

gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

mas agora o controle é, 99,999% do tempo, retornado à linha de comando ANTES que o gerenciador de janelas inicie a janela e não há como encontrar o ID da janela. É preciso configurar uma técnica de loop muito complexa para testar se alguma nova janela foi criada e adivinhar se é a janela que estamos procurando.

A verificação da janela ativa por meio do sinalizador :ACTIVE:tem o mesmo problema, e não espera o término da execução do programa.

wmctrlme parece um programa muito estranho. Parece que foi projetado para pessoas sem mouse ou incapazes de arrastar fisicamente seus programas pelos espaços de trabalho.

puk
fonte
O OP disse que o navegador entra no espaço de trabalho quatro. Se for necessário abrir navegadores em outros espaços de trabalho após a execução do script de inicialização da sessão, o último comando nesse script poderá ser suspenso; pkill devilspie.
22614 Mikel