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.
wmctrl
me 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.