Как открыть программу на определенном рабочем столе?

3811
Vi.

Когда я запускаю программу с графическим интерфейсом, это окно появляется на текущем активном рабочем столе (по сути, на случайном рабочем столе).

Как заставить его появиться на конкретном рабочем столе? Например, при запуске я хочу, чтобы определенные программы запускались и распространялись на рабочие столы.

Я уже настроил конфигурационный файл 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, и внезапно на Y появляется программа, которая должна быть на X. Когда я запускаю много программ и часто переключаюсь между рабочими столами, они оказываются в хаосе, и мне нужно собирать их вместе и распространять разумно.

Также я хочу, чтобы первый начальный gnome-терминал находился на рабочем столе 3, но я также хочу, чтобы последующие gnome-терминалы были на рабочем столе, где я нажал клавишу (также настроенную в openbox), которая запускает gnome-терминал.

4
Что вы используете для управления своими виртуальными рабочими столами? Что касается «при запуске я хочу, чтобы определенные программы запускались и распространялись на рабочие столы», это (https://bbs.archlinux.org/viewtopic.php?pid=419103) должно работать. Matthieu Cartier 13 лет назад 0
@neurolysis: openbox заботится о виртуальных рабочих столах: http://openbox.org/wiki/Help:Configuration#Desktops akira 13 лет назад 0

2 ответа на вопрос

1
akira

попробуйте devilspie :

Пирог Дьявола может быть настроен на обнаружение окон по мере их создания и сопоставление окна с набором правил. Если окно соответствует правилам, оно может выполнить ряд действий над этим окном. Например, я могу сделать так, чтобы все окна, созданные X-Chat, появлялись во всех рабочих пространствах, а главное окно Gkrellm1 не появлялось в списке пейджеров или задач.
Я хочу запустить два одинаковых приложения с одинаковыми окнами (например, два терминала gnome) на разных рабочих столах. Openbox может помещать окна, соответствующие окну и имени класса, на рабочий стол. Vi. 13 лет назад 0
Сначала подумайте: измените сценарий так, чтобы он отображал список окон до и после запуска команды, затем измените их, и, если отличается только одна строка, захватите идентификатор окна для этой строки. Или: измените скрипт, чтобы попытаться сопоставить имя окна с первым словом командной строки, переданным start_on_desktop. Mikel 13 лет назад 0
@Mikel: ваш комментарий как-то связан с моим ответом? akira 13 лет назад 0
@Vi. По крайней мере, с помощью `gnome-терминал` можно дать` devilspie` что-то, за что можно ухватиться, с помощью опции 'gnome-терминал` `--window-with-role`. Darael 11 лет назад 0
0
Mikel

Вот первый проход в скрипте, чтобы сделать это с помощью 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.

`wmctrl -l -p` часто похож на` 0x03000012 2 0 N / A 0.5.2 svn` для программ, которые я хочу запустить с использованием этого сценария. Vi. 13 лет назад 0
И, например, GVim сообщает только неверный PID. Vi. 13 лет назад 0

Похожие вопросы