То, когда я запускаю программу GUI, это - окно, появляется на в настоящее время активном рабочем столе (по существу на случайном рабочем столе).
Как заставить его появиться на определенном рабочем столе? Например, при запуске я хочу, чтобы определенные программы были запущены и распределены рабочим столам.
Я уже настроил файл конфигурации openbox, чтобы вынудить некоторые программы всегда запуститься на определенном рабочем столе.
Идеально это должно быть похожим:
start_on_desktop 1 gnome-terminal --tab -e program1 --tab -e program2
start_on_desktop 2 gnome-terminal --tab -e program3 --tab -e program4
start_on_desktop 3 firefox
Это должно смочь запустить ту же программу на другом рабочем столе.
Также не любите, когда я запускаю программу будучи на рабочем столе X затем переключатель на рабочий стол Y и ВНЕЗАПНО программу, которая должна быть на X, появляется на Y. Когда я запускаю много программ на и часто переключаюсь между рабочими столами, они заканчивают тем, что находились в хаосе, и я должен собрать их вместе и перераспределить нормально.
Также я хочу, чтобы первый начальный терминал гнома был на настольных 3, но я также хочу, чтобы последующие терминалы гнома были на рабочем столе, где я нажал нажатие клавиши (также настроенный в openbox), который запускает терминал гнома.
попробуйте devilspie:
Круг дьявола может быть настроен для обнаружения окон, поскольку они создаются и соответствуют окну к ряду правил. Если окно соответствует правилам, оно может выполнить ряд действий с тем окном. Например, я могу сделать все окна созданными X-чатом, появляются на всех рабочих областях, и основное окно Gkrellm1 не появляется в пейджере или списке задач.
Вот первичная обработка в сценарии, чтобы сделать это использование wmctrl
.
Работы для меня с Метагородом, и должны работать в 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
.