十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

显示器热插拔工作区自动重排揭秘:split-monitor-workspaces如何做到即插即用

显示器热插拔工作区自动重排揭秘:split-monitor-workspaces如何做到即插即用 显示器热插拔工作区自动重排揭秘split-monitor-workspaces如何做到即插即用【免费下载链接】split-monitor-workspacesA small lua package for Hyprland to provide awesome-like workspace behavior项目地址: https://gitcode.com/gh_mirrors/sp/split-monitor-workspacessplit-monitor-workspaces 是一个为 Hyprland 打造的轻量级 Lua 工作区管理工具它能像 awesome/dwm 一样把工作区分拆到每台显示器上、独立编号并做到显示器热插拔时的即插即用插入新显示器工作区自动分配拔掉显示器映射自动清理无需手动维护规则。痛点多显示器下的工作区混乱Hyprland 默认所有显示器共享同一套全局工作区编号。双屏、三屏用户最常见的烦恼是在 A 屏按SUPER2跳到的工作区可能实际落在 B 屏插拔外接显示器后工作区编号错位、窗口跑丢想要每块屏各有一套 1~10 编号只能手写一堆复杂的规则。split-monitor-workspaces 的思路是按显示器切分工作区区间主显示器拥有 1~10第二台显示器自动获得 11~20以此类推。你在哪块屏上按数字键就切换到哪块屏自己的工作区。热插拔揭秘三个事件钩子即插即用的核心并不神秘——它全部建立在 init.lua 背后、入口文件lua/split-monitor-workspaces.lua中注册的三个 Hyprland 事件钩子上hl.on(monitor.added, ...) -- 显示器插入 hl.on(monitor.removed, ...) -- 显示器拔出 hl.on(config.reloaded, ...) -- 配置重载 / 全屏重排插入新显示器自动分配工作区区间当monitor.added触发时插件执行两件事见lua/monitors.lua读配置lua/helpers.lua中的load_config_for_monitor会检查你为这块屏配置的优先级和工作区数量支持按接口名DP-2或按desc:品牌 型号描述匹配建立映射map_monitor为新屏计算它的工作区区间用workspace_rule创建持久化工作区并把新屏自动切到自己的第一个工作区。整个过程无需任何人工干预——插线、点亮、工作区就位。拔出显示器无残留清理monitor.removed触发unmap_monitor它会逐条撤销该屏工作区的持久化规则避免陈旧规则在下次重排时乱搬工作区删除自动生成的优先级和工作区数量覆盖项下次重映射时重新计算清空该屏在映射表monitor_workspace_map中的记录。配置重载完整重排并保持现场config.reloaded触发remap_all_monitors这是最精妙的部分先在改动前快照每块屏当前显示的工作区keep_focused默认开启全部解除映射后按新配置重建再恢复每块屏原来的工作区且刻意先恢复非聚焦屏、最后恢复聚焦屏——这样光标不会被瞬移重载前后你的会话状态分毫不差。这就是为什么热重载配置或唤醒后插件看起来什么都没发生。编号如何分配优先级 基址偏移新显示器的编号区间由lua/helpers.lua中的calc_base_index计算某屏的基址 所有优先级更高的屏幕的工作区数量之和。未配置的屏幕会按 Hyprland 报告顺序自动获得递增优先级新屏排最后因此拿到最大编号段也可在配置中显式指定monitor_priority { DP-1, DP-2 }固定顺序或用max_workspaces { [DP-2] 3 }给特定屏分配不同数量的工作区。例如双屏各 10 个、DP-1 优先DP-1 用 1~10DP-2 用 11~20若给 DP-2 只配 3 个它就是 11~13。即插即用的体验细节持久化工作区enable_persistent_workspaces工作区即使为空也保留插入显示器时直接预生成好编号永远稳定镜像屏自动跳过map_monitor会检测is_mirror并直接跳过镜像模式不会打乱编号流浪窗口回收grab_rogue_windows会把落在未映射工作区上的窗口比如拔屏时丢掉的窗口一键抓回当前工作区实现docs/example.lua中展示的SUPERSHIFTG绑定通知开关开启enable_notifications后每次重排完成都会弹出确认通知方便调试。快速上手三步装好第 1 步克隆仓库到 Hyprland 插件目录mkdir -p ~/.config/hypr/plugins cd ~/.config/hypr/plugins git clone https://gitcode.com/gh_mirrors/sp/split-monitor-workspaces第 2 步在 Hyprland 配置中引入并初始化package.path package.path .. ;./?.lua;./?/init.lua local smw require(plugins.split-monitor-workspaces) smw.setup({ workspace_count 5, -- 每块屏 5 个持久化工作区 })第 3 步绑定数字键for i 1, smw.get_amount_of_workspaces() do hl.bind(SUPER .. i, smw.workspace(tostring(i))) end完整配置项含 Waybar 集成、滚动循环工作区等可参考docs/example.lua和lua/globals.lua中的默认值注释。要求 Hyprland ≥ 0.55旧版本可改用 C 插件方案说明见docs/cpp-plugin.md。插件与 hy3 自动兼容检测到后会改用 hy3 的分发器lua/dispatchers.lua。小结split-monitor-workspaces 的即插即用本质上就是事件驱动 状态映射表插入时算区间、建映射拔出时清映射、撤规则重载时快照、重排、恢复现场。对多屏 Hyprland 用户来说装好它之后显示器插拔就像普通外设一样无感——这正是优秀桌面体验的应有之义。【免费下载链接】split-monitor-workspacesA small lua package for Hyprland to provide awesome-like workspace behavior项目地址: https://gitcode.com/gh_mirrors/sp/split-monitor-workspaces创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表