黑客揭露了苹果隐藏的硬件秘密!你的MacBook中内置有加速度计和陀螺仪,即使你不曾告知售后人员电脑是否摔过,它们都能记录相关信息。
苹果官方文档没有提及这些传感器接口,但它们实际上存在于每一台MacBook之中。
亏贼!
比如轻轻晃动或转动电脑,屏幕上的数据显示会随之变动。
更令人惊讶的是,将手腕靠近触控板10-20秒后,软件还能检测到类似心跳引起的轻微振动信号——

这就好比是用MacBook进行了一次“心率测量”(不过不具备医疗用途)。
这一发现引发网友热议:原来你的笔记本还有这样的功能?
通过这些数据,苹果可能可以评估你在申请AppleCare保修时是否摔坏了电脑。
苹果的标准保修不包含意外损坏,而AppleCare则是需要额外付费的服务。
如果真的有加速度计的话,以后在维修时找借口就更难了。(doge)
根据开发者的GitHub页面,在配备M3芯片的MacBook Pro中确实存在加速度计和陀螺仪的数据流。

也有人开始联想:
这些传感器数据是通过系统底层IOKit HID接口获取到的。

苹果并未公开API,也没有在官方文档中说明其具体作用。

具体来说,这个设备挂在macOS的IOKit设备树下,名为AppleSPUHIDDevice。
M3 Pro上已证实
它属于苹果公司内部开发的Sensor Processing Unit(传感器处理单元)体系,并由系统驱动AppleSPUHIDDriver来管理。
在HID设备里,usage 3代表加速度计,usage 9代表陀螺仪,两者都来自于同一块物理IMU芯片。
根据拆机分析推测,这块芯片可能是Bosch BMI286(但未得到官方确认)。

当前已经证实的机型包括M3系列MacBook Pro,而英特尔老款mac和初代M1芯片的MacBook中则没有该设备。

根据项目说明及网友分析,这个接口可以读取的数据有三轴加速度、三轴陀螺仪数据以及开盖角度等信息。
关于其具体用途,开发者并未详细解释,但许多人猜测它与MacBook的保修政策有关联。
然而值得注意的是,电脑判断屏幕是否合上(进入休眠状态)这一功能一直存在——
它依靠姿态或磁感应来实现;此外,环境光数据也不足为奇,因为Mac的屏幕和键盘都有自动调节亮度的功能。
这个传感器能干嘛?
至于“测心跳”,确实令人好奇,很多网友表示对此很感兴趣。
将手腕靠近触控板10-20秒,软件会尝试捕捉心率引起的微弱振动(BCG原理)。
它通过0.8至3Hz的带通滤波器和自相关算法来估算每分钟心跳次数。
不过需要强调的是,这并不能用于医疗目的,只是展示传感器的灵敏度而已。

事实上,目前还没有证据表明这些数据会被用来记录摔落历史或上传运动信息。
据开发者透露,随着苹果系统的更新,这个传感器的数据流可能会被禁用。

至于是否能实时检测电脑姿态并在意外掉落时阻止保修,还需等待苹果的官方回应。
如果你对此感兴趣的话,也可以在自己的设备上尝试一下。
(具体操作请参考:https://github.com/olvvier/apple-silicon-accelerometer)
若要查看AppleSPUHIDDevice节点以确认设备存在,则需要使用sudo命令(因为访问IOKit HID接口需root权限)。
成功运行后晃动电脑,终端数值会实时变化。
将手腕靠近触控板10-20秒,可以尝试进行“心跳检测”演示。
自己测试一下
最后,如果感兴趣的话,你也可以在自己的电脑上玩一下。
(详情可参考https://github.com/olvvier/apple-silicon-accelerometer)
先在终端运行:
ioreg -l -w0 | grep -A5 AppleSPUHIDDevice
如果能看到 AppleSPUHIDDevice 节点,说明设备存在。
然后:
git clone https://github.com/olvvier/apple-silicon-accelerometer
cd apple-silicon-accelerometerpip
install -e .
sudo python3 motion_live.py
值得一提的是,这里需要 sudo,因为Apple Silicon上访问IOKit HID需要root权限。
成功运行后晃动电脑,终端数值会实时变化。
把手腕放在触控板附近10–20 秒,可以尝试“心跳检测”演示。
参考链接
[1]https://github.com/olvvier/apple-silicon-accelerometer
[2]https://x.com/QingQ77/status/2025556429331943667?s=20
[3]https://medium.com/@oli.bourbonnais/your-macbook-has-an-accelerometer-and-you-can-read-it-in-real-time-in-python-28d9395fb18
