免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

我把吃灰的 Kindle 用起来了:给 AI 桌宠加一块电子墨水屏

发布日期:2026-06-22 08:52:00 浏览次数: 2038
作者:哈哈AI Lab

微信搜一搜,关注“哈哈AI Lab”

推荐语

闲置Kindle变身AI桌宠第二屏,让旧设备在桌角焕发新生。

核心内容:
1. 闲置Kindle的独特价值:e-ink常显、低干扰特性如何适配新场景
2. 从虚拟桌宠到实体屏:将AI运行状态可视化的设计思路与实现
3. 旧设备改造哲学:赋予单一、轻量任务,重新发现实用价值

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

这件事的起点其实特别简单:我桌上有一台 Kindle Paperwhite,吃灰很久了。

扔了舍不得,继续放抽屉里又有点浪费。它屏幕不大,性能也不强,但 e-ink 常显、不刺眼、耗电低,这几个特点放在今天反而挺稀缺。

前阵子我刚折腾过 Codex 桌面宠物:AI不再只躲在终端里:我把Floeva戒指孵成了会卖萌的Codex桌宠,让一个小宠物在电脑里显示 Agent 的运行状态。那篇里我写过一句话,桌面宠物不是装饰品,它更像一个轻量状态层。

于是我很自然地想到:

   既然 Codex 里可以养桌面宠物,那吃灰的 Kindle 能不能变成一块“实体桌宠屏”? 

一开始真没想做什么严肃的监控系统,只是想把这台 Kindle 用起来,让它在桌面上有点存在感。

后来才发现,Claude Code 和 Codex 的状态刚好很适合放上去:谁在跑,谁闲着,在哪个项目里,抬头看一眼就知道。

Kindle 上显示 Codex 当前项目和最近任务

实拍:Kindle 上单独显示 Codex 当前状态和最近任务。

所以这篇不是“我为了效率发明了一个看板”的故事。

更准确地说,是:我想让一台吃灰 Kindle 重新回到桌面上,顺手把它做成了 AI 桌宠的第二块屏。


一、不是先有需求,是先有一台吃灰 Kindle

Kindle 最尴尬的地方是:它还挺好,但你就是不怎么用。

看书有手机、iPad、微信读书;拿来当主力屏幕又太慢。它很难再成为一个“中心设备”。

但如果换个思路,不让它当中心,只让它承担一个很窄的任务:常显、低干扰、放在桌角。

这时候 Kindle 反而很合适。

它不像第二屏那样不断吸引你点开消息,也不像手机那样一亮就把注意力拽走。它慢,黑白,刷新也不频繁,天然适合做那种“不急,但一直有用”的信息展示。

这和我之前做桌面宠物的思路其实是一脉相承的。

桌面宠物不是为了多一个可爱的东西,而是把 Agent 的状态从日志里拿出来,变成一个余光就能感知到的小反馈。Kindle 只是把这个状态层从电脑屏幕里拿出来,放到了一块真实的 e-ink 屏上。

很多旧设备不是没用了,只是它不该再承担主力设备的任务。给它一个足够窄的位置,它就能重新变得好用。 


二、桌面宠物的延伸:把状态搬到实体屏上

既然起点是“桌宠的延伸”,第一版设计我就不想做成那种枯燥的监控面板:一堆数字、一堆进度条、再配几条日志。

Kindle 的纸质感屏幕,适合放点更轻、更有陪伴感的东西。

最后我定下来:两只像素小宠物,一只代表 Claude,一只代表 Codex。

Kindle 上显示 Claude 和 Codex 两只像素宠物

实拍:Claude 和 Codex 两只像素宠物,加上下面的系统状态。

它们头顶各有一个小气泡:

  • 正在跑:显示 in
  • 闲着:显示 zzz...

后来发现这俩工具的社区里本来就有很适合像素化的形象:

  • Claude Code 那边有 Clawd,一只橘色像素风小螃蟹,Code with Claude 活动现场还出现过相关周边
  • Codex 桌面端有 Cloudling,一个云朵小生物,也能通过 /pet 命令召唤

我从社区项目 rullerzhou-afk/clawd-on-desk 里拿到了两套官方风格的 GIF,再用 Python + Pillow 自动转成 32x32 黑白像素图,直接喂给前端。

这一步比想象中重要。

如果只是写“Claude running / Codex idle”,你看两天就会腻。但换成两个小宠物之后,这块屏幕突然有了点桌面摆件的感觉。它不是强提醒,不制造压力,只是在那里安静地告诉你:谁还醒着,谁已经睡了。


三、真正的坑不是 AI,是 Kindle 浏览器

我原本以为,现在的 Kindle 浏览器再差,也应该是个能用的现代浏览器。

结果真机一跑才发现:它基本像 2014 年左右的 WebKit。JavaScript 很多时候跑不动,CSS Grid 不支持,连一些继承样式都不稳定。

给 Kindle 做前端,最重要的心法是:

   假装你回到了 2010 年。 

1. SVG 很漂亮,但 Kindle 直接白屏

第一版宠物是用 SVG  一个个像素拼出来的,需要 JS 在客户端循环渲染。在 Mac 浏览器里看完美,推到 Kindle 上,一片空白。

解决办法很朴素:服务端直接生成 PNG。

我用 Pillow 把 32x32 sprite 用 Image.NEAREST 放大到 256x256,Flask 通过 /pet/claude.png 直接返回图片字节。Kindle 只需要会  标签就行。

2. CSS Grid 很现代,但 Kindle 不认

期望的布局是两只宠物左右并排。我一开始用了 display: grid,Mac 上看好端端的。Kindle 上,两只宠物纵向堆成一列,每只占满整行。

第一反应是退回 

 布局。

我知道,2010 年之后还用 table 做布局多少有点逆时代。但在 Kindle 浏览器上,table 一度是唯一能保证横排的方案。

3. table 能救命,也会制造新的坑

修完前两个坑之后,又发现宠物卡片的右边和下面 SYSTEM 卡片的右边对不齐,差了 17 像素。

debug 半天才发现:

 在 Kindle 上不是按父容器内容区宽度算,而是按 border-box 外宽算,相当于忽略了父容器的 padding。于是 table 比旁边的 div 宽出一截。

最后的解法是彻底放弃 table,改用 

 + float:left + box-sizing:border-box。两个宠物 div 各占 50% 宽,中间共享一根边框,反而最稳。

这事也挺讽刺:你以为你在做一个 AI 状态看板,最后真正让你破防的是老浏览器布局。

越是跑在老设备上的东西,越不能相信“现代前端理所当然能用”。


四、状态数据不用 API,直接扫本地 JSONL

我没有调用 Claude Code 或 Codex 的 API,也没有从 CLI 里硬解析输出。

原因很简单:状态看板要稳定,依赖越少越好。

Claude Code 和 Codex 本来就会把会话写到本地 JSONL:

  • ~/.claude/projects/
  • ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl

我直接读这些文件:

  • 是不是在跑
    :最新 JSONL 文件的 mtime 是否在 60 秒内
  • 当前项目
    :读 JSONL 里第一个带 cwd 字段的事件,取 basename
  • 最近任务
    :按 mtime 倒序取最近 6 个会话

唯一没做的是“Claude Code / Codex 使用额度”。

这个我一开始其实很想放上去,毕竟如果 Kindle 上能直接看到还剩多少额度,会很实用。

但折腾了一圈发现,Claude Code 和 Codex 的 CLI 目前都没有稳定接口可以直接拿到这个数字。Claude Code 里的 /usage 更像 CLI 内部能力,不是一个适合被外部服务长期依赖的公开接口;Codex 这边也没有我能放心写进常驻服务的额度 API。

所以 v1 只能放弃额度显示。

   如果你知道更稳的方案,比如本地缓存位置、可用的命令输出、或者官方后来开放了相关接口,欢迎在留言里告诉我。我还挺想把这个模块补上的。 

对这块屏幕来说,核心问题不是“我还能跑多久”,而是“它们现在有没有在跑”。

工具越轻,越适合常驻。状态看板不是控制台,别把它做成另一个需要维护的系统。 


五、顺手把 Mac 状态也塞进去

宠物显示完之后,Kindle 屏幕下半部还有一大块空白。索性把 Mac 的系统状态也放上去:

指标
怎么读
CPU
psutil.cpu_percent()
内存
psutil.virtual_memory().percent
磁盘
自己算:(total - free) / total
温度
smctemp -c
,主要用于 Apple Silicon
网络
psutil.net_io_counters()
 两次采样差
开机时长
time.time() - psutil.boot_time()

这里也踩了两个很典型的 macOS 坑。

1. APFS 会让磁盘占用看起来不对

psutil.disk_usage("/").percent 在我的 Mac 上一直显示 63%。但我自己 df -h 看是 97%。

原因是 macOS 用 APFS,根 / 是只读 System 卷,用户数据在 /System/Volumes/Data。psutil 报告的 used 只是 System 卷自己的文件,并没有把 Data 卷算进去。

解决办法是不直接用 du.used,而是自己算 total - free。同一个 APFS 容器里所有卷共享 free space,这个减法在 APFS 和传统单卷文件系统上都更符合直觉。

2. Intel 时代的温度工具,在 M 系列上会失灵

最先尝试的是 Homebrew 上的 osx-cpu-temp,装完一跑返回 0.0°C

后来才发现,这个包主要是给 Intel Mac 写的,读的 SMC 键在 Apple Silicon 上不存在。

最后我从 narugit/smctemp 源码 make 了一份,装到 ~/.local/bin/smctemp -c 在 M 系列上能正确返回温度。


六、要真常用,就别靠手动启动

最后一步是让服务开机自动起,崩了自动拉。

macOS 上原生方案就是 launchd。我写了一个 ~/Library/LaunchAgents/com.luojian.kindle-ai-monitor.plist

        
        
   

加载:

 launchctl load ~/Library/LaunchAgents/com.luojian.kindle-ai-monitor.plist 

之后这服务就跟系统里的其他后台进程一样,我平时几乎感觉不到它的存在。

直到我抬头看一眼 Kindle。


七、真正开心的是:Kindle 终于回到桌面上

现在 Kindle 就斜立在键盘右上方,屏幕常显,每 30 秒自动刷新一次。

看视屏看到半路,余光扫一眼:

   Claude 还在 kindle-ai-monitor 项目里,已活跃 14 分钟,没卡。
   Codex 在 shiguang-huimou 项目里,闲了 7 分钟,该回去看下进度。
   CPU 30%,温度 48°C,网络上行 600KB/s,系统状态正常。 

少切几次 terminal,当然是有用的。

但对我来说,更爽的地方是:这台本来躺在抽屉里的 Kindle,终于又成了桌面工作流的一部分。

它不抢注意力。普通第二屏会不断诱惑你看消息、看网页、看各种动效;Kindle 的 e-ink 屏很慢,反而天然克制。它只适合显示那些“不急,但一直有用”的信息。

这也是我做完之后最大的感受:

很多旧设备不是没用了,只是它不该再承担主力设备的任务。把它放到工作流里一个很窄的位置,反而会重新变得好用。 

这个小工具目前没有开源,也不打算做成一个需要维护的开源项目。

一方面它非常依赖我自己的本地路径、设备摆放和使用习惯;另一方面,真正有复用价值的其实不是代码,而是这套思路。

如果你也有台吃灰的 Kindle,或者别的旧平板、旧手机、小屏设备,最值得抄的是这个方向:

   把桌子上那台不舍得扔、但又不怎么用的电子设备,改成你工作流里的一个常显状态位。 

E-ink 屏除了看书,真的还能干点别的。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅