mons守护进程模式:显示器热插拔自动重置显示的终极自动化方案 mons守护进程模式显示器热插拔自动重置显示的终极自动化方案【免费下载链接】monsPOSIX Shell script to quickly manage monitors on X项目地址: https://gitcode.com/gh_mirrors/mo/mons如果你经常在笔记本上外接显示器一定经历过这样的尴尬拔掉外接显示器后内置屏幕却迟迟不亮或画面错乱只能手动敲 xrandr 命令重置显示。mons 正是一款专为这种场景设计的POSIX Shell 显示器管理脚本它基于 xrandr 快速管理 X 环境下的多显示器而它的守护进程模式-a参数会自动监听显示器热插拔实现显示器热插拔自动重置显示的终极自动化从此告别手动折腾。痛点笔记本外接显示器为何总要手动重置先看一个几乎每个笔记本 外接屏用户都遇到过的场景我在笔记本上接了外接显示器只想像用单屏一样专注工作于是手动关掉了内置屏幕。过了一会儿要拔线走人结果拔掉外接屏后内置屏幕居然不亮了——因为系统并不知道该把显示输出切回内置屏幕。这就是显示器热插拔后的状态残留问题物理连接变了但 X 的显示配置还停留在拔线之前。解决它需要重新检测显示器、重置输出而这些操作用原生 xrandr 命令手动做既繁琐又容易出错。mons 守护进程模式就是为此而生的自动化方案。mons 是什么零依赖的 X 显示器管理利器mons 是一个完全用 Shell 编写的开源工具整个项目只有一个核心脚本依赖极少却覆盖了日常几乎所有的显示器管理需求功能类别能力说明对应命令基础操作仅主屏 / 仅副屏 / 镜像 / 复制-o、-s、-m、-d扩展桌面向左、右、上、下任意方向扩展-e right等模式循环一个快捷键轮换全部双屏模式-n side多屏选择从多个显示器中启用指定的一块或两块-O id、-S id1,id2:R守护进程热插拔自动检测并重置显示-a、-a -x 脚本核心特性一览零依赖遵循 POSIX 规范唯一要求是xorg-xrandr为笔记本而生投影、外接、复制、扩展一键切换全自动守护进程模式自动响应显示器热插拔mons守护进程模式如何实现热插拔自动检测守护进程模式是 mons 最具价值的杀手锏。它不依赖复杂的桌面环境通知服务而是采用了一套极其轻量可靠的检测机制实现见 mons.sh轮询内核状态循环读取 Linux 内核暴露的 DRM 接口/sys/class/drm/*/status统计所有处于connected状态的显示器数量变化即触发将当前数量与上一次记录比较一旦显示器热插拔导致数量变化立即触发重置逻辑自动重置显示当检测到只剩 1 块显示器时自动执行xrandr --auto把显示输出正确切回剩余的屏幕低开销守候每 2 秒检查一次占用的系统资源几乎可以忽略不计。整个过程完全自动拔线、插线的瞬间显示就会自动恢复到你想要的状态这就是显示器热插拔自动重置显示的核心实现。一行命令启动 mons 守护进程启动守护进程非常简单只需一条命令。为了让它能在终端关闭后继续在后台运行官方推荐了三种写法适配不同 Shell# 通用写法所有 Shell 通用 $ nohup mons -a /dev/null 21 # zsh 专属写法 $ mons -a ! # bash 专属写法 $ mons -a ; disown启动后mons 会在后台静静监听显示器热插拔事件。你拔掉外接显示器内置屏幕立即自动点亮重新插上它又会按需重置显示布局。让 mons 守护进程开机自启想更进一步做到开机即自动化把上面的命令加入你的窗口管理器自启动配置即可若使用.xinitrc启动 X直接在文件末尾加上nohup mons -a /dev/null 21 若使用 GNOME/KDE 等桌面环境将命令写入启动应用程序项或放进~/.config/autostart/下的.desktop文件中。从此每次开机显示器热插拔自动化都在后台默默值守。进阶玩法用 MONS_NUMBER 脚本实现多显示器智能切换如果你觉得自动重置还不够想针对不同的显示器数量执行完全不同的布局和个性化配置mons 还提供了-x 脚本参数。它会在每次检测到显示器数量变化时调用你指定的脚本并通过环境变量MONS_NUMBER告诉脚本当前有几块显示器。一个典型的使用方式是配置档案# 在家用一个屏在公司接两个屏拔插自动切换对应配置 $ mons -a -x /path/to/home-profile.sh $ mons -a -x /path/to/work-profile.sh下面是一个实际的示例脚本它根据显示器数量自动切换桌面布局和壁纸#!/bin/sh case ${MONS_NUMBER} in 1) mons -o # 只启用主屏 feh --no-fehbg --bg-fill ${HOME}/wallpapers/a.jpg ;; 2) mons -e top # 扩展副屏到上方 feh --no-fehbg --bg-fill ${HOME}/wallpapers/a.jpg \ --bg-fill ${HOME}/wallpapers/b.jpg ;; *) # 其他情况手动处理 ;; esac脚本本身可以用任何你熟悉的 Shell 编写配合feh、i3等工具就能把显示器热插拔自动化升级成一套完整的工作环境切换系统。更详细的参数说明可以参考项目的 README.md 文档。三个真实场景守护进程模式有多香 场景一会议室投屏插上投影仪自动扩展演示拔下投影仪立即切回笔记本屏幕全程无需任何操作演示节奏不被打断。 场景二家庭办公双屏外接大屏时自动扩展桌面并切换壁纸收起笔记本时自动恢复单屏布局配合-x脚本实现工位模式 / 移动模式无缝切换。️ 场景三多显示器工作站在多屏工作站上用-O/-S精确选择要启用的显示器组合配合守护进程在拔插任意一块屏幕后自动恢复预设布局。mons 常见问题解答守护进程会占用很多资源吗不会。它每 2 秒做一次轻量文件读取CPU 和内存开销几乎可以忽略适合常驻后台。守护进程会和手动 xrandr 操作冲突吗不会。它只关心显示器数量是否变化你手动调整的布局不会被覆盖只有当热插拔发生时它才会介入重置。支持 Wayland 吗不支持。mons 面向 X 环境X11通过 xrandr 与 X 服务通信Wayland 用户需要寻找其他方案。如何安装 monsArch 用户可用pacaur -S mons安装FreeBSD 用户执行pkg install mons也可以克隆仓库后手动安装$ git clone --recursive https://gitcode.com/gh_mirrors/mo/mons $ cd mons $ sudo make install结语从拔线后手动敲 xrandr到拔插即自动重置mons 守护进程模式用极简的实现带来了极致的体验提升。它没有复杂的配置、没有笨重的依赖只有一行命令带来的显示器热插拔自动重置显示能力。如果你的工作流里也经常出现外接显示器插拔不妨现在就启动mons -a让显示管理从此进入全自动时代。【免费下载链接】monsPOSIX Shell script to quickly manage monitors on X项目地址: https://gitcode.com/gh_mirrors/mo/mons创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考