问题
使用 shell 脚本语言、python 或任何语言,如何将窗口从一个视口移动到另一个视口?
虽然我非常绝望,但我还是希望解决方案能在后台运行。也就是说activate window 1, move window 1, active window 2, move window 2, ...
,我必须坐下来等待这一切发生。(我将其称为缓慢激活问题。)
我甚至很感激能参考一下我应该在哪里提出这个问题,比如熟悉 Linux 和窗口管理器的人的论坛。
环境
我正在使用 Gnome Flashback 和 Compiz(不是 Unity 或 Metacity)。我使用的是 Ubuntu 14.04,但我希望解决方案能在其他版本上工作,因为我打算升级。
我尝试过的方法
现有程序仅包含命令行内容。
控制端
首先,wmctrl
它似乎无法与 compiz 配合使用。以下是我使用时得到的结果wmctrl -d
:
$ wmctrl -d
0 * DG: N/A VP: N/A WA: N/A N/A
wmctrl -l
并非完全无用,但它不会显示所有窗口。例如,我刚刚运行它,它报告了 8 个 Chrome 窗口,但我知道我至少有 21 个。Slack 已打开,但不在窗口列表中。
compiz-dbus 插件
我用的是compiz-dbus 插件使用put
插件,并尝试使用./compiz-send.py put put_viewport_1_key
,但这有几个问题:
- 它只适用于活动窗口,因此会出现上述“激活缓慢”的问题。假设我可以使用另一个工具按标题查找窗口并激活它。
- 对于最大化的窗口,它存在错误,我的 95% 的窗口都是最大化的。对我来说,它有时会移动窗口的视口,但总是将其放在我的中间显示器上,即使它从我的右侧显示器开始。其他时候,它会移动视口,然后将其移回!(仍然将其放在中间显示器上)。显然这不好。
背景故事
我讨厌重启电脑,因为所有窗口都是在一个视口上启动的,我需要花几分钟才能将所有窗口移回它们之前所在的视口。例如,我会在视口 1 上放置几个 Chrome 窗口,在视口 2 上放置几个窗口,等等。每次我重启电脑时,都需要移动很多窗口。
通常,我不会因为这种痛苦而长时间重启电脑,这对安全修复等不利。为什么我要打开这么多窗口?我是一名承包商,同时从事多个项目,每个项目都有自己的问题,需要进行网络研究、编写代码、命令行等。我有 32 GB 的 RAM,所以打开这么多窗口不会造成性能问题。
通常,窗口很容易通过标题识别,我希望它们位于何处。例如,我总是希望“Gmail - Google Chrome”位于视口 1 上。
答案1
也可以使用放置窗户插件CompizConfig 设置管理器让程序始终在某个视口上打开。放置窗户插件可以在窗口管理类别。
一旦进入放置窗户插件转到固定窗口位置顶部的选项卡。在底部,您将看到具有固定视口的窗口。 点击新的按钮添加新程序。接下来单击绿色加号以配置应定位的窗口。使用类型的窗口类。 使用抓住按钮从您想要在启动时定位的打开窗口类型中获取信息。您还需要设置您希望程序在启动时定位的水平和垂直视口位置。
此信息来自webupd8.org文章标题“使用 Compiz 使应用程序始终在给定的工作区(视口)上打开”。Youtube 上还有一个截屏视频链接,其中介绍了该页面上的这些步骤。
答案2
看这个答案针对这个问题保存 Unity 桌面会话“。答案提供了一个脚本的链接,〜/ session.config它可以帮你设置脚本,〜/ .sessionconfig 使用自动启动桌面文件,~/.config/autostart/sessionconf.desktop。
我已经使用这个脚本一段时间了。唯一的问题是它使用默认的物理显示尺寸。这意味着如果你将一个具有不同尺寸的外部显示适配器插入笔记本电脑,程序将不会放置在所需的视口中。