单屏与多屏工作区规划:接入、拔出与找回窗口
在笔记本和外屏之间保持任务分工,区分移动窗口与移动整个工作区,不靠重启应用找回隐藏内容。
根据公开资料整理,未在实机验证。操作前请核对你的版本与硬件环境。
笔记本上,工作区 1 写代码、2 看资料;到了桌前,希望代码在大外屏,资料留在内屏;拔线后两个任务依然能访问。这需要工作区规划,不只是分辨率设置正确。
本文使用固定 4.0.0.alpha 源码与 Lua dispatcher。先发现自己的输出名称和快捷键。下面的 eDP-1、DP-1 与编号都是教学标签,不是你的硬件事实。先按照屏幕排列与缩放让两块屏幕正常工作。
1. 四种身份解释大多数混淆
章节:1. 四种身份解释大多数混淆应用 → 一个或多个窗口窗口 → 属于一个工作区工作区 → 分配到一个显示器显示器 → 在桌面坐标空间中有位置与缩放| 操作 | 移动什么 | 什么保持在一起 |
|---|---|---|
| 聚焦另一屏幕 | 键盘焦点 | 窗口与工作区不搬家 |
| 窗口移到工作区 2 | 当前选中的一个窗口 | 原工作区其他窗口不动 |
| 工作区 1 移到另一屏 | 整块任务界面 | 属于该工作区的窗口 |
| 切换工作区布局 | 内部排列 | 编号与任务职责 |
工作区 1 不是“每块屏各有一个 1”。普通数字 ID 在会话中标识工作区。每块屏可以显示活动工作区,但同一个普通工作区不会同时复制到两块屏幕。
特殊暂存区和固定浮动窗口是另两种情况:暂存区可覆盖普通工作区;固定浮动窗口可以在所属屏幕上跟随工作区切换。不要用这些例外解释全部窗口。
2. 先建立单屏也能用的规划
章节:2. 先建立单屏也能用的规划| 工作区 | 职责 | 只有笔记本 | 桌前双屏 |
|---|---|---|---|
| 1 | 编辑器与工作终端 | 内屏 | 外屏 |
| 2 | 浏览器与文档 | 内屏 | 内屏 |
| 3 | 聊天或偶尔用的工具 | 需要时访问 | 按需选择屏幕 |
编号绑定任务,而不是接口名。没有扩展坞时,同样的快捷键仍然有意义。不必一开始为每块屏预留十个工作区,先看实际工作需要多少组。
移动测试窗口前记录状态:
hyprctl monitors -jhyprctl workspaces -jhyprctl clients -jomarchy menu keybindings --print把输出串起来:屏幕名称与位置、工作区 ID 与屏幕、窗口 class/标题与工作区。简化的教学清单例如:
eDP-1:工作区 2,位置 0x0DP-1: 工作区 1,位置 1440x0编辑器窗口:工作区 1浏览器窗口:工作区 2清单留在本地,标题可能含个人文件名或消息。空工作区若未设为持久,失去活动状态后可能消失。查询中没有空工作区,不是数据丢失的证据。
3. 接入外屏,再移动整块任务
章节:3. 接入外屏,再移动整块任务打开笔记本盖子接线,重新查询,确认两屏启用、排列符合预期。物理右侧和配置右侧可能不同,方向移动依据桌面坐标。
用已确认的按键聚焦工作区 1。本快照 Super + Shift + Alt + 右 把活动工作区移到右侧屏;外屏在左边就用对应方向。这样编辑器与终端作为任务整体移动。
若想明确指定接口,且外屏实际名称为 DP-1,在目标工作区活动时使用:
hyprctl dispatch 'hl.dsp.workspace.move({ monitor = "DP-1" })'这是移动当前工作区,不是所有工作区,也不是按标题猜一个非活动工作区。马上查询 hyprctl activeworkspace 和 hyprctl workspaces -j,确认正确 ID 分配到外屏。不知道当前活动对象时,不要反复发移动命令。默认移动绑定
用已确认的 Ctrl + Alt + Tab 聚焦内屏,再选择工作区 2。确认代码仍在外屏、文档仍在内屏。如果选工作区时焦点到了另一屏,查看该工作区当前属于哪里;切换不是把它复制到当前屏幕。
4. 只移动一个窗口,不移动整个任务
章节:4. 只移动一个窗口,不移动整个任务假设有个浏览器窗口应当加入代码任务。只聚焦它,移到工作区 1。本快照 Super + Shift + 1 移动并跟随;Super + Shift + Alt + 1 静默移动。
-- 现有动作的对应形式,不是让你添加重复绑定。hl.dsp.window.move({ workspace = "1" })hl.dsp.window.move({ workspace = "1", follow = false })静默移动不离开当前任务,也容易看起来像窗口消失。查看目标工作区即可。它不会搬走全部浏览器窗口,也不是“发到显示器 1”。
workspace = "3 silent" 这类窗口启动规则作用于新建的匹配窗口,不会持续维护整个显示器策略。单实例应用还可能复用旧窗口。增加自动放置前,先看窗口规则排查。
5. 拔出外屏,按身份找回内容
章节:5. 拔出外屏,按身份找回内容保存工作,盖子打开时拔线,再查三份清单。正常合成器流程会把移除输出上的工作区重新分配到剩余输出,但要确认实际结果,不假设精确还原之前排列。Omarchy 的显示器监视器也处理合盖与输出状态,不承诺重建你的个人任务规划。监视器源码
依次访问工作区 1、2,应该能在内屏轮流访问代码与文档。某窗口像是丢了时:
- 在
hyprctl clients找它的标题/class 与工作区。 - 普通工作区用对应的已确认按键访问。
- 暂存区窗口就显示暂存区。
- 滚动工作区沿排列聚焦视野外窗口。
- 分组窗口切到对应成员。
确定旧窗口是否存在前,不要重新开应用。新实例会掩盖真正问题,也容易混淆未保存工作。
输出本身缺失或被禁用,属于显示问题,见显示排查。屏幕存在、工作区只是搬了家,就用对应工作区移动。重启整个图形会话比这些修复的影响大得多。
重新接入后,再做一次手动任务移动。可预测的手动流程,是增加自动扩展坞脚本前有用的基准。
6. 固定绑定只在场景合适时添加
章节:6. 固定绑定只在场景合适时添加桌面电脑经常保持外屏在线,可能希望工作区 1 固定到它。备份所用个人文件;放在 monitors.lua 时,确认主入口加载它。名称已经核实时:
hl.workspace_rule({ workspace = "1", monitor = "DP-1" })这是分配规则,不等于单次移动命令。保存工作后,用新的测试工作区/会话验证;不要假设重载立即按预期搬走全部现有工作区。已有规则与输出是否可用都有影响。Hyprland 工作区规则
经常脱离扩展坞的笔记本,先用手动移动,避免无条件绑定到不存在的接口。persistent 让空工作区保持存在,不会创造缺席的显示器,也不保存应用内容。不要把持久、默认、屏幕绑定一次加齐,每项都应有独立目的。
换接口或扩展坞,连接器名称可能改变。屏幕描述唯一时 desc: 选择器可能有帮助,但两台相同显示器、变化的 EDID 描述仍会产生歧义。用 hyprctl monitors all 发现本机名称与描述,不抄别人的厂商字符串。
自动配置档案需要考虑输出存在、登录与热插拔、盖子开关、可访问的回退屏幕。这是后续扩展,简单固定规则没有保证这些。不了解各进程职责时,不要在 Omarchy 监视器旁再叠一个显示器守护进程。
7. 保存布局不等于保存位置
章节:7. 保存布局不等于保存位置Omarchy 单独保存工作区布局。把 1 从内屏移到外屏,可以保持布局选择;这不代表下次插拔一定还原原来的显示器分配。编号稳定、布局稳定、物理屏幕稳定,是三个偏好。
还要比较逻辑空间:适合外屏的滚动列,在内屏可能显窄。先检查缩放和布局,不要每次拔线都重写全部应用字号。继续看布局选择和文字大小。
8. 恢复并检查完整连接循环
章节:8. 恢复并检查完整连接循环仅删除新增分配规则,恢复备份前比较后续改动,通过菜单重载。把测试窗口或任务工作区移回记录的屏幕。移除未来分配规则,不会自动把当前全部工作区送回原屏。
验证内屏独用 → 双屏 → 再回内屏。检查同样的代码、浏览器、终端窗口,不只看顶栏编号。合盖工作先确认开盖循环正常,再看合盖与睡眠行为,因为盖子事件同时涉及安全和显示处理。
成功标准是每个任务都有明确操作可以访问,并且没有为了寻找内容重复启动应用。本文核对源码;拔线、扩展坞和合盖行为仍需要真实硬件验证。