Aqui está um primeiro passo em um script para fazer isso usando wmctrl
.
Funciona para mim com o Metacity e deve funcionar no Openbox porque também é compatível com o EWMH.
Depende do sono GNU. Se você não tiver isso, altere tries
para 10
e sleeptime
para 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
E aqui está um script para descobrir a área de trabalho atual.
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
Você pode usá-lo assim para mover qualquer aplicativo que demore muito tempo para voltar ao desktop onde você o iniciou:
start_on_desktop $(current_desktop) <firefox or eclipse or whatever>
Eu acho que você colocaria suas quatro linhas start_on_desktop
em .Xclients
ou .xsession
.