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 有一些了解。我希望下面的故事是可以理解的,如果不是,请发表评论。
如果您使用正确的参数运行它,下面的脚本可用于在您的任何视口、任何位置打开任何应用程序的窗口。剧本是经过编辑的版本这一个,但现在准备把窗户上的跨越虚拟桌面。
在 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)

正确使用这些坐标对于使用正确的参数运行脚本很重要,如下所述:
下面的脚本可用于在虚拟(跨越)工作区上放置应用程序的新窗口。
确保wmctrl已安装:
sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)将下面的脚本复制到一个空文件中,setwindow在~/bin. 如果目录尚不存在,则创建该目录。使脚本可执行。
~/bin,请运行该命令source ~/.profile或注销/登录以使该目录在$PATH.测试运行命令:
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 像素。<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)