检查一下https://github.com/MonoEven/Autohotkey_Linux这个...
创建于:2026年8月23日
使用 GPT-5.6 Pro 回答 Chat01
创建于:2026年8月23日
使用 GPT-5.6 Pro 回答 Chat01
截至 2026 年 8 月 23 日,我对 linux-port 分支、当前发布版、兼容性矩阵、弱化功能审计、CI 和部分输入后端源码做了静态检查。
这个项目已经不是“只有解释器能跑”的半成品:AutoHotkey v2 语言层、文件/字符串/对象等通用功能,以及 X11/XWayland 下的桌面自动化已经有相当规模。但它距离“Linux 上可以无脑替代 Windows AutoHotkey”,尤其是距离“原生 Wayland 下完整替代”,仍有明显差距。
我的工程估算是:
| 实际使用目标 | 当前完成度估算 | 主要差距 |
|---|---|---|
| 把 AHK v2 当作 Linux 通用脚本语言 | 80%–90% | 少量 Windows 专用 API 和语义差异 |
| X11/Xorg 下做热键、发送、窗口自动化 | 70%–85% | 外部应用兼容、部分窗口/控件语义、长期稳定性 |
| XWayland 环境自动化 X11 应用 | 65%–80% | 原生 Wayland 应用仍受限制 |
| 原生 Wayland 下做基本全局快捷键和输入发送 | 50%–65% | 后端差异、权限、组合键和抑制语义 |
| 原生 Wayland 下获得完整 AHK 体验 | 25%–40% | Hotstring、InputHook、完整 remap、控件自动化尚未闭环 |
| 现有 Windows AHK 脚本不修改直接迁移 | 30%–45% | COM、注册表、Win32 消息、窗口模型等根本不同 |
| 团队或企业生产环境部署 | 40%–55% | 安全边界、真实环境矩阵、维护者数量、版本成熟度 |
因此可以概括为:
以“X11/XWayland 下可用的 AHK v2 Linux 移植”为需求,差距约 20%–30%;以“原生 Wayland 上完整、可靠、可生产使用的 AutoHotkey 替代品”为需求,差距约 50%–65%。
这些比例是基于源码和测试证据的工程估算,不是仓库的测试覆盖率。此次没有在真实 GNOME/KDE 物理机上进行装机压力测试。
仓库基于当前 AutoHotkey v2.0.26 分支移植,语言解释器层不是重新仿制,因而字符串、对象、数组、类、异常、文件、日期和大部分内建函数的基础语义具有较好起点。上游当前最新正式版本同样是 v2.0.26,因此至少暂时不存在明显的解释器版本落后问题。(GitHub)
项目声称在 X11/XWayland 下实现了 XGrabKey/XGrabButton、XTEST 输入注入、左右修饰键、通配符、按键抬起事件、组合热键、Hotstring、InputHook、窗口与控件操作、像素和图像搜索、GTK3 GUI 等。兼容矩阵也把 X11 标为功能完整路径。(GitHub)
这并不意味着与 Windows 逐项等价,但说明项目的正确定位应该是:
先把它当作 X11/XWayland 自动化工具,再把原生 Wayland 当作实验功能。
当前报告记录的是普通构建和 ASan 构建下 1143/1143 个断言、27 个回归测试、17 个 Wayland 测试和 252 个 XWayland 测试。2026 年 8 月 23 日最新提交对应的 CI 也处于成功状态,包括普通构建、ASan、无 XWayland 场景、容器和打包任务。(GitHub)
项目还专门维护了一份“弱化功能审计”,主动记录 COM、注册表、GUI、窗口属性等与 Windows 语义不一致的部分。这比单纯声称“全部支持”要可信得多。(GitHub)
GNOME Shell 后端当前主要支持排他式基本热键。仓库自己的文档明确写明,该后端尚不具备完整的:
~ 透传;a & b 自定义组合;Portal 后端又受到桌面环境、应用身份和用户授权模型影响。(GitHub)
更关键的是,当前兼容矩阵仍然把 原生 Wayland 的 Hotstring 和 InputHook 标为不可用,要求切换到 XWayland/Xorg。窗口和控件自动化也只为原生 Wayland 应用提供了 AT-SPI 的文本读取、文本设置和点击三个基本操作。(GitHub)
因此以下典型 AHK 场景目前不能算完成:
ahk::addr::完整地址文本 ih := InputHook() CapsLock & j::Send "{Left}" ~LButton up::...
在 Windows 和 X11 中,这些能力依赖连续、全局、可抑制的输入事件流;Portal 或普通桌面快捷键接口无法直接提供同等语义。
这是本次源码检查中最值得优先修复的问题。
当前 core_evdev_linux.cpp 会扫描全部:
text/dev/input/event*
但设备筛选逻辑只排除了名称为空的设备,以及名称中带 AHK/ahk 的自建 uinput 设备。它没有使用 EVIOCGBIT、EV_KEY capability、INPUT_PROP_* 等机制确认设备确实是键盘;随后直接尝试 EVIOCGRAB,并把“能否 grab”错误地当作设备是否可用的依据。(GitHub)
后续事件循环又只处理 EV_KEY:
cppif (ev.type != EV_KEY) continue;
而且只有能映射到有限 Windows VK 表的按键才会通过 uinput 重放。EV_REL、EV_ABS、EV_SYN、触控板事件、滚轮,以及未进入 VK 映射表的媒体键和鼠标按钮都可能被丢弃。(GitHub)
由代码可以推断:
当实验性 evdev 后端被启用并成功独占鼠标、触控板、游戏手柄或复合 HID 设备时,该设备的部分或全部事件可能不再到达桌面。
仓库已经加入了“Backspace → Escape → Enter”紧急退出序列,触发后释放全部 EVIOCGRAB;这证明维护者也意识到独占输入设备存在把用户锁在桌面外的风险。(GitHub)
不过紧急键不能替代正确的设备识别、完整事件转发和外部 watchdog。
另外,文档仍写着 evdev 后端在 ahk-inputd 发布之前会报告“backend not installed”,而源码已经出现进程内 evdev grab 实现。这说明该功能正处于快速开发中,代码、后端路由和文档尚未同步。(GitHub)
EVIOCGBIT 明确检查设备 capability,至少要求字母键、修饰键、Enter/Space 等典型键盘能力。EVIOCGRAB 是否成功判断设备是不是键盘。在这些问题解决前,不建议在主力桌面上启用实验性的 evdev 抑制模式。
uinput 发送需要 /dev/uinput 权限,evdev 捕获需要读取 /dev/input/event*,源码错误信息目前建议将用户加入 input 组或使用 root。(GitHub)
这会带来两个问题:
input 组通常不只是允许 AutoHotkey 读取按键,而是允许该用户上下文中的进程读取原始输入设备;这相当于扩大了键盘记录攻击面。/dev/uinput 权限使进程能够向桌面注入模拟输入。项目规划中的 ahk-inputd 小型 broker 是正确方向,但需要补齐:
SO_PEERCRED 身份验证;input 组。1143/1143 不是“AutoHotkey 兼容度 100%”。
项目自己的审计明确说明:
例如,一个函数在 Linux 上明确抛出“不支持”的异常,也可能被计入通过断言。这对于防止崩溃很有价值,但不应与功能实现率混为一谈。
更合适的指标应该拆成:
| 状态 | 含义 |
|---|---|
| Native | Linux 原生实现且语义基本一致 |
| Equivalent | 使用 Linux 等价能力实现 |
| Degraded | 可调用,但行为或功能明显弱化 |
| Error boundary | 仅保证抛出明确错误 |
| Not implemented | 未实现 |
| Environment-dependent | 依赖桌面、扩展、Portal 或外部程序 |
目前仓库把“入口可调用”“明确报错”和“完整实现”混在一个总体断言数字中,容易产生宣传上的误导。
以下差异不会因为增加几个测试就自然消失:
项目所谓的 COM 实际是 D-Bus 映射,不存在 Windows 的 IUnknown、IDispatch、SafeArray 或真实 COM vtable;ComObjArray、ComObjQuery、ComObjConnect 等没有可运行的对应实现。(GitHub)
因此依赖 Excel、Word、Internet Explorer、WMI、Shell.Application 等 COM 自动化的 Windows AHK 脚本基本不能直接迁移。
RegRead/RegWrite 的底层实际上是单用户配置文件,HKCU、HKLM、HKCR、HKCC 被压到同一文件中,没有系统权限、注册表 hive 或 32/64 位视图语义。(GitHub)
这适合作为“让脚本保存设置”的兼容层,不适合被描述成 Windows 注册表兼容。
OnMessage、SendMessage、PostMessage 不存在真实 Win32 消息投递;RunAs 可以保存凭据状态,但启动阶段仍会失败。(GitHub)
GTK3 GUI 只覆盖部分控件和选项;有些属性接受参数但忽略。控件的 enabled、checked、style 等部分状态保存在本地 shadow map 中,外部程序改变后不一定读得回来。窗口样式、透明度和置顶也部分依赖 shadow 状态和 EWMH,不能保证外部窗口结果准确。(GitHub)
这些属于平台模型差异,应该在迁移工具中明确标注,而不是继续追求单一“内建函数实现数量”。
AT-SPI 当前主要实现:
ControlGetTextControlSetTextControlClick并且端到端验证重点是 GTK3 应用。项目自己把任意窗口/属性枚举,以及 Qt/Electron 应用矩阵列为后续工作。(GitHub)
真实桌面自动化还需要覆盖:
AT-SPI 也不是 Win32 Control API 的直接替代。程序是否启用无障碍接口、控件角色是否规范、应用是否运行在沙箱中,都会影响结果。
在 GNOME/KWin 等缺乏 virtual-keyboard 协议的环境中,项目会采用:
Ctrl+V;项目已经提供禁用开关并在首次使用时对密码管理器和敏感文本发出警告。(GitHub)
这个方案对普通文本扩展可以接受,但不能保证:
因此“SendText 支持 Unicode”和“以真实按键方式可靠发送 Unicode”应当在文档中区分。
当前 README 仍写着:
TrayTip、TraySetIcon 未实现或无托盘图标。但当前兼容文档和 CHECK_REPORT 已经写成:
TrayTip 经通知服务实现;TraySetIcon 经 StatusNotifierItem 实现。8 月 23 日的最新提交也专门加入了 SNI 托盘注册场景。(GitHub)
甚至 CHECK_REPORT 一处仍把 TrayTip/TraySetIcon 列在“边界错误操作”中,另一处又描述它们已经实现。(GitHub)
这说明所谓的“机器校验数字防漂移”只验证了部分报告文件,没有让 README、能力矩阵、worklist 和 release notes 从同一个 feature manifest 自动生成。
建议建立一个唯一的机器可读清单,例如:
yamlTraySetIcon: x11: equivalent gnome-wayland: equivalent kde-wayland: unverified implementation: status-notifier-item tests: - headless - gnome49-vm since: linux.16
README、文档表格和测试报告全部从该清单生成。
最新正式发布版是 v2.0.26-linux.15,发布于 8 月 20 日;但 8 月 23 日开发分支已经继续增加 evdev panic、inputd/remap、IBus、Flatpak、AT-SPI 应用矩阵、托盘 SNI 等大量场景和修复。(GitHub)
这意味着:
至少应该维护:
main 或稳定分支;linux-port-next 开发分支;兼容矩阵重点覆盖 Ubuntu 24.04 的 Xvfb/sway/XWayland,以及 Ubuntu 25.10 的 GNOME 49 VM。Fedora、Debian、Arch、其他 GNOME 版本和更完整的 KDE 路径仍被列为计划项。(GitHub)
这对于 Linux 桌面项目远远不够,因为结果还会受以下因素影响:
当前 CI 成功能证明代码没有明显退化,但不能证明复杂真实桌面的可靠性。
仓库目前由单一维护者维护,页面显示 0 fork、0 issue、0 pull request,尚未形成外部用户问题库、代码评审或多人维护结构。项目自己也承认“大规模社区验证仍然很年轻”。(GitHub)
这会带来:
这是进入 beta 前的阻断项:
ahk-inputd。需要依次补齐:
SendLevel/InputLevel;当前 evdev 源码还明确表示左右修饰键在该路径中按合并掩码匹配,不能可靠区分 <^a 与 >^a。(GitHub)
至少加入 GTK3、GTK4、Qt6、Electron、Firefox、LibreOffice 六类应用,在 X11、GNOME Wayland 和 KDE Wayland 上分别验证:
不要再以“367 built-ins”和“1143/1143”作为主要完成度指标。
应该按实际场景发布:
每项附真实测试环境和已知限制。
需要有:
在 Xorg/X11 或主要目标程序都运行于 XWayland 的个人环境中,用于:
建议固定具体 commit 或 release,不要直接追随每日开发分支。
在 GNOME/KDE Wayland 中用于:
Send;需要避免密码、密钥等内容经过剪贴板回退,并暂时避免在主力桌面开启实验性的 evdev 独占路径。
最终判断:这是一个进展很快、X11 路线已经值得试用的技术预览,但还不是通用的 Linux AutoHotkey 正式替代品。当前最优先的问题不是继续增加“内建函数数量”,而是修复 evdev 输入设备处理、安全权限模型、原生 Wayland 捕获闭环,以及建立真实桌面和应用验证矩阵。