如何在特定桌面上打开程序?


4

当我启动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并突然在Y上出现本应在X上运行的程序时,我也会不喜欢。当我启动许多程序并经常在桌面之间切换时,它们最终陷入混乱,我需要将它们收集在一起并明智地重新分配。

另外,我希望第一个初始gnome-terminal在桌面3上,但我也希望随后的gnome-terminals在桌面上,我按下启动gnome-terminal的按键(也在openbox中配置)。


您正在使用什么来管理虚拟桌面?至于“在启动时,我希望启动某些程序并将其分发到桌面”,这(bbs.archlinux.org/viewtopic.php?pid=419103)应该可以工作。
Matthieu Cartier

@neurolysis:openbox负责虚拟桌面:openbox.org/wiki/Help
akira

Answers:


1

试试devilspie

可以配置Devil's Pie,以在创建窗口时检测它们,并将该窗口与一组规则匹配。如果窗口符合规则,则可以在该窗口上执行一系列操作。例如,我可以使X-Chat创建的所有窗口都出现在所有工作区中,而Gkrellm1主窗口没有出现在寻呼机或任务列表中。

我想在不同的桌面上用相同的窗口(例如,两个gnome-terminals)启动两个相同的应用程序。openbox本身可以将与窗口和类名匹配的窗口放置到桌面上。
六。

首先考虑:在启动命令之前和之后修改脚本以列出窗口,然后对它们进行差异化处理,如果只有一行不同,请获取该行的窗口ID。或者:修改脚本以尝试将窗口名称与传递给start_on_desktop的命令行的第一个单词匹配。
Mikel

@Mikel:您的评论与我的回答有关吗?
akira

@Vi。随着gnome-terminal,至少,一个可以给devilspie一些劫掠与gnome-terminal选项--window-with-role
Darael 2013年

0

这是脚本中使用的第一步wmctrl

我可以使用Metacity,并且应该也可以在Openbox中使用,因为它也符合EWMH。

依靠GNU睡眠。如果没有这样的,改tries10sleeptime1

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我要使用该脚本运行的程序一样。
六。

并且,例如,GVim仅报告无效的PID。
六。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.