Я совершенно уверен, что это невозможно сделать. Причина заключается в том, что оконные среды, такие как GNOME, ожидают, что программное обеспечение справится с этим, и производители программного обеспечения ожидают, что оконные среды справятся с этим.
Devilspie - хорошая идея, но она выполняет сопоставление с образцом (то есть, если name == 'google-chrome'). Так что же произойдет, если я открою два браузера? Они оба перемещены в одно и то же рабочее пространство? У меня есть 6x3 = 18 рабочих пространств, каждое с определенным экземпляром Chrome. Было бы полезно, если бы я мог переименовать эти программы (например, «google-chrome1», «google-chrome2» ...), но я не могу найти способ сделать это. Поэтому мы должны использовать wmctrl.
wmctrl немного лучше b/c, в дополнение к использованию оконных заголовков, вы также можете использовать идентификаторы окон или просто использовать текущее подсвеченное окно. Идентификаторы окон - трудная задача, потому что они не генерируются сразу. Увидеть ниже
gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
но затем управление не возвращается в командную строку до тех пор, пока не завершится GEDIT. Все, что нам нужно сделать, чтобы обойти это, это поставить знак &
gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
но теперь управление в 99,999% времени возвращается в командную строку ДО того, как менеджеры окон запустят окно, и нет способа найти идентификатор окна. Нужно установить очень сложную технику зацикливания, чтобы проверить, были ли созданы какие-либо новые окна, и угадать, ищем ли мы это окно.
Проверка активного окна с помощью флажка :ACTIVE:
имеет ту же проблему, он не ожидает завершения работы программы.
wmctrl
кажется мне очень странной программой. Кажется, что он был разработан для людей без мыши или неспособных физически перетаскивать свои программы через рабочие пространства.