Ubuntu / Gnome:在特定的工作区中打开应用程序


10

如何告诉应用程序在特定的工作区中打开?


更多信息:

我希望在工作区2中具有C ++ IDE,在工作区3中具有Java IDE,在工作区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
如果您始终在运行这些程序,则最简单最简单的方法是将它们全部加载到所需位置并“注销时记住应用程序”
Unfundednut

1
@MrStatic:感谢您的建议,但出于其他原因,我确实需要将其放在shell脚本中-因此,我无法“注销时记住应用程序”
bguiz 2011年

Answers:


4

您可以使用devilspie为在哪个工作区上的哪个窗口设置规则。

有关确切示例,请参阅文档

但是MrStatic也有很好的建议。首先尝试一下,您甚至可能不需要您的shell脚本。

如果需要它作为可以在Shell脚本中使用的命令,请查看wmctrl


感谢您的建议,请查看-我仍然认为仅CLI的解决方案是一种出色的解决方案,因此,如果您有任何想法,请告诉我!
bguiz 2011年

4
尝试wmctrl。我在上面的答案中添加了一个链接。
Mikel

7

我尝试过该wmctrl工具,发现对我有用的最简单的解决方案是使用以下命令移动窗口:

wmctrl -r <WindowName> -t <WorkspaceNumber>

请注意,工作空间编号从0开始。最后,您可以使用以下命令移至首选工作空间:

wmctrl -s <WorkspaceNumber>

1

我在脚本中使用此基本结构在特定的工作区中打开一组特定的应用程序..该示例打开了我的终端并将其移至工作区1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1

欢迎对此代码进行一些解释。为什么以cd开头?您期待什么?是“ me @ myspc〜”的窗口名称吗?
wranvaud

0

安装wmctrl

sudo apt install wmctrl

并创建一个脚本(在本示例中,第二个工作区(-t 1)中是雷鸟):

#!/bin/sh
(thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

要知道您在wmctrl上的应用程序名称,可以通过在终端上点击来查看它:

wmctrl -l

并用脚本中的正确名称替换它。

充满大写字母(“ Thunderbird”而不是“ Thunderbird”)!

在3d工作区(-t 2)上使用Firefox的其他示例:

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

与肉桂一起制作Debain 10。但应该为所有人工作


-1

我相当确定这是不可能的。原因可能是像GNOME这样的窗口环境希望软件可以处理此问题,而软件制造商希望窗口环境可以处理此问题。

Devilspie是个好主意,但可以进行模式匹配(例如,如果name =='google-chrome')。那么,如果我打开两个浏览器会怎样?他们俩都搬到了同一个工作区?我有6x3 = 18个工作区,每个工作区都有一个特定的chrome实例。如果可以重命名这些程序(即“ google-chrome1”,“ google-chrome2” ...),将会有所帮助,但我找不到解决方法。因此,我们必须使用wmctrl。

wmctrl除了使用窗口标题外,b / c更好一些,您还可以使用窗口ID或仅使用当前突出显示的窗口。窗口ID很难获得b / c,它们不会立即生成。见下文

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 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让我觉得这是一个非常奇怪的程序。似乎它是为没有鼠标或无法在工作空间中物理拖动程序的人设计的。


OP说浏览器在第四个工作区上。如果需要在会话启动脚本运行后打开其他工作区上的浏览器,则该脚本中的最后一个命令可以是sleep;杀害恶魔。
Mikel 2014年
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.