窗口规则实战:浮动、工作区与透明度
识别应用真正的窗口标识,编写范围明确的 Lua 规则,区分打开时的行为与动态外观。
根据公开资料整理,未在实机验证。操作前请核对你的版本与硬件环境。
希望文件管理器居中浮动、聊天应用进入指定工作区,只有某个应用稍微透明?窗口规则可以描述这些偏好,但先要知道匹配的是哪个窗口,以及规则在什么时候执行。
本页使用 Omarchy 的 Lua 工具函数。确认 Setup → Config 能编辑 hypr/looknfeel.lua,且个人入口加载了它。旧 windowrulev2 或 hyprlang .conf 示例不能与这里的语法互换。不熟悉文件关系时先读配置如何生效。
1. 先匹配窗口,再应用效果
章节:1. 先匹配窗口,再应用效果应用创建窗口 → Hyprland 识别 class、初始标题等属性 → 匹配规则应用打开时的效果 → 动态规则随相关属性变化重新判断| 目标 | 效果 | 重要条件 |
|---|---|---|
| 让应用浮动 | float = true |
用新创建窗口验证 |
| 居中并指定大小 | center、size |
主要用于浮动窗口 |
| 在指定工作区打开 | workspace |
打开位置,不会自动移动全部旧窗口 |
| 跟随所有工作区 | pin |
需要浮动窗口 |
| 改透明度 | opacity / 透明度工具函数 |
可能与其他透明度规则叠加 |
打开时规则不会在你移动窗口后不断把它拉回原位。修改规则,也不能用一直开着的旧窗口证明效果。
2. 查出应用真实标识
章节:2. 查出应用真实标识打开目标应用,再运行:
hyprctl clients根据可见标题找到对应记录。下面是简化教学示例:
class: org.gnome.Nautilustitle: DocumentsinitialClass: org.gnome.NautilusinitialTitle: Documentsfloating: 0workspace: 1你的结果可能不同。class 不一定是程序名或菜单名称;浏览器 Web App、Flatpak 和原生包可能有不同标识。也记录 initialClass、initialTitle:打开时执行的效果使用当时已有的属性。
编辑器标题可能稍后才变成文件路径,聊天标题也可能增加未读数量。不要让打开时规则依赖之后才出现的标题。只有确实观察到目标窗口的属性,才添加进一步匹配条件。
3. 让文件管理器以合适大小浮动
章节:3. 让文件管理器以合适大小浮动确认窗口实际报告 org.gnome.Nautilus 后,备份已有个人文件:
cp -i ~/.config/hypr/looknfeel.lua ~/.config/hypr/looknfeel.lua.before-window-rules备份名称占用时换一个。通过配置编辑器增加:
o.window("^org\\.gnome\\.Nautilus$", { float = true, center = true, size = { 800, 560 },})表达式匹配完整 class。^、$ 标记边界;Lua 中双反斜杠让正则把点当作字面字符。使用 .* 这样的宽泛匹配会影响其他应用。
800 × 560 是逻辑桌面单位中的示例。先确认它能放进缩放后的显示器可用区域;小屏可能需要更小的值,不能仅凭物理分辨率判断。
保存退出,本机支持时查看 hyprctl configerrors,再保存目标窗口中的工作,关闭并新建窗口。确认浮动、初始居中和大小可用。随后手动移动、缩放:这是打开时偏好,不是持续锁定位置。
同一 class 也可能包含 Nautilus 的对话框,所以还要测试文件对话框。只想调整其中一类窗口,就观察启动属性并缩小匹配范围,不要假设同一个应用所有窗口都一样。
4. 让聊天应用进入指定工作区
章节:4. 让聊天应用进入指定工作区先查询聊天窗口。下面假设真实 class 是 discord;本机不同就替换匹配表达式:
o.window("^discord$", { workspace = "3 silent",})工作区 3 是教学选择;silent 请求放置窗口时不切换过去。新开聊天窗口,再手动切到工作区 3,用 hyprctl clients 检查位置,同时观察当前任务是否保留焦点。
单实例应用可能只唤起旧窗口,而没有创建新窗口。此时还没验证打开时规则;先保存工作,完整退出再重新打开。
多屏时,工作区位置与显示器分配是两种策略。理解自己的工作区安排前,不要再叠加显示器规则。打开时规则不能替代完整的接入、拔出外屏流程;几何布局见显示器与多屏。
5. 让一个应用参与 Omarchy 透明度控制
章节:5. 让一个应用参与 Omarchy 透明度控制想让前面文件管理器采用自选透明度,单独增加:
o.transparent_window("^org\\.gnome\\.Nautilus$", "0.97 0.92")数值分别描述活动、非活动透明度。工具函数还会标记窗口,让它参与 Omarchy 的透明度开关。Nautilus 在本源码的默认规则中已经参与,所以本例是在尝试自定义数值,而不是为原先不支持的应用首次启用功能。
分别看活动与非活动窗口,把它移到壁纸的亮区和暗区比较。多条透明度乘数可能叠加,0.97 不一定就是最终看到的透明程度;应用自己绘制的透明背景与合成器透明度也是不同层。
可读性变差就删除实验行,不必把整个主题都调亮。已有默认规则的应用,正常重载并按需新开窗口后,重新由默认值控制。
6. 规则似乎没生效时看什么
章节:6. 规则似乎没生效时看什么| 现象 | 检查方向 |
|---|---|
| 所有地方都没效果 | Lua 语法与个人文件是否加载 |
| 新窗口正常,旧窗口不变 | 打开时效果的执行时机 |
| 对话框意外改变 | 匹配范围过宽 |
| 聊天仍在原工作区 | 复用了旧实例或初始 class 不匹配 |
| 大小与示例不同 | 应用最小尺寸、缩放和其他匹配规则 |
| 比预期更透明 | 其他透明度设置与活动状态 |
多个规则可以匹配一个窗口。不要假设新增规则会完整替换该应用全部默认规则,也不要把所有属性都理解为统一的“最后一行胜出”。每次只改一种效果,用新窗口及其报告属性比较;引入旧社区方案前先查本机 Hyprland 版本文档。
7. 撤销并验证其他窗口不受影响
章节:7. 撤销并验证其他窗口不受影响删除新增规则,通过同一菜单编辑器保存,再重新打开目标窗口。启动位置和大小要用另一个新窗口比较。复制回备份前,先确认不会丢失后来的修改。
检查目标主窗口、另一个应用、一个对话框,以及活动和非活动状态。范围明确的规则应该只影响目标,而不会改变其他桌面行为。记录真实 class、修改文件、目标效果和验证方法,应用更新后标识变化时会用得上。
来源与关联指南
章节:来源与关联指南窗口工具函数 · 个人外观配置示例 · 默认窗口规则 · Hyprland 规则参考