从零写 OS 内核-第二十八篇:窗口管理器(Window Manager) —— 通过键盘实现窗口控制

“没有鼠标?没关系!真正的极客用键盘掌控一切。 今天,我们实现窗口管理器(Window Manager),通过键盘快捷键移动、缩放窗口!”

在前几篇中,我们构建了用户态 Display Server、Launcher 和多个应用, 但窗口仍是 静态的 :

位置固定
大小不可变
无标题栏、边框等装饰

虽然我们尚未实现鼠标驱动,但 键盘足以控制窗口 ! Unix 哲学告诉我们: 键盘是终极交互设备 。

今天,我们就来: ✅ 设计窗口管理协议 ✅ 实现用户态窗口管理器 ✅ 通过键盘快捷键控制窗口 ✅ 绘制窗口装饰(标题栏、边框)

让你的 OS 拥有 键盘驱动的窗口管理能力 !


🖥️ 一、窗口管理器架构(无鼠标版)

核心思想:

Display Server

:只负责
合成与上屏
Window Manager

:作为
特殊 Client
,管理所有窗口的装饰与键盘交互
普通 Client

:只绘制
内容区域

交互方式:

操作 快捷键
切换焦点窗口 Alt+Tab
移动窗口 Alt+方向键
缩放窗口 Alt+Shift+方向键
关闭窗口 Alt+F4
最大化 Alt+F10

💡 i3、xmonad 等平铺式窗口管理器正是以键盘为中心 !


📐 二、窗口管理协议扩展

  1. 新命令类型

  2. 窗口状态


⌨️ 三、键盘事件处理

  1. Display Server 添加键盘事件通道

    TTY 驱动将特殊按键(如
    Alt
    )发送给
    Window Manager
    普通字符仍发送给
    焦点窗口

  2. WM 键盘状态机

  3. 处理按键事件


🖼️ 四、用户态窗口管理器实现

  1. WM 主循环

  2. 处理新窗口

  3. 绘制窗口装饰

  4. 窗口操作函数


📡 五、Client 端适配

  1. 处理 WM 命令

  2. 绘图区域自动适配

    Client 始终绘制到
    内容区域缓冲区
    WM 负责将内容区域合成到正确位置


🧪 六、测试:键盘控制窗口

操作流程:

  1. 启动 Terminal 和 Painter
  2. Alt+Tab

    → 切换焦点窗口(标题栏颜色变化)

  3. Alt+→

    → 焦点窗口向右移动 10 像素

  4. Alt+Shift+→

    → 焦点窗口宽度增加 10 像素

  5. Alt+F4

    → 关闭焦点窗口

运行效果:

焦点窗口标题栏:蓝色
非焦点窗口标题栏:灰色
窗口移动/缩放实时生效
关闭窗口后自动切换到下一个窗口

✅ 键盘驱动的窗口管理器工作正常 !


⚙️ 七、优势与扩展

优势:

高效

:键盘操作比鼠标更快(对程序员友好)
可靠

:无需复杂鼠标驱动
可脚本化

:快捷键可绑定到脚本

扩展方向:

  1. 窗口布局管理

    平铺布局(i3 风格)
    标签式布局(一个窗口区域,多个标签页)

  2. 工作区(Workspace)

    Ctrl+Alt+1/2/3

    切换工作区
    每个工作区独立窗口集合

  3. 窗口规则

    根据应用名称自动放置窗口
    自动最大化特定应用

💡 键盘为中心的设计,正是高效工作流的核心 !


💬 写在最后

窗口管理器不需要鼠标, 键盘足以掌控整个桌面。 在命令行与快捷键的世界里, 效率与优雅并存。

今天你实现的第一个键盘窗口管理器, 正是 i3、xmonad 等现代 WM 的简化版。

🌟 真正的掌控感,来自指尖而非鼠标。


📬 动手挑战 : 添加 Alt+F11 全屏快捷键,并实现工作区切换(Alt+1/2/3)。 欢迎在评论区分享你的键盘快捷键配置!

👇 下一篇你想看: 任务栏(Taskbar)实现 ,还是 终端多标签支持 ?


#操作系统 #内核开发 #窗口管理器 #KeyboardDriven #WM #图形界面 #从零开始


📢 彩蛋 :关注后回复关键词 “wm-keyboard” ,获取:
完整键盘窗口管理器源码
窗口装饰绘制模板
快捷键配置表

最后修改: 2026年7月1日

作者

评论

发表评论

您的邮箱地址不会被公开。