AJ-dev-i60/t1-touchbar
GitHub: AJ-dev-i60/t1-touchbar
该驱动让搭载 T1 芯片的 MacBook Pro 在 Linux 上实现 Touch Bar 的自定义图形渲染与触摸事件读取。
Stars: 0 | Forks: 0
# t1-touchbar
一个**用于在 Linux 上驱动 Apple T1 (iBridge) MacBook Pro Touch Bar 的显示 + 输入驱动程序。**
T1 Touch Bar(MacBookPro13,x / 14,x — 2016–2017 年机型)是一块 2170×60 的显示屏,
由一个协处理器通过 USB 驱动。在 Linux 上,以前只能使用其三个固定的固件布局
(Esc / 功能键 / 媒体键)——直到现在。`t1-touchbar`
直接与设备的 **DFR 显示协议**通信并读取其**触摸数字化仪**,为你
提供一个完全可编程、支持手指追踪的表面:以约 90 fps 渲染任何内容,并获取
映射后的触摸事件。
这个驱动程序特意设计得很**轻量**:它只负责*显示输出*、*触摸输入*和
*设备生命周期*——除此之外没有其他功能。图形、动画、布局、小部件和
操作映射属于构建在它**之上**的工具。
## 功能
- **显示** — 将任何图像(PIL 或原始 RGB)位块传输到触控栏;支持约 90 fps 的全屏更新,
自动处理正确的几何形状和颜色。
- **触摸** — 带有坐标映射到面板像素的 `down` / `move` / `up` 事件。
- **两种消费方式** — Python 库(`import t1touchbar`)*或* Unix socket
daemon(`t1touchbar serve`),以便任何语言的工具都可以通过稳定的 IPC 驱动它。
## 要求
- 配备 **T1** 芯片(USB `05ac:8600` "iBridge")且运行 Linux 的 MacBook Pro。
- **Root 权限** — 驱动程序会发出 USB 控制传输指令,并短暂卸载内核的
`apple_touchbar` / `apple_ibridge` 模块。
- 系统:`libusb-1.0`。Python 依赖(自动安装):`pyusb`、`Pillow`、`evdev`。
## 安装
```
pip install t1-touchbar # from PyPI (once published)
# 或者,从 clone 中:
pip install .
```
## 快速开始 — Python
```
from t1touchbar import Device, TouchReader
from PIL import Image, ImageDraw
with Device() as bar: # switches config, handshakes, restores on exit
w, h = bar.width, bar.height # 2170 x 60
img = Image.new("RGB", (w, h), (0, 0, 0))
ImageDraw.Draw(img).text((20, 10), "Hello from Linux", fill=(0, 255, 120))
bar.blit(img)
def on_touch(ev): # ev.state, ev.x, ev.y
print(ev)
tr = TouchReader(w, h); tr.start(on_touch)
input("touch the bar; enter to quit\n")
tr.stop()
```
## 快速开始 — socket daemon(任何语言)
```
sudo t1touchbar serve # owns the device; prints the socket path
```
然后连接到 Unix socket(默认为 `/tmp/t1touchbar.sock`)并交换
带有长度前缀的消息 — 输入 `FRAME` / `IMG` / `CLEAR`,输出 `TOUCH` 事件。完整规范请见
[`docs/PROTOCOL.md`](docs/PROTOCOL.md)。包含了一个 Python 客户端:
```
from t1touchbar.client import Client
c = Client()
c.on_touch(lambda ev: print(ev)) # {'x':418, 'y':30, 'state':'down'}
c.image("logo.png")
```
## 示例
请查看 [`examples/`](examples/):响应式手指追踪涟漪、可点击的按钮和
跑马灯 — 全部基于公共 API 构建。
## 重要注意事项
- **同时只能有一个拥有者。** 只能有一个进程持有设备(config 2)。
- **直到重启前保持空白。** 退出时会交还显示控制权,而在 T1 上,固件不会
收回面板的控制 — 在重新启动之前它会保持空白。只要你希望触控栏亮起,就让驱动程序保持运行(daemon 正是为此而构建的)。
- **共存。** 当驱动程序占用 config 2 时,内置的网络摄像头、环境光
传感器以及原生的 Fn/媒体键行将不可用。
- **没有任何更改是永久性的** — 重新启动将完全恢复原生的 Touch Bar。
## 工作原理
驱动程序将 iBridge 切换到其 config-2("OS X")配置,占用
音频/视频接口,并使用 **DFR** 协议(与 T2 Mac 上主线 `appletbdrm`
驱动使用的协议相同)。图像会被转置 + 翻转为设备的
缓冲区布局,并以同步步调进行流式传输。触摸输入来自于内核作为 evdev "iBridge Touchpad" 公开的数字化仪,其中 `ABS_X`/`ABS_Y` 映射到像素。
有关详细信息和逆向工程日志,请见 [`docs/`](docs/)。
## 许可证
MIT — 请见 [LICENSE](LICENSE)。你可以在其上构建任何你想要的内容。
## 鸣谢
协议结构参考了 Linux 主线的 `appletbdrm` (T2) 驱动程序以及 imbushuo 的
Windows DFR 工作。T1 支持、几何校正、触摸以及本驱动程序均属于独立的
实现。
标签:Linux驱动, Python, Touch Bar, USB通信, 无后门, 硬件交互, 触控屏, 逆向工具