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通信, 无后门, 硬件交互, 触控屏, 逆向工具