如何告诉应用程序在特定的工作区中打开?
更多信息:
我喜欢将 C++ IDE 放在工作区 2 中,将 Java IDE 放在工作区 3 中,将电子邮件、浏览器和其他程序放在工作区 4 中。我还使用登录时执行的 shell 脚本:
#!/bin/bash
gnome-terminal & # WS 1
netbeans-6-9-1 & # WS2
qtcreator-2-0-1 & # WS 3
firefox & # WS 4
thunderbird & # WS 4
当然,目前所有内容都在当前工作区中打开...有没有办法让我指定每个命令应该在哪个工作区中启动?
提前致谢!
答案1
答案2
我尝试过该wmctrl
工具并发现对我来说最简单的解决方案是使用以下命令移动窗口:
wmctrl -r <WindowName> -t <WorkspaceNumber>
请注意,工作区编号从 0 开始。最后,您可以使用以下命令移动到您喜欢的工作区:
wmctrl -s <WorkspaceNumber>
答案3
我在脚本中使用这个基本结构在特定工作区中打开一组特定的应用程序..示例打开我的终端并将其移动到工作区 1...
cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~";
do
sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1
答案4
我确信这是不可能的。原因似乎是 GNOME 等窗口环境希望软件能够处理这个问题,而软件制造商希望窗口环境能够处理这个问题。
Devilspie 是个好主意,但它会进行模式匹配(即 if name == 'google-chrome')。那么如果我打开两个浏览器会发生什么?它们都会移动到同一个工作区?我有 6x3=18 个工作区,每个工作区都有一个特定的 chrome 实例。如果我可以重命名这些程序(即“google-chrome1”、“google-chrome2”...),那会很有帮助,但我找不到这样做的方法。所以我们必须使用 wmctrl。
wmctrl 稍好一些,因为除了使用窗口标题之外,您还可以使用窗口 ID 或仅使用当前突出显示的窗口。窗口 ID 很难获取,因为它们不会立即生成。见下文
gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
但直到 gedit 退出后,控制权才会返回到命令行。我们只需在 gedit 中放置一个&
符号
gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
但现在,99.999% 的时间里,控制权都在窗口管理器启动窗口之前返回到命令行,而且无法找到窗口 ID。必须设置一个非常复杂的循环技术来测试是否创建了任何新窗口,并猜测它是否是我们要找的窗口。
通过标志检查活动窗口:ACTIVE:
有同样的问题,它不会等待程序运行完成。
wmctrl
我觉得这是一个非常奇怪的程序。它似乎是为没有鼠标或无法在工作区之间拖动程序的人设计的。