web-dev-qa-db-ja.com

特定のデスクトップでプログラムを開く方法は?

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に表示されます。多くのプログラムを起動してデスクトップを頻繁に切り替えると、混乱してしまい、必要になります。それらを一緒に収集し、正気に再配布します。

また、最初の最初のgnome-terminalをデスクトップ3に配置したいのですが、後続のgnome-terminalを、gnome-terminalを起動するキーストローク(これもopenboxで構成されています)を押したデスクトップに配置したいと思います。

4
Vi.

試してください devilspie

Devil's Pieは、作成時にウィンドウを検出し、ウィンドウを一連のルールに一致させるように構成できます。ウィンドウがルールに一致する場合、そのウィンドウで一連のアクションを実行できます。たとえば、X-Chatで作成されたすべてのウィンドウをすべてのワークスペースに表示させることができますが、メインのGkrellm1ウィンドウはページャーまたはタスクリストに表示されません。
1
akira

wmctrlを使用してスクリプトを実行する最初のパスを次に示します。

Metacityで動作しますが、EWMHにも準拠しているため、Openboxでも動作するはずです。

GNUスリープに依存します。それがない場合は、tries10に変更し、sleeptime1に変更します。

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>

4つのstart_on_desktop行を.Xclientsまたは.xsessionに配置すると思います。

0
Mikel