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

То, когда я запускаю программу 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), который запускает терминал гнома.

4
задан 26.02.2016, 20:55

2 ответа

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

Круг дьявола может быть настроен для обнаружения окон, поскольку они создаются и соответствуют окну к ряду правил. Если окно соответствует правилам, оно может выполнить ряд действий с тем окном. Например, я могу сделать все окна созданными X-чатом, появляются на всех рабочих областях, и основное окно Gkrellm1 не появляется в пейджере или списке задач.
1
ответ дан 07.12.2019, 21:45

Вот первичная обработка в сценарии, чтобы сделать это использование 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.

0
ответ дан 07.12.2019, 21:45

Теги

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