hevnsnt/artinchip-linux

GitHub: hevnsnt/artinchip-linux

为 ArtInChip USB 条形屏逆向开发了 Linux 驱动,突破官方仅支持 Windows 和 DRM 冲突的限制,提供丰富的内置监控仪表板和媒体渲染能力。

Stars: 0 | Forks: 0

# tinyscreen — ArtInChip USB 条形屏的 Linux 驱动程序 **适用于 ArtInChip (33c3:0e02) USB 条形屏的开源 Linux 显示驱动程序**,包括在 AliExpress 上销售的广受欢迎的 ZHAOCAILIN 11.3 英寸 1920x440 拉伸 LCD 显示屏。 这些廉价的 USB-C 条形屏出厂时仅附带 Windows 驱动程序,**完全不支持 Linux** —— 直到现在。 ![License](https://img.shields.io/badge/license-MIT-blue) ![Python](https://img.shields.io/badge/python-3.10+-green) ![Platform](https://img.shields.io/badge/platform-Linux-orange) ## 屏幕截图 **System Monitor** — CPU 核心、温度、GPU、内存、带有迷你折线图的网络: ![sysmon](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ac23c1610f122743.png) **Crypto Ticker** — 来自 CoinGecko 的实时价格、24小时变化和迷你折线图: ![ticker](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5e1033cbc0122747.png) **Docker Monitor** — 容器状态、CPU/内存进度条、网络 I/O: ![docker](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e5e11ce3f5122749.png) **Clock + Weather** — 动态天气场景、12小时制时间、系统统计信息: ![clock](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/828c940e24122750.png) **Network Monitor** — 活动连接、状态分类、进程名: ![netmon](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/83560235cb122752.png) ## 支持的硬件 | 显示器 | 分辨率 | 芯片组 | USB ID | 状态 | |---------|-----------|---------|--------|--------| | ZHAOCAILIN 11.3" Bar LCD | 1920x440 | ArtInChip RISC-V | `33c3:0e02` | 完全正常工作 | | ArtInChip USB Display (0e01) | Various | ArtInChip | `33c3:0e01` | 理论上可用(未测试) | | ArtInChip USB Display (0e04) | Various | ArtInChip | `33c3:0e04` | 理论上可用(未测试) | | ArtInChip USB Display (0e05) | Various | ArtInChip | `33c3:0e05` | 理论上可用(未测试) | 如果你的 `lsusb` 输出显示 **`33c3:0e0x`** 并且你正在使用 Linux,这就是为你准备的。 ## 快速安装 ``` git clone https://github.com/hevnsnt/artinchip-linux.git cd artinchip-linux sudo ./install.sh ``` 安装程序会处理依赖项、udev 规则,并将 `tinyscreen` 放入你的 PATH 中。安装后无需 sudo。 ## 显示模式 ### 内置仪表板 | 模式 | 标志 | 描述 | |------|------|-------------| | **System Monitor** | `--sysmon` | CPU 每核心进度条、温度、GPU、内存、磁盘、交换分区、网络迷你折线图 | | **Crypto Ticker** | `--ticker` | 实时 BTC/ETH/SOL/DOGE/ADA/DOT/LINK/AVAX 价格及 24 小时变化 | | **Clock + Weather** | `--clock` | 12小时制时钟、动态天气场景(雾、雨、晴、雪、暴风雨)、系统统计信息 | | **Matrix Rain** | `--matrix` | 带有真实 syslog 数据叠加的数字雨效果 | | **Audio Visualizer** | `--visualizer` | 来自 PulseAudio/PipeWire 捕获的 FFT 频谱分析器 | | **Now Playing** | `--nowplaying` | 带进度条的 MPRIS 媒体信息(Spotify 等) | | **Docker Monitor** | `--docker` | 容器状态、CPU/内存进度条、网络 I/O | | **Network Monitor** | `--netmon` | 活动连接、状态分类、进程名 | | **News Crawl** | `--news` | 来自 Reuters、BBC、Hacker News 的滚动 RSS 标题 | | **Pomodoro Timer** | `--pomodoro` | 25/5 专注计时器,带有圆形进度和颜色变化 | ### 媒体与网页 | 模式 | 标志 | 描述 | |------|------|-------------| | **Website** | `--url URL` | 通过 headless Chromium CDP screencast 实现 **60fps 实时** 渲染 | | **YouTube** | `--video URL` | 获取最高 4K 源并缩放至显示器 | | **Local Video** | `--video FILE` | 任何 ffmpeg 支持的格式,使用 `--loop` 循环播放 | | **Static Image** | `--image FILE` | 显示任何图片文件 | ## 用法 ``` # Single 模式 tinyscreen --sysmon tinyscreen --matrix tinyscreen --ticker tinyscreen --docker tinyscreen --clock # 显示网站(60fps 实时渲染) tinyscreen --url https://your-dashboard.example.com/ tinyscreen --url http://egon.local:8420/ --rotate 180 # 循环切换模式(每个 30 秒) tinyscreen --show all --delay 30 # 循环特定模式 tinyscreen --show sysmon matrix ticker docker --delay 20 # 播放视频 tinyscreen --video "https://www.youtube.com/watch?v=dQw4w9WgXcQ" tinyscreen --video /path/to/video.mp4 --loop # 旋转显示输出 tinyscreen --sysmon --rotate 180 # 直接运行 — 使用 config.yml 默认值 tinyscreen # 截取当前 URL 渲染 tinyscreen --screenshot tinyscreen --screenshot /path/to/output.png # 控制 tinyscreen --status tinyscreen --off ``` 所有命令默认在后台运行。添加 `--fg` 以在前台运行。 ### 所有选项 | 标志 | 描述 | |------|-------------| | `--show MODE [MODE...]` | 循环显示模式(使用 `all` 包含所有,或列出名称) | | `--delay N` | 循环时每种模式的秒数(默认:30) | | `--rotate N` | 旋转输出 0/90/180/270 度 | | `--fps N` | 目标帧率(默认:24) | | `-q N` | JPEG 质量 1-100(默认:自动) | | `--loop` | 循环视频播放 | | `--fg` | 在前台运行(不作为守护进程) | | `--screenshot [FILE]` | 将当前 URL 渲染结果截取为 PNG | | `--off` | 停止运行中的实例 | | `--status` | 显示当前状态 | | `--test` | 显示测试图案 | ## Website 模式 `--url` 模式通过以下方式以 **60fps 实时** 渲染网站: 1. 带有 Chrome DevTools Protocol (CDP) 的 **Headless Chromium** 2. **CDP Page.startScreencast** — Chromium 通过 WebSocket 推送每个渲染好的帧 3. 帧由 Chromium 进行 JPEG 编码并直接发送到 USB 显示屏 这意味着 CSS 动画、JavaScript 更新、进度条和实时仪表板数据都能在条形屏上平滑渲染。页面的 JavaScript 会持续运行 —— 这是一个真实的浏览器,而不是截图。 ### 为条形屏设计页面 浏览器视口大小严格为 **1920x440 像素**。关键规则: - 所有内容必须适配 440px 高度 —— 不可滚动 - 使用水平多列布局(3-5 列) - 大文本:正文 16-20px,标题 24-36px,关键指标 48-72px - 最小内边距(4-8px) —— 高度的每一像素都极其重要 - 不要有导航栏、页脚或 UI 边框 ## 配置 当你不带参数运行 `tinyscreen` 时,它会读取 `/opt/tinyscreen/config.yml`: ``` # 默认运行内容 mode: rotate # 循环的模式 rotate: modes: - sysmon - matrix - ticker - docker - clock delay: 30 # seconds per mode # URL 模式设置 url: http://your-dashboard.local:8421/ # 全局设置 quality: 80 # JPEG quality 1-100 fps: 24 # target framerate rotate_display: 0 # 0, 90, 180, or 270 degrees ``` CLI 标志始终覆盖 config.yml 的设置。 ### 开机自动启动 ``` # 根据您的偏好编辑 systemd 服务: sudo nano /etc/systemd/system/tinyscreen.service # 启用并启动 sudo systemctl enable tinyscreen sudo systemctl start tinyscreen ``` ### 日志 ``` tail -f /tmp/tinyscreen.log ``` ## 工作原理 这些 ArtInChip USB 显示屏在接收帧数据之前,需要先进行**专有的 RSA 认证握手**。Windows 驱动程序会静默完成此操作,而 ArtInChip 官方的 Linux 驱动(`AiCast`)需要一个与 NVIDIA 专有驱动冲突的 DRM 显示管道。 **tinyscreen** 完全绕过了内核驱动程序,直接通过 USB 与设备通信: 1. **USB 枚举** — 声明厂商特定的批量接口(class 0xFF) 2. **RSA 认证** — 设备固件要求的两阶段质询-响应: - *阶段 1 (auth_dev)*:主机使用 RSA 公钥加密随机质询,设备使用私钥解密并返回明文 - *阶段 2 (auth_host)*:设备发送 RSA 签名的数据块,主机通过公钥恢复明文并将其返回 3. **JPEG 帧流传输** — 通过 USB 批量传输 20 字节的帧头 + JPEG 数据 该协议是从 `aic-render` 用户空间二进制文件和 `aic_drm_ud` 内核模块源码逆向工程得来的。 ### 性能 | 指标 | 值 | |--------|-------| | USB 发送速率 | 265 fps (JPEG q85, 20KB/帧) | | 显示屏刷新率 | 60 Hz (硬件限制) | | URL 模式 | 60 fps | | CDP 截图轮询 | ~9 fps | | Sysmon / Docker / Netmon | 2 fps | | Matrix / News / Ticker | 30 fps | | Audio Visualizer | 60 fps | | USB 带宽使用 | ~35 MB/s 可用带宽中的 ~5 MB/s | ## 依赖项 由 `install.sh` 自动安装: - **Python 3.10+** 及以下依赖:`pyusb`, `Pillow`, `cryptography`, `PyYAML` - **Chromium 或 Google Chrome** — 用于 URL 模式的 headless 浏览器 - **ffmpeg** — 视频解码 - **yt-dlp** *(可选)* — YouTube 视频支持 - **numpy** *(可选)* — 音频可视化 FFT - **feedparser** *(可选)* — RSS 新闻滚动 - **requests** — 加密货币行情、天气、CDP 通信 - **websocket-client** — 用于 URL 模式的 CDP WebSocket ## 故障排除 ### "未找到 ArtInChip USB 显示设备" 1. 检查显示屏是否已插入:`lsusb | grep 33c3` 2. 尝试更换 USB 数据线 —— 随这些显示器附带的数据线有很多是次品 3. 检查 dmesg 中的 USB 错误:`dmesg | tail -20` ### "访问被拒绝(权限不足)" 重新插拔 USB 数据线,或运行:`sudo udevadm control --reload-rules && sudo udevadm trigger` ### 认证后显示屏无任何显示 确保未加载 `aic_drm_ud` 内核模块:`lsmod | grep aic`。如果已加载,将其加入黑名单:`echo "blacklist aic_drm_ud" | sudo tee /etc/modprobe.d/blacklist-aic.conf` ### --url 模式黑屏 确保没有旧的 chromium 进程占用端口 9222:`pkill -f 'chromium.*9222'` 然后重试。 ### 视频播放卡顿 降低质量 (`-q 50`) 或帧率 (`--fps 15`)。USB 2.0 Hi-Speed (480 Mbps) 是视频播放的瓶颈。 ## 卸载 ``` sudo /opt/tinyscreen/uninstall.sh ``` ## 技术细节 ### USB 协议 ``` Vendor ID: 0x33C3 (ArtInChip) Product ID: 0x0E02 Interface: 0 (Vendor Specific, Bulk IN EP 0x81, Bulk OUT EP 0x01) Frame header (20 bytes): u32 magic = 0xA1C62B01 u32 jpeg_length u16 frame_id u16 media_format = 0x10 (JPEG) u32 reserved = 0 u32 magic = 0xA1C62B01 Auth command (20 bytes, same struct): magic = 0xA1C62B10 (auth_dev) or 0xA1C62B11 (auth_host) length = 0x100 (RSA key size) ``` ### 项目结构 ``` /opt/tinyscreen/ ├── tinyscreen.py # main driver + daemon + all mode dispatch ├── tinyscreen # shell wrapper ├── sysmon.py # system monitor renderer ├── config.yml # default configuration ├── modes/ │ ├── ticker.py # crypto price ticker │ ├── clock.py # clock + animated weather + system info │ ├── matrix.py # matrix digital rain │ ├── visualizer.py # audio spectrum analyzer │ ├── nowplaying.py # MPRIS now playing │ ├── docker_mon.py # docker container monitor │ ├── netmon.py # network connections │ ├── newscrawl.py # RSS news crawl │ └── pomodoro.py # focus timer ├── install.sh └── uninstall.sh ``` ## 许可证 MIT 许可证。详见 [LICENSE](LICENSE)。 ## 致谢 - 协议逆向工程自 ArtInChip 官方的 [AiCast Linux driver](https://gitee.com/artinchip/luban-lite) 和 `aic-render` 二进制文件 - 感谢 ArtInChip Technology Co., Ltd. 提供的内核模块源码 (GPL-2.0) **关键词**:ArtInChip Linux 驱动, USB bar monitor Linux, ZHAOCAILIN Linux 驱动, 33c3:0e02 Linux, 1920x440 USB display Linux, stretched bar LCD Linux, AiCast Linux 替代品, USB 便携显示器 Linux 驱动, ArtInChip RISC-V display, 廉价 USB 显示器 Linux, 系统监控条形屏, 硬件仪表板 Linux, 加密货币行情显示器, 矩阵雨显示器, Docker 监控显示器, CDP screencast 显示器
标签:AliExpress, ArtInChip, DIY显示器, Docker监控, JPEG流媒体, Linux驱动, Python, RISC-V, RSA认证, Udev规则, USB-C, USB显示器, ZHAOCAILIN, 云资产清单, 副屏, 加密货币行情, 开源硬件, 无后门, 条形屏, 硬件黑客, 逆向工具, 逆向工程, 配置审计