Вот первый проход в скрипте, чтобы сделать это с помощью wmctrl
.
У меня работает с Metacity, и должен работать в Openbox, потому что он также EWMH-совместимый.
Полагается на сон GNU. Если у вас этого нет, измените tries
на 10
и sleeptime
на 1
.
start_on_desktop
#!/bin/sh if test $# -lt 2 then echo "Usage: start_on_desktop <desktop> <command> [<command args>...]" 1>&2 exit 2 fi desktop=$1 shift "$@"& pid=$! tries=100 sleeptime=0.1 while test $tries -gt 0 do sleep $sleeptime windows=$(wmctrl -l -p) while read _id _desktop _pid _rest do _ppid=$(ps -o ppid= -p $_pid) if test "$_pid" = "$pid" -o "$_ppid" = "$pid" then id=$_id break 2 fi done <<EOF $windows EOF tries=$((tries - 1)) done if test -n "$id" then wmctrl -i -r "$id" -t "$desktop" exit $? else echo "Window not found" 1>&2 exit 1 fi
А вот скрипт, чтобы узнать текущий рабочий стол.
current_desktop
#!/bin/sh desktops=$(wmctrl -d) while read id stat rest do if test "$stat" = "*" then echo $id exit 0 fi done <<EOF $desktops EOF echo "Cannot determine current desktop" 1>&2 exit 1
Вы можете использовать это, чтобы переместить любое приложение, которое занимает много времени, чтобы вернуться на рабочий стол, где вы его запустили:
start_on_desktop $(current_desktop) <firefox or eclipse or whatever>
Я полагаю, вы бы поместили свои четыре start_on_desktop
строки в .Xclients
или .xsession
.