Como abrir um programa em uma área de trabalho específica?

4

Quando inicio o programa GUI, a janela aparece na área de trabalho ativa no momento (essencialmente, em uma área de trabalho aleatória).

Como fazê-lo aparecer em um desktop específico? Por exemplo, na inicialização, quero que determinados programas sejam iniciados e distribuídos em desktops.

Eu já configurei o arquivo de configuração do openbox para forçar alguns programas a sempre começarem em um desktop específico.

Idealmente, deveria ser assim:

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

Ele deve ser capaz de iniciar o mesmo programa em outra área de trabalho.

Também não gosto quando inicio o programa enquanto estou na área de trabalho X, mudo para a área de trabalho Y e, REPENTINAMENTE, um programa que deve estar em X aparece em Y. Quando inicio muitos programas e alterno frequentemente entre computadores, eles acabam ficando caóticos e eu preciso coletá-los juntos e redistribuir de forma saudável.

Também quero que o primeiro terminal gnome inicial esteja na área de trabalho 3, mas também quero que os terminais gnome subseqüentes estejam na área de trabalho, onde pressionei a tecla (também configurada em openbox) que inicia o terminal gnome.

    
por Vi. 22.01.2011 / 18:25

2 respostas

1

experimente devilspie :

Devil's Pie can be configured to detect windows as they are created, and match the window to a set of rules. If the window matches the rules, it can perform a series of actions on that window. For example, I can make all windows created by X-Chat appear on all workspaces, and the main Gkrellm1 window does not appear in the pager or task list.
    
por 22.01.2011 / 19:24
0

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 .

    
por 23.01.2011 / 01:19