
Интересно, можно ли «отправить» оконную программу в определенное рабочее пространство, если я запущу ее через командную строку.
Например, я хотел бы запустить свой компьютер с определенным количеством оконных программ, открытых в разных рабочих пространствах. Возможно ли это? Какие основные концепции стоят за этим?
Я использую Unity на Ubuntu 14.04.
Я тоже пытался начать, gdevilspie
но, похоже,затронуты ошибкой.
Спасибо! :)
решение1
Используя wmctrl
, например gedit
:
gedit & sleep 3; wmctrl -i -r `wmctrl -l -p | grep $! | awk '{ print $1 }'` -t 1
gedit &
запустить gedit в фоновом режимеsleep 3
спящий режим в течение 3 секунд, ожидание создания окна (мой компьютер немного медленный)$!
вернуть PID предыдущей команды (например: gedit pid)wmctrl -l -p | grep PID | awk '{ print $1 }'
получить WID из gedit PIDwmctrl -i -r WID -t 1
переместить окно с WID на второй рабочий стол
Другой путь:
wmctrl -s 1 ; gedit & sleep 3; wmctrl -s 0;
- Переключиться на второй рабочий стол, запустить gedit, подождать 3 секунды; переключиться обратно на первый рабочий стол.
Ссылка:
решение2
По сути, это тот же ответ, на который ответил @user.dz, просто параметризованный, и вместо того, чтобы ждать 3 секунды, пока не будет создан обработчик Windows, этот зацикливается, пока не найдет его.
# workspace target
_WS=3
export DISPLAY=:0
gedit &
_PID="$!"
_WID=""
while [[ $_WID == "" ]]; do
_WID=$(wmctrl -l -p 2>/dev/null | grep $_PID | awk '{ print $1 }')
sleep 1
done
wmctrl -i -r $_WID -t $_WS