是否有脚本(或软件)可以在特定视口和位置上打开应用程序窗口?

sni*_*tko 8 window-manager unity workspaces window window-management

所以,我在 Unity 中有 8 个虚拟桌面(使用 Compiz),因为我有很多项目同时处理。

问题是,每次我需要重新启动或意外关闭 Chrome(它构成了我工作所需的大部分窗口)时,我都必须手动再次打开这些窗口,然后进行设置(打开文件,转到正确的网址等)。

您将如何编写一个脚本来为我完成所有这些工作?即:1)打开窗口 2)在正确的虚拟屏幕上将它们放入正确的坐标

(1) 很明显,对于 Google Chrome,您只需运行“google-chrome”。但是,你如何把它放在正确的地方呢?(2)

或者是否有已经存在的脚本/软件可以为我做这件事?

Jac*_*ijm 14

它可以做得很好,但您需要对 Unity/viewports 有一些了解。我希望下面的故事是可以理解的,如果不是,请发表评论。

如果您使用正确的参数运行它,下面的脚本可用于在您的任何视口、任何位置打开任何应用程序的窗口。剧本是经过编辑的版本这一个,但现在准备把窗户上的跨越虚拟桌面

1. 理解视口和窗口坐标

Unity 中的工作区

在 Unity 中,与其他窗口管理器不同,您实际上只有一个跨越工作区,它被划分为多个视口。在您的情况下,您的工作区分为八个视口。

如何定义窗口的位置

窗口位置,作为命令的输出:

wmctrl -lG
(you need to have wmctrl installed to run the command)
Run Code Online (Sandbox Code Playgroud)

被描述为对于当前视口左上角的位置:


因此,如果您在视口上1
视口 2 上的窗口可以定位在例如 1700(x 方向)x 500(y 方向)
(我的屏幕为 1680x1050)

在此处输入图片说明


但是,如果您在视口 6 上:
同一窗口将位于 20 (x), -550 (y) 在此处输入图片说明


正确使用这些坐标对于使用正确的参数运行脚本很重要,如下所述:

2.如何使用脚本

下面的脚本可用于在虚拟(跨越)工作区上放置应用程序的新窗口。

  1. 确保wmctrl已安装:

    sudo apt-get install wmctrl
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将下面的脚本复制到一个空文件中,setwindow~/bin. 如果目录尚不存在,则创建该目录。使脚本可执行

  3. 如果您刚刚创建了~/bin,请运行该命令source ~/.profile或注销/登录以使该目录在$PATH.
  4. 测试运行命令:

    setwindow <application> <x_position> <y_position> <horizontal_size> <vertical_size>
    
    Run Code Online (Sandbox Code Playgroud)

    例如

    setwindow gedit 100 100 200 200
    
    Run Code Online (Sandbox Code Playgroud)

    gedit 窗口应显示在当前视口上。

笔记:

  • 请记住,并非所有应用程序都允许窗口大小低于特定宽度或高度。gedit我的系统上窗口的最小宽度是例如 appr。470 像素。
  • 只有当整个窗口适合目标视口时,脚本才能正常工作,相应地选择您的坐标/大小。还要注意 Unity Launcher 和面板使用了一些空间 (!),这会影响窗口的位置。
  • 使用负<x_position>将窗口放置在当前视口的左侧
  • 使用负<y_position>将窗口放置在当前视口上方
  • 要一次在不同视口上打开新窗口,您可以简单地链接命令。查看“长篇故事”示例中的视口设置,如果我在视口 1 上,我可以使用以下命令在视口 1、2、3 和 4 上打开 gedit 窗口:

    setwindow gedit 100 100 200 200&&setwindow gedit 1780 100 200 200&&setwindow gedit 3460 100 200 200&&setwindow gedit 5140 100 200 200
    
    Run Code Online (Sandbox Code Playgroud)

剧本

wmctrl -lG
(you need to have wmctrl installed to run the command)
Run Code Online (Sandbox Code Playgroud)



编辑:懒惰的版本

如果您只想输入坐标和大小,就像您在当前视口上打开一个窗口一样,并将目标视口作为参数(无需计算任何内容),然后使用下面的版本...

如果您像脚本的第一个版本一样设置它,则可以使用以下命令运行它:

setwindow <application> <x_position> <y_position> <horizontal_size> <vertical_size> <targeted_viewport>
Run Code Online (Sandbox Code Playgroud)

一个例子:打开一个Google-Chrome位于20, 20, size 300x300, on viewport 的窗口5

setwindow google-chrome 20 20 300 300 5
Run Code Online (Sandbox Code Playgroud)

设置与脚本的第一个版本几乎相同。
请注意,此脚本仅在定义的窗口(位置/大小)完全适合目标视口时才能正常工作。

剧本:

sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)


使用参数打开应用程序窗口

要完成工作,请完整回答您的问题:

如果您运行脚本,例如:

setwindow google-chrome 20 20 300 300 5
Run Code Online (Sandbox Code Playgroud)

它将在目标桌面上打开一个默认窗口。
但是,使用最新版本的脚本,您可以添加一个额外的参数来打开应用程序窗口,例如url

setwindow <application> <x_position> <y_position> <horizontal_size> <vertical_size> <targeted_viewport> <(optional)_argument>
Run Code Online (Sandbox Code Playgroud)

例如:

setwindow google-chrome 0 0 600 600 3 "--new-window http://askubuntu.com"
Run Code Online (Sandbox Code Playgroud)

如果(额外)参数包含空格,请使用引号。上面的例子将google-chrome在视口 3 上打开一个窗口,打开url http://askubuntu.com.

您可以链接命令以在一个命令中打开不同工作区上的多个窗口/网址,例如:

setwindow google-chrome 0 0 600 600 8 "--new-window http://askubuntu.com"&&setwindow google-chrome 0 0 600 600 7 "--new-window www.google.com"
Run Code Online (Sandbox Code Playgroud)