У меня было точно такое же требование для сценария оболочки POSIX, где все помощники (usleep, GNUsleep, sleepenh,... )недоступны.
см.:https://stackoverflow.com/a/54494216
#!/bin/sh
get_up()
{
read -r UP REST
Подумал об этом решении, когда вопрос уже был почти готов, поэтому решил -ответить сам. Это работает надежно, но может быть более простой способ. Если есть способ сделать то, что я спросил напрямую, не стесняйтесь оставлять еще один ответ.
Этот пример кода должен быть -понятным (с комментариями):
#!/bin/bash
DISPLAY=:0 gnome-calculator & # start app
cpid=$! # get process ID of said app
sleep 1 # give it a second to open the window (adjust to needs)
cwid=$(wmctrl -lp | grep " $cpid " | cut -d " " -f 1) # get window ID
wmctrl -i -r "$cwid" -e "0,3200,572,396,415" # move and resize!
# start the 2nd application...
DISPLAY=:0 sol &
cpid=$!
sleep 1
cwid=$(wmctrl -lp | grep " $cpid " | cut -d " " -f 1)
wmctrl -i -r "$cwid" -b "remove,maximized_vert,maximized_horz" # un-maximize
wmctrl -i -r "$cwid" -t 1 # move to desktop 1 (2nd workspace)
wmctrl -i -r "$cwid" -e "0,1497,525,1342,860"
Просто повторите для столько приложений, сколько вам нужно, вы можете использовать wmctrl -l
, чтобы узнать текущую геометрию приложений, чтобы вы знали, что вы хотите передать в аргумент -e
.
Аргумент -e
имеет следующий формат::<gravity>,<X_pos>,<Y_pos>,<width>,<height>
.