鉴于我是一个懒惰的混蛋,我尝试编写一个Bash脚本,可以立即打开不同桌面上的每日应用程序。这个脚本应该在Gnome中工作。 到目前为止我写过:
#!/bin/bash
firefox &
thunderbird &
/usr/bin/netbeans --locale en &
amsn &
gnome-terminal &
sleep 2
wmctrl -r firefox -t 0 && wmctrl -r netbeans -t 1 && wmctrl -r gnome-terminal -t 2 && wmctrl -r amsn -t 6 && wmctrl -r thunderbird -t 7
但是,它不起作用。我的应用程序已打开,但不会将其分配给我指定的桌面:(。
编辑:我将睡眠值改为15 ...只有firefox& netbeans被正确分配,其余部分在我从...执行脚本的工作区中打开。答案 0 :(得分:5)
感谢Akira评论,我终于成功地使其工作(脚本在启动时像魅力一样运行)以下是新代码:
#!/bin/bash
wmctrl -n 8
firefox &
thunderbird &
/usr/bin/netbeans --locale en &
amsn &
gnome-terminal &
sleep 15
wmctrl -r firefox -t 0
wmctrl -r netbeans -t 1
wmctrl -r terminal -t 2
wmctrl -r amsn -t 6
wmctrl -r thunderbird -t 7
#focus on terminal
wmctrl -a terminal
答案 1 :(得分:2)
checkout DevilsPie,它会监视窗口的创建并采取相应的行动。
Devil's Pie可以配置为在创建窗口时检测窗口,并将窗口与一组规则匹配。如果窗口符合规则,则可以在该窗口上执行一系列操作。例如,我可以使X-Chat创建的所有窗口都显示在所有工作空间中,并且主Gkrellm1窗口不会出现在寻呼机或任务列表中。
或者您可以使用能够在内部执行相同操作的窗口管理器,例如。 fluxbox
答案 2 :(得分:2)
在dconf-editor中:
org->gnome->shell->extensions->auto-move-windows
here is what it should look like:
['firefox.desktop:1','pidgin.desktop:2']
答案 3 :(得分:0)
你使用什么图形前端? 例如,当您使用ubuntu与gnome和compiz时,您可以在
中设置窗口位置系统>偏好设置> CompizConfig设置管理器>窗口管理>放置窗口
答案 4 :(得分:0)
此脚本将检查是否需要更改工作区、切换到工作区、启动应用程序、等待窗口创建并切换回原始命名空间。
由于它使用 wmctrl -l
来检查是否创建了新窗口,因此它可以处理快速启动和慢速启动的应用程序,而无需等待静态的几秒钟。
我称这个脚本为 start-on-workspace
。
用法:start-on-workspace <Workspace> <command> [argument...
#!/bin/sh -e
# get the target ns
target=$(($1 - 1))
shift
# get the current ns
current=$(wmctrl -d | grep '*' | cut -d' ' -f1)
if [ $current != target ]; then
# switch to target ns
wmctrl -s $target
fi
# get a checksum of currently running windows
a=$(wmctrl -l | cut -d' ' -f1 | sha1sum | cut -d' ' -f1)
b=$a
# start the app
$@ &
# wait until there is a change on the window list
while [ $a = "$b" ]; do
a=$(wmctrl -l | cut -d' ' -f1 | sha1sum | cut -d' ' -f1)
sleep 0.1
done
# switch back to the origin namespace if needed
if [ $current != target ]; then
wmctrl -s $current
fi