Tenho quase certeza de que é impossível fazer isso. O motivo é que os ambientes de janelas como o GNOME esperam que o software lide com isso, e os criadores de software esperam que os ambientes de janelas lidem com isso.
O Devilspie é uma boa ideia, mas faz correspondência de padrões (ou seja, se nome == '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 de cromo. 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 o 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 realçada atualmente. IDs de janela são uma dor para obter b / c eles não são gerados imediatamente. Veja 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 o controle não é retornado à linha de comando até que o gedit seja encerrado. Tudo o que temos que 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 para a linha de comando ANTES de os gerenciadores de janela iniciarem a janela e não há como encontrar o ID da janela. É preciso configurar uma técnica de looping muito complexa para testar se alguma nova janela foi criada e para adivinhar se é a janela que estamos procurando.
Verificando a janela ativa através do sinalizador :ACTIVE:
tem o mesmo problema, ela não espera que o programa termine de ser executado.
wmctrl
parece-me um programa muito estranho. Parece que foi projetado para pessoas sem mouse ou não é possível arrastar fisicamente seus programas pelos espaços de trabalho.