You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

i3布局保存问题:程序无法填充save-tree创建的占位符

解决i3布局占位符自动捕获程序的问题

第一步:简化布局文件的捕获规则

你的JSON布局文件中,swallows字段的匹配条件过于严格(比如精确匹配窗口标题、特定机器名),这会导致程序启动后无法被占位符捕获。建议修改规则,只保留最稳定的匹配项:

修改后的Chrome占位符规则

{
    "border": "normal",
    "current_border_width": 2,
    "floating": "auto_off",
    "geometry": {
       "height": 1028,
       "width": 1916,
       "x": 1932,
       "y": 34
    },
    "marks": [],
    "name": "Google Chrome",
    "percent": 0.6,
    "swallows": [
       {
       "class": "^Google\\-chrome$",
       "instance": "^google\\-chrome$",
       "window_role": "^browser$"
       }
    ],
    "type": "con"
}
  • 移除了machine和title字段:机器名仅适用于你的特定设备,而Chrome窗口标题会随标签页变化,这两个字段会干扰捕获。

修改后的Kitty占位符规则

{
    "border": "normal",
    "current_border_width": 2,
    "floating": "auto_off",
    "geometry": {
       "height": 501,
       "width": 956,
       "x": 0,
       "y": 0
    },
    "marks": [],
    "name": "Kitty Terminal",
    "percent": 0.5,
    "swallows": [
       {
       "class": "^kitty$",
       "instance": "^kitty$"
       }
    ],
    "type": "con"
}
  • 同样移除machine和title字段:Kitty标题会随工作目录变化,无需精确匹配。

第二步:加载布局并启动程序

要让占位符生效,必须先加载布局文件,再启动程序。可以通过i3配置文件直接实现,或者编写shell脚本。

方法1:直接在i3配置文件中配置

将以下内容添加到你的~/.config/i3/config(或~/.i3/config)文件末尾:

# 加载工作区1的布局
exec --no-startup-id i3-msg "workspace 1; append_layout ~/.i3/layouts/workspace1.json"

# 延迟启动程序,确保占位符已创建
exec --no-startup-id sleep 0.5 && google-chrome
exec --no-startup-id sleep 0.5 && kitty
exec --no-startup-id sleep 0.5 && kitty
  • sleep 0.5是必要的:给i3留出时间创建占位符容器,避免程序先启动导致无法被捕获。
  • 替换~/.i3/layouts/workspace1.json为你实际的布局文件路径。

方法2:使用shell脚本

创建脚本~/.i3/scripts/load_workspace1.sh:

#!/bin/bash

# 切换到工作区1并加载布局
i3-msg "workspace 1; append_layout ~/.i3/layouts/workspace1.json"

# 等待占位符创建
sleep 0.5

# 启动程序
google-chrome &
kitty &
kitty &

然后给脚本添加执行权限:

chmod +x ~/.i3/scripts/load_workspace1.sh

最后在i3配置文件中添加:

exec --no-startup-id ~/.i3/scripts/load_workspace1.sh

验证效果

重启i3(按Mod+Shift+C重新加载配置,或Mod+Shift+R重启),检查程序是否自动填充到对应的占位符位置。如果仍不生效,可以尝试:

  • 延长sleep时间至1秒
  • 使用xprop命令查看程序的WM_CLASS和WM_WINDOW_ROLE,确保swallows中的正则匹配正确

内容的提问来源于stack exchange,提问作者AKJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:32:18