Hier ist ein erster Durchlauf eines Skripts, um dies zu tun wmctrl
.
Funktioniert für mich mit Metacity und sollte in Openbox funktionieren, da es auch EWMH-kompatibel ist.
Verlässt sich auf den GNU-Schlaf. Wenn Sie das nicht haben, wechseln Sie tries
zu 10
und sleeptime
zu 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
Und hier ist ein Skript, um den aktuellen Desktop herauszufinden.
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
Sie können es so verwenden, um Anwendungen zu verschieben, die lange Zeit benötigen, um zum Desktop zurückzukehren, auf dem Sie sie gestartet haben:
start_on_desktop $(current_desktop) <firefox or eclipse or whatever>
Ich denke, Sie würden Ihre vier start_on_desktop
Zeilen in .Xclients
oder einfügen .xsession
.