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.