# DisplayManager-test **Repository Path**: michael998/display-manager-test ## Basic Information - **Project Name**: DisplayManager-test - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-31 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Display Manager - 多显示器管理工具 基于 XRandR 1.6 API 的 C++ 多显示器分辨率与坐标管理系统 ## 功能特性 - ✅ 获取所有显示器信息(名称、状态、可用模式) - ✅ 设置显示器分辨率(宽度、高度、刷新率) - ✅ 设置显示器位置坐标(x, y 偏移) - ✅ 设置显示器旋转(0°, 90°, 180°, 270°) - ✅ 设置显示器缩放(X, Y 轴缩放比例) - ✅ 列出活跃显示器 - ✅ 重置为推荐配置 - ✅ 支持多显示器同时管理 ## 系统要求 - Linux 系统 - CMake 3.10+ - GCC/G++ 编译器 - X11 开发库 - XRandR 1.6+ 开发库 ## 安装依赖 ### Ubuntu/Debian ```bash sudo apt-get install libx11-dev libxrandr-dev cmake g++ ``` ### Fedora/RHEL ```bash sudo dnf install libX11-devel libXrandr-devel cmake gcc-c++ ``` ### Arch Linux ```bash sudo pacman -S libx11 libxrandr cmake base-devel ``` ## 编译项目 ```bash # 创建构建目录 mkdir build && cd build # 运行 CMake 配置 cmake .. # 编译项目 make # (可选)安装到系统 sudo make install ``` ## 使用方法 ### 查看所有命令 ```bash ./display_manager --help ``` ### 列出所有显示器 ```bash ./display_manager list ``` ### 列出活跃的显示器 ```bash ./display_manager active ``` ### 设置分辨率 ```bash # 格式:set-res <显示器名称> <宽度> <高度> [刷新率] ./display_manager set-res HDMI-1 1920 1080 60 ./display_manager set-res DP-1 2560 1440 144 ``` ### 设置显示器位置 ```bash # 格式:set-pos <显示器名称> # 将 DP-1 放置在 HDMI-1 右侧 ./display_manager set-pos DP-1 1920 0 # 三屏设置示例 ./display_manager set-pos HDMI-1 0 0 ./display_manager set-pos DP-1 1920 0 ./display_manager set-pos DVI-1 3840 0 ``` ### 设置显示器旋转 ```bash # 格式:set-rot <显示器名称> <0|90|180|270> ./display_manager set-rot HDMI-1 90 # 顺时针旋转 90 度 ./display_manager set-rot DP-1 180 # 倒置显示 ``` ### 设置显示器缩放 ```bash # 格式:set-scale <显示器名称> ./display_manager set-scale HDMI-1 1.5 1.5 # 放大 1.5 倍 ./display_manager set-scale DP-1 0.8 0.8 # 缩小到 0.8 倍 ``` ### 重置为推荐配置 ```bash ./display_manager reset ``` ### 查看 XRandR 版本 ```bash ./display_manager version ``` ## 使用示例 ### 双屏横向排列 ```bash # 主显示器在左,副显示器在右 ./display_manager set-pos HDMI-1 0 0 ./display_manager set-pos DP-1 1920 0 ``` ### 上下排列显示器 ```bash # 主显示器在下,副显示器在上 ./display_manager set-pos HDMI-1 0 1080 ./display_manager set-pos DP-1 0 0 ``` ### 竖屏显示 ```bash # 将显示器旋转 90 度用于竖屏 ./display_manager set-rot DP-1 90 ./display_manager set-res DP-1 1080 1920 60 ``` ### 三屏环绕配置 ```bash # 三个显示器水平排列 ./display_manager set-pos HDMI-1 0 0 ./display_manager set-pos DP-1 1920 0 ./display_manager set-pos DVI-1 3840 0 # 设置统一分辨率 ./display_manager set-res HDMI-1 1920 1080 60 ./display_manager set-res DP-1 1920 1080 60 ./display_manager set-res DVI-1 1920 1080 60 ``` ## 项目结构 ``` . ├── CMakeLists.txt # CMake 配置文件 ├── include/ │ ├── DisplayManager.h # 显示器管理器头文件 │ └── MonitorConfig.h # 显示器配置头文件 ├── src/ │ ├── main.cpp # 主程序入口 │ ├── DisplayManager.cpp # 显示器管理器实现 │ └── MonitorConfig.cpp # 显示器配置实现 └── README.md # 项目说明文档 ``` ## API 使用示例 ### C++ 代码中使用 ```cpp #include "DisplayManager.h" #include "MonitorConfig.h" int main() { // 创建并初始化管理器 DisplayManager manager; if (!manager.initialize()) { return -1; } // 获取所有显示器 auto monitors = manager.getMonitors(); // 设置第一个显示器的分辨率 if (!monitors.empty()) { manager.setResolution(monitors[0].name, 1920, 1080, 60000); // 设置位置 manager.setPosition(monitors[0].name, 0, 0); // 设置旋转 manager.setRotation(monitors[0].name, MonitorConfig::ROTATE_0); } // 清理资源 manager.cleanup(); return 0; } ``` ## 注意事项 1. **权限要求**: 某些操作可能需要 X server 权限 2. **配置持久化**: XRandR 配置仅在当前会话有效,重启后失效。如需永久保存: - 将命令添加到 `~/.xprofile` 或 `~/.xinitrc` - 使用桌面环境的自动启动功能 3. **显示器名称**: 使用 `list` 命令查看可用的显示器名称(如 HDMI-1, DP-1 等) 4. **刷新率单位**: 内部使用 mHz(毫赫兹),命令行输入使用 Hz 5. **坐标系统**: - (0, 0) 是左上角 - X 轴向右为正 - Y 轴向下为正 ## 故障排除 ### 无法连接到 X Server 确保在 X 会话中运行,或设置 DISPLAY 环境变量: ```bash export DISPLAY=:0 ``` ### 找不到显示器 使用 `list` 命令确认显示器名称是否正确 ### 分辨率不可用 使用 `list` 查看显示器支持的分辨率列表 ### XRandR 版本过低 本工具需要 XRandR 1.6 或更高版本 ## 技术细节 - 使用 XRandR 1.6 API 进行显示器管理 - 通过 X11 协议与 X server 通信 - 支持热插拔显示器检测 - 使用 CMake 构建系统 - C++17 标准 ## 许可证 本项目仅供学习和研究使用 ## 贡献 欢迎提交问题和改进建议!