ARTICLE DETAIL

资讯详情

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

如何用 hyprctl output create 为 Hyprland 动态添加和移除虚拟显示器?

如何用 hyprctl output create 为 Hyprland 动态添加和移除虚拟显示器? 如何用 hyprctl output create 为 Hyprland 动态添加和移除虚拟显示器【免费下载链接】HyprlandHyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesnt sacrifice on its looks.项目地址: https://gitcode.com/GitHub_Trending/hy/Hyprland在没有接入新显示器的情况下你可能需要给 Hyprland 多加一个屏幕——比如测试跨屏布局、给远程会话或自动化脚本准备一块独立输出。Hyprland 自带了这条路径hyprctl output create添加虚拟显示器fake outputhyprctl output remove移除它整个过程不需要改配置文件也不需要重启合成器。执行前提只有一个Hyprland 正在运行且hyprctl能定位到该实例。正常情况下在 Hyprland 会话内的终端执行即可环境里带有HYPRLAND_INSTANCE_SIGNATURE。如果这个环境变量缺失hyprctl会直接报错HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?) (3)多个 Hyprland 实例共存时可以用-i instance指定目标实例实例 ID 可通过hyprctl instances查看见 hyprctl 源码。命令格式与参数hyprctl output的完整用法说明如下来自 OUTPUT_HELPusage: hyprctl [flags] output create backend | remove name create backend: Creates new virtual output. Possible values for backend: wayland, x11, headless or auto. remove name: Removes virtual output. Pass the outputs name, as found in hyprctl monitors flags: See hyprctl --help也就是说两个子命令output create backend [name]新建一个虚拟显示器。backend可选wayland、x11、headless、auto取值范围同时见 hyprctl.usage。output remove name移除一个虚拟显示器name必须是hyprctl monitors里看到的输出名。创建时的名称可以自定义例如测试代码里使用的HEADLESS-2、HYPRTEST-2见 hyprtester/src/main.cpp。下文示例统一用HEADLESS-2作为虚拟显示器名你可以替换成自己的名字但要注意后面的重名限制。添加虚拟显示器最常用的主路径是 headless 后端直接执行hyprctl output create headless HEADLESS-2命令成功时返回ok。从 实现代码 可以看到创建流程的判定逻辑名称检查如果传入的名称已被现有显示器占用返回Name already taken实显冲突检查如果该名称已被真实物理显示器使用返回A real monitor already uses that name.后端匹配合成器遍历可用的 Aquamarine 后端实现headless 后端响应headless或autowayland 后端响应wayland或auto由匹配到的后端实际创建输出没有任何后端处理该请求时返回no backend replied to the request。关于auto文档只说明它可以匹配 headless 或 wayland 两类后端没有规定两者并存时的优先顺序需要确定后端类型时建议直接显式指定headless或wayland。x11是文档列出的取值之一但当前代码路径中只有 headless 与 wayland 两个后端的匹配分支选择它时若没有后端响应会得到no backend replied to the request。带-r标志可以让 hyprctl 在发出命令后刷新状态-j则以 JSON 格式输出标志说明见 hyprctl.usage。验证显示器是否创建成功用hyprctl monitors查看当前所有输出及其属性该命令的说明见 hyprctl.1.rsthyprctl monitors新建的虚拟显示器会出现在列表里其名称就是创建时传入的名字。需要脚本化提取名称时hyprctl.usage 中给出的补全表达式展示了标准做法hyprctl monitors | awk /Monitor/{ print $2 }加-j参数hyprctl -j monitors可获得 JSON 格式输出便于进一步处理。移除虚拟显示器移除时传入hyprctl monitors中看到的输出名hyprctl output remove HEADLESS-2成功同样返回ok之后该输出从hyprctl monitors的列表中消失。移除操作在 实现代码 中有两条明确的拒绝路径名称找不到对应显示器output not found目标是真实物理显示器而非用户创建的虚拟输出cannot remove a real display. Use the monitor keyword.——这条提示指明物理显示器要走monitor配置关键字去管理output remove只针对虚拟输出。常见返回信息与排查返回信息含义ok命令成功执行Name already taken传入的名称已被现有显示器占用A real monitor already uses that name.该名称属于一台真实显示器不能重复用于虚拟输出no backend replied to the request没有任何后端处理所请求的 backend 类型output not foundremove 时未找到该名称的显示器cannot remove a real display. Use the monitor keyword.试图移除真实物理显示器这些字符串都来自 dispatchOutput 实现可以逐字对照排查。另外注意hyprctl遇到以error:开头的回复会返回非零退出码hyprctl 源码脚本中可以用退出码判断成败。限制与边界hyprctl output只负责虚拟显示器的增删虚拟显示器不会写入配置文件Hyprland 重启后即失效持久化的显示器布局需要用monitor关键字在配置中声明。虚拟显示器名称在整个会话内必须唯一且不能与真实显示器重名。移除操作仅对m_createdByUser用户创建的输出有效这是源码中对真实显示器的硬拦截。本文所有命令都作用于当前HYPRLAND_INSTANCE_SIGNATURE指向的实例多实例环境下务必用-i确认操作对象避免把虚拟显示器加到错误的合成器实例上。【免费下载链接】HyprlandHyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesnt sacrifice on its looks.项目地址: https://gitcode.com/GitHub_Trending/hy/Hyprland创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表