您如何通过 i3 窗口管理器中的应用程序自动启动来实现布局?

24 i3

这是关于如何使用i3窗口管理器在单个工作区上自动启动应用程序以及在配置文件中可以做什么和不能做什么的先前问题的后续。~/.i3/config

首先,提供的解决方案基于Arch Linux文档和 op 提供的更新,他进一步推动了逻辑:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'
Run Code Online (Sandbox Code Playgroud)

同样有趣的是这种交流直接在命令行上利用其中的一些而不重复:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium
Run Code Online (Sandbox Code Playgroud)

但是我从未见过根据所需的垂直或水平布局在每个工作区中自动启动许多窗口/应用程序的配置。我的目标是自动启动我使用的这个简单配置:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3
Run Code Online (Sandbox Code Playgroud)

所以它以config文件中的类似内容开始:

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'
Run Code Online (Sandbox Code Playgroud)

但是,您究竟如何实现您想要的布局类型和垂直/水平分割?我正在尝试,但不清楚您如何“混合”执行和布局。语法开始时感觉很特别,因为您i3-img在 i3 的配置中执行。你在每次通话之间使用split h(或 v) - layout split v- exec layout split v- focus down(或 right)exec吗?

对于单个工作区,配置以垂直或水平方式启动所有应用程序,我似乎无法影响布局 - 或者split链中的最后一个命令决定是垂直还是水平添加窗口。i3-msg似乎忽略了在某些情况下格式不正确的命令部分,因此很难调试。由于您确实需要startx每次都退出 X 并再次退出以验证结果,mod+shift+R因此即使您关闭每个工作区上的所有内容,仅刷新配置也不会削减它,这进一步加剧了这种情况。

配置它的正确方法是什么?有没有人有一个解决方案可以实现类似的东西?该文档非常好,但它没有提供我可以看到在多个工作区上混合执行和布局的详细示例。

dam*_*ien 14

我相信您正在寻找i3 v4.8 (2014-06-15) 中引入的 布局保存功能。链接的文档似乎非常详尽。

从文档中引用:

布局保存/恢复允许您加载 JSON 布局文件,以便您可以在打开计算机电源后开始使用基本布局。还会想到动态用例:如果您经常(但并非总是!)需要带有 ping/traceroute 命令的终端网格布局来诊断网络问题,您可以轻松地以正确的布局自动打开这些窗口。

...以及发行说明

TL;博士:出口1当前的布局JSON文件,将其加载到新酷睿i3的会议,获得将由实际的应用程序,一旦你开始它们被替换占位符的窗口。


1. 您可能需要perl-anyevent-i3perl-json-xs包才能使用该i3-save-tree实用程序。

  • 布局功能使用起来非常具有挑战性。他们“吞下”应用程序的占位符窗口的概念意味着,如果您希望在单个工作区多次使用相同的应用程序,例如`lxterminal` 或`urxvt`,那么您必须在执行它们时使用`--name something` 来区分它们在 .i3/config 中。文档中的示例有效,但是当我从我的工作区之一使用导出时,我似乎无法使其正常工作。您使用 _class_ 作为名称,使用 _instance_ 作为您与 --name 一起使用的内容。在这种情况下,我只能认真地希望一个gui工具,因为_json_格式里面有这么多括号!! (4认同)
  • 我现在更新到 4.8,我对这个新功能很满意。我总是在从`.i3/config` 登录时可靠地启动一些早期版本的东西,但是一旦我正确登录,一切正常。我所做的是安排一些布局并保存它们,然后*仅*编辑json文件的类变量。然后类似`i3-msg workspace 2\; append_layout mylayout.json\;` 然后是`i3-msg exec lxterminal\; 执行 lxterminal\; 执行 lxterminal\; exec medit` 应该可以恢复你想要的第一个布局。// 感谢您改进我的答案,顺便说一句。 (2认同)