上个月翻抽屉,翻出一台屏幕完好、电池还能撑大半天、但已经跑不动主流 App 的旧 Android 手机。卖二手不值钱,当闹钟有点浪费,装个输入法当微信专用机又觉得蠢。这让我重新想起一直在关注的一个思路:Droidputer——让 Android 手机变成 Cardputer 那样的信用卡型袖珍电脑。
Cardputer 这两年很出圈,本质是一类“卡片大小、带物理键盘、屏幕极其克制”的极简终端设备。它不打算替代笔记本,而是解决一个具体问题:当你只想敲几行命令、看一组状态、传一个文件、连一台设备调试时,不需要开电脑、不需要等系统加载、不需要面对满屏通知,掏出来就是终端。Droidputer 做的事情,就是把这个体验搬到一台闲置 Android 手机上,通过 Termux、脚本和外设改造,让手机成为一台真正可以带出门的极客工具。
这篇内容适合谁?适合手里有一台旧 Android 手机、并且想让它发挥余热的人,适合折腾过 Termux、命令行、SSH 的开发者,也适合对 Cardputer 感兴趣但不想额外买硬件的玩家。我会把从零配置到外壳改造、从代码到避坑的全部过程写清楚,你可以照着复现,也可以按自己的需求改。
1. 先看懂 Droidputer 在解决什么问题
1.1 Cardputer 是什么,Droidputer 想解决什么
Cardputer 这类设备的核心特征有三个:信用卡或银行卡大小的体积、一排物理按键、一个能跑命令行的精简系统。它通常跑着很轻量的固件,开机两秒进入界面,默认菜单就是 WiFi 扫描、终端、脚本运行、按键宏这些功能。它的屏幕往往很小,小到只能显示几行文字,但这正是它的设计哲学:让你专注在文本和命令上,而不是刷视频。
Droidputer 把这个逻辑平移到了 Android 手机里。手机天生有屏幕、电池、WiFi、蓝牙、USB 接口,比任何 Cardputer 专用硬件都要强。但问题也显而易见:手机默认开机进桌面,满屏的 App 图标和通知在干扰你;虚拟键盘吃掉半个屏幕;系统层级的输入法、弹窗、后台进程都在抢注意力。所以 Droidputer 不是“在手机上装一个终端 App”这么简单,它要解决的是三个问题:启动之后怎么直达终端,物理键盘怎么接进来,手机凭什么一直保持低功耗待命。
我在实际做的时候有一个感受:Droidputer 的价值不在于把手机变成一台功能更全的电脑,而在于把它变成一台“功能被刻意做少”的电脑。减法才是核心。如果你只是想在手机里装个终端,那没必要看这篇文章;如果你想拥有一个开机就是终端的随身工具,Droidputer 的思路非常合适。
1.2 为什么用闲置 Android,而不是直接买 Cardputer
直接买一台 Cardputer 类硬件,体验确实很成熟,但有几个现实问题:价格不算贵但也不算便宜,性能相对有限,屏幕小到只能勉强看几行字,系统封闭、二次开发有门槛。更重要的是,很多人手里已经有一台闲置 Android 手机,再买一台重复功能的硬件,本质上是在制造电子垃圾。
Android 手机的优势非常明显:性能足够强,屏幕清晰,电池容量大,系统开源自定义空间大,而且配件产业链成熟。通过 Termux,它给你一个几乎完整的 Linux 用户态环境;通过蓝牙或 OTG,它可以外接各种键盘;通过 3D 打印或亚克力外壳,它可以固定成 Cardputer 那样的卡片形态。哪怕不改造外壳,手机加折叠键盘放进包里,实际体验已经不输原版设备。
还有一个容易忽略的点:Android 手机本身就是一个完整的网络设备。它支持 5GHz WiFi、蓝牙 5.0、USB-C、甚至 4G/5G 蜂窝网络,这些都是很多开发板型 Cardputer 做不到的。你在外面没有 WiFi 时,开发板只能吃灰,而手机可以开热点、走流量,Droidputer 能保持真正意义上的随时在线。这些延展能力,是我最终决定用旧手机做 Droidputer 的关键理由。
2. 三大核心技术选型:Termux、输入方案与供电逻辑
2.1 为什么把 Termux 当基底,而不是在电脑上装系统
Android 底层虽然是 Linux,但普通用户接触不到完整的用户态环境。直接在系统层面刷 Linux 发行版对大多数手机来说不值得,驱动、触屏、电源管理都是坑。Termux 是一个跑在 Android 应用沙箱里的终端模拟器,它不刷系统、不动内核,只把常用的 Linux 工具、编译器、Python、SSH 客户端等装到一个普通 App 可以访问的目录里。
用 Termux 的最大好处有三个:不需要 root;不容易把手机搞成砖;卸载掉就完全恢复原状。这对 Droidputer 来说特别重要,因为你拿的是一台可能的“主力机退役”设备,但不代表你可以接受它变砖。我在配置过程中全程没有 root,所有功能都基于 Termux 的普通权限完成,稳定性实测下来很足。
另一个选择是给手机刷 LineageOS 之类的第三方系统再开启开发者模式,或者直接 chroot 一个 Debian 环境。这些方案性能更高,但复杂度和风险陡增。Droidputer 的定位是“随手拿起就能用的工具”,不是“一个需要维护的迷你服务器”,所以 Termux 的轻量和低侵入性是最优解。
基础环境安装命令很简单,打开 Termux 后执行:
pkg update -y && pkg upgrade -y pkg install python vim git openssh tmux neofetch htop pkg install termux-api termux-tools安装完之后,Termux 就有了 Python、SSH 服务端和客户端、tmux 多窗口、vim 编辑器。之后的整机改造,全部基于这个环境展开。
2.2 输入方案:蓝牙键盘、折叠键盘与物理外壳的取舍
Cardputer 的灵魂是物理键盘。手机本身只有触屏虚拟键盘,所以 Droidputer 必须解决实体输入。我在实际体验中试过四种方案,按推荐程度排序:
第一种是便携折叠蓝牙键盘,体积和银行卡差不多,展开后手感尚可,最适合“先不改造外壳,直接体验 Droidputer 工作流”的阶段。配对一次之后,每次开机自动连接,键盘上的快捷键大多数能直接映射到 Termux。
第二种是 3D 打印一个外壳,把手机和一块小尺寸蓝牙键盘叠在一起,用卡扣固定,形成一个类似 Cardputer 的开合结构。这个方案手感最好,几乎还原原版体验,但需要你有打印机或者能找代打。
第三种是用 OTG 接有线 USB 键盘,好处是零延迟、不需要充电,坏处是拖着一根线,便携性打折扣。适合在工位上固定使用。
第四种是莫尔斯电码式的外接按键模块,或者用手机音量键做快捷键,这适合当你真的只需要“一键执行某个脚本”时,属于极简玩法,不推荐作为日常主输入。
我个人的建议是:先用折叠蓝牙键盘跑通全部软件流程,确认自己真的需要这个工具之后,再花钱和时间去做外壳。很多人一上来就打印外壳,结果软件流程没走通,最后设备吃灰,这是最常见的失败路径。
2.3 供电与持久在线:锁屏、耗电与热量控制
Droidputer 和一般手机的使用方式有一个重要区别:它的屏幕会长期亮着,像是桌面上的一个迷你仪表盘。这就带来三个问题:锁屏机制、电池消耗、热量积累。
锁屏方面,Termux 提供了termux-wake-lock命令,可以阻止 CPU 休眠,配合 Android 的“保持屏幕常亮”选项(开发者选项里的“不锁定屏幕”),能让终端持续显示。注意这里的取舍:如果你准备把 Droidputer 当作随身工具,建议只在插电时使用termux-wake-lock,在外出用电池时改成“按键唤醒,自动锁屏”,否则电量会肉眼可见地掉。
耗电方面,Droidputer 的负载其实很低,CPU 占用一般个位数,最大耗电来自屏幕亮度和蓝牙键盘。实测下来,同样一台手机,屏幕亮度 10% 和 80% 的续航差距能到三小时以上。我会把 Droidputer 专属的亮度配置文件做成脚本,启动时自动设置到 30%,进入终端后再手动微调。
热量控制是很多人忽略的点。手机处于持续运行状态时,即使负载低,充电加使用也可能导致温度升高。Droidputer 做“桌面仪表盘”场景时,建议用慢充或者 USB 口限制充电电流,避免电池一直满电发热。我现在用的方案是直接接一个 5V/1A 的旧充电头,实测温度稳定在 36 到 40 度之间,比较健康。
3. 实操:从旧手机到 Droidputer 的五步改造
3.1 第一步:准备清单与环境检查
开工之前先确认手头的东西:
一台 Android 手机,至少 2GB 内存,系统版本在 Android 8 以上。旧手机的性能要求极低,只要能跑 Termux 就行。需要注意,如果手机已经被厂商停止系统更新,也没关系,Termux 兼容性足够好。
一个键盘,优先推荐折叠蓝牙键盘。如果你确定要做外壳改造,就选那种尺寸很小、键位紧凑的便携键盘,方便和手机叠放。
一根能够稳定传输数据的 USB-C 线或 OTG 线,用于电脑和手机之间的 SSH 连接调试,以及在 HID 模式下把手机外设化。
然后做三件准备工作:给手机插上 SIM 卡或者连上 WiFi、把广告类 App 统统卸载、开启设置里的“保持屏幕常亮”和“允许后台运行”。还有一步很关键——关闭所有系统更新,否则半夜突然重启更新会打断你的脚本任务。
3.2 第二步:Termux 环境深度配置
基础安装完成后,推荐做三件配置提升体验:
第一,换一个适合终端操作的键盘映射。折叠蓝牙键盘上通常没有 ESC 键,这在 vim 里是灾难。解决方案是在 Termux 的~/.termux/termux.properties里启用额外按键:
extra-keys = [['ESC','/','-','HOME','UP','END','PGUP'],['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]然后重启 Termux 生效。这样即使外接键盘缺少某些键,屏幕顶部也有一条虚拟功能键可以做补充,不会因为按键缺失卡住。
第二,安装并配置 tmux。Droidputer 的使用场景里,经常是“一个窗口挂着 SSH,另一个窗口跑 Python 脚本,第三个窗口盯日志”。tmux 可以让你在一个物理终端里管理多个会话,而且断开重连后任务不丢。配置文件~/.tmux.conf我建议至少加上:
set -g prefix C-a bind-key C-a c new-window bind-key C-a n next-window bind-key C-a p previous-window bind-key C-a d detach第三,设置 autossh 或 SSH 的 ControlMaster,让远程连接更稳定。我后续在远程服务器工作流里会详细说。
3.3 第三步:写一个“开机即终端”的启动脚本
普通手机开机是桌面,Droidputer 开机应该直接是终端和你的工作面板。Termux 提供一个启动时自动执行脚本的机制:~/.termux/boot/下的脚本会在 Termux:Boot 插件运行时自动执行。这是一个可选的插件,装完后,把下面的脚本存成~/.termux/boot/droidputer.sh:
#!/data/data/com.termux/files/usr/bin/bash termux-wake-lock sleep 5 tmux new-session -d -s main tmux send-keys -t main "droidputer-dashboard" Enter tmux attach -t main这里的droidputer-dashboard是我自己写的一个 Python 脚本,负责显示一个精简的仪表盘。启动脚本的核心逻辑很简单:保持唤醒、等系统稳定几秒、启动 tmux、在窗口里跑仪表盘脚本、然后附着上去。如果你不想安装 Termux:Boot,也可以手动点开 Termux,通过别名快速进入。
droidputer-dashboard的代码逻辑可以参考下面这个简化版本:
#!/usr/bin/env python3 import subprocess, json, time, datetime def run(cmd): r = subprocess.run(cmd, capture_output=True, text=True) return r.stdout.strip() def battery(): try: data = json.loads(run(["termux-battery-status"])) return f"{data['percentage']}% {data['status']}" except Exception: return "unknown" def ip(): return run(["ip", "route", "show", "default"]).split("src ")[-1].split()[0] while True: print("\033[H\033[J", end="") now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"Droidputer // {now}") print(f"IP: {ip()} | Battery: {battery()}") print("\n1) SSH Work 2) Deploy 3) Serial Monitor q) Quit") key = input("> ") if key == "1": run(["ssh", "myserver"]) elif key == "2": run(["bash", "deploy.sh"]) elif key.lower() == "q": break这个脚本只是一个骨架,实际使用中我把它扩展成了带菜单、带日志、带颜色标注的版本。核心思路是让启动后的首屏信息密度高一点,让你三秒内知道“这台设备现在能干什么”。
3.4 第四步:物理外壳与键盘整合
软件流程跑通之后,下一步就是让它更像 Cardputer。我的做法是画一个两层 3D 打印外壳:下层放键盘,上层放手机,中间留出理线槽和散热孔。
设计上要注意三个细节。一是键盘的固定方式,尽量用卡扣而不是螺丝,方便换电池和拆装;二是手机摄像头位置要开孔,否则手机会因为凸起放不平;三是蓝牙键盘的天线位置不要被金属壳遮挡,实测金属后盖外壳会明显降低连接稳定性,所以建议用非金属材质打印。
如果你没有 3D 打印机,也可以用亚克力板加铜柱自己拼一个框架,效果类似。最不建议的方案是直接用胶水把键盘粘在手机背面,因为一旦蓝牙键盘没电或者需要重置,你就要体验一把“从壳里撬键盘”的麻烦。
外壳做完,再配一根短 USB-C 线用于充电,整体尺寸大概是一张银行卡的两倍,厚度和一本普通记事本差不多。放进随身包里完全没问题。
3.5 第五步:把 Droidputer 做成电脑外设(HID 模式)
Cardputer 有一个很吸引人的场景:作为 USB 键盘直接操纵另一台电脑,比如投屏演示时用快捷键、或者作为一键执行器。Android 手机通过软件原生模拟 USB HID 比较困难,但通过硬件桥接就可以稳定实现。
思路是:手机通过 USB 串口连接一块带 USB 功能的单片机开发板,开发板再插到目标电脑上。手机端把要发送的按键指令通过串口发出去,开发板收到后模拟键盘按键输出到电脑。这样 Droidputer 身份就从“一台终端”切换成“一个外设”。
手机端发送指令可以这样:
echo "t:hello world" > /dev/ttyACM0 echo "h:ctrl+alt+t" > /dev/ttyACM0单片机端的大致逻辑是:
// 伪代码示意 void loop() { if (Serial.available()) { char cmd = Serial.read(); if (cmd == 't') { String text = Serial.readStringUntil('\n'); Keyboard.println(text); } else if (cmd == 'h') { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_T); } } }这个方案需要你在手机端写好快捷脚本,比如hid-type、hid-hotkey两个命令,把串口通信封装起来。实测延迟很低,几乎感觉不到和原生键盘的区别。这个玩法不一定要做,但它能让你重新理解 Droidputer 的定位:它既是便携电脑,又是电脑外设,一台机器吃两种角色。
4. 踩坑实录:Droidputer 常见问题与排查速查表
实操过程中,我前前后后遇到挺多问题,这里挑最典型的整理成一个速查表,照着排查能节省大量时间。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 蓝牙键盘连接断开 | 键盘省电休眠策略 | 在键盘上多按一次连接键唤醒;修改 Termux 蓝牙超时设置 |
| 开机后 tmux 自动脚本没跑 | Termux:Boot 插件未安装或没启用 | 安装 Termux:Boot,确认脚本有执行权限 |
| 电池掉电速度极快 | 屏幕亮度太高 / 后台 App 未清理 | 设置屏幕常亮时的低亮度;用adb shell或系统设置冻结后台 App |
| 充电时外壳发烫 | 快充导致发热 | 换慢充头,或用软件限制充电电流 |
| 折叠键盘部分按键无响应 | 键盘不是 HID 模式,而是旧式蓝牙 SPP 模式 | 在上一个设备的蓝牙列表里删除设备重新配对,切换到 HID/输入设备模式 |
| SSH 连接经常断 | 手机 WiFi 休眠策略 | 在 WiFi 设置里把该网络设为“永不休眠”,或使用 Termux 的termux-wake-lock |
| tmux 会话丢失 | Termux 被系统杀死 | 后台运行加白名单;给 Termux 关闭电池优化 |
串口设备/dev/ttyACM0找不到 | 未插 OTG 线或权限不够 | 确认 OTG 线支持数据;用termux-usb -l列出设备再绑定 |
这些坑里,最值得展开的是两个。
第一个是“Termux 被系统杀掉”。Android 的后台管理非常激进,哪怕你开了“允许后台运行”,系统还是可能在内存紧张时把 Termux 的进程结束掉。我的解决方法是把 Termux 和 Termux:Boot 两个包都加入电池优化的白名单,同时在开发者选项里把“后台进程限制”关掉。如果你手机有“休眠 App”功能,务必把 Termux 从休眠名单里排除。
第二个是“蓝牙键盘选错模式”。蓝牙键盘通常有几个模式:iOS 模式、Android 模式、Windows 模式、HID 模式。不同模式的键位映射和连接方式都不一样。如果你在 Termux 里按数字键却出现符号,或者功能键错位,基本都是模式没对上。解决方法是重新进入键盘的配对模式,然后看电脑/手机上显示的设备类型是“键盘”还是“其他设备”,一定要让它以“键盘”身份接入。
排查还有一个通用技巧:遇到问题先开一个纯终端窗口看日志,而不是瞎改配置。比如蓝牙键盘连不上,先跑一下dmesg看内核日志,再查看bluetoothctl devices确认设备是否出现在底层列表。分层次排查的效率远高于反复重启。
5. 玩法扩展:让 Droidputer 成为生产力工具
5.1 SSH 远程工作台:出门不带笔记本也能改服务器
这是 Droidputer 最实用的场景之一。在 Termux 里配置好 SSH 密钥,然后出门只带这么一台卡片设备,就能连上自己的服务器改配置、看日志、重启服务。配合 tmux,你甚至在手机上可以保持多个服务器会话同时运行。
我的日常操作是这样的:在~/.ssh/config里给每台服务器命名别名,比如web、db,然后用ssh web直接连。因为手机屏幕小,我会在.tmux.conf里把窗口分割成上下两块,上面看日志,下面输命令。实测下来,处理一次线上问题的时间和一台上网本差不多,而且开机速度完胜。
5.2 自动化部署与巡检:一键脚本代替重复劳动
Droidputer 适合跑一些编排好的自动化脚本。我写了一个deploy.sh,内容是先连上服务器拉最新代码、执行测试、重启服务、简单检查健康接口,最终只输出几个关键状态码。整个过程从按键到看结果不到一分钟。
日常巡检也有固定套路:写一个 Python 脚本,定时 SSH 到服务器执行df -h、uptime、free -m,把结果拉到 Droidputer 屏幕上。用旧手机当定时任务显示器,比专门买一台监控屏便宜得多,而且还能随身带。
提醒一句:所有涉及自动部署的脚本,强烈建议先在本地服务器上测试到稳定再加到 Droidputer 里,否则手机端的误触可能比你想的更容易发生。
5.3 串口调试:嵌入式开发的随身终端
如果你平时做嵌入式开发,Droidputer 还能当串口监视器用。方法是在 Termux 里安装serial-plotter或直接调用termux-usb访问 USB 串口设备,再把波特率设好,就可以实时看单片机打印的调试日志。
我的使用场景是:调试小车底盘时,不用每次都接电脑,直接把 Droidputer 用 OTG 线连到开发板,打开串口终端,一边在键盘上敲控制指令,一边看数据回传。这在工位上移动着调试时特别方便,少了一堆线材的牵绊。手机上配置串口,其实和电脑上的串口调试软件逻辑完全一致,只是界面更黑更极简。
5.4 与主力电脑的剪贴板与文件协同
Droidputer 也可以不局限在“终端设备”这个身份里,它还能和你的主力电脑做文件协同。最简单的方式是局域网内跑一个共享目录服务,把手机上的文件放到固定位置,电脑直接访问。Termux 里装一个静态文件服务器,一条命令就能把当前目录分享给局域网内所有设备。
我目前用的是一个非常轻量的协作方案:Droidputer 上跑一个加密传输脚本,电脑端也有对应脚本,两边用小范围键值对同步剪贴板和待办文件。这样我在客厅沙发上拿着 Droidputer 记一个思路,回到工位打开电脑,内容已经同步好了。
这个玩法几乎不消耗系统资源,也让 Droidputer 更像一个“第二大脑”,而不只是另一台终端设备。
写在最后的一点体会
折腾 Droidputer 这段时间,最深的感受是:真正有用的工具,不是功能多,而是启动快。手机里那些不断更新的 App、层出不穷的通知,对效率的提升微乎其微,只会不断把你的注意力撕碎。Droidputer 通过一个极简终端外壳,把手机变成一台诚实面对命令行的设备,这种体验很有“回到电脑早起时代”的轻快感。
如果你也打算复刻这个项目,我建议第一步别急着追求 Cardputer 的外形,先拿一台旧手机加蓝牙键盘,把 Termux、tmux、SSH 这套链路跑顺,用两周时间确认自己真的需要一台随身卡片终端,再去做外壳和 HID 桥接。多数人在这两周里会发现,终端的价值比外观大得多。
最后再分享一个小技巧:在 Droidputer 的启动仪表盘脚本里加一行,把当天的日期和环境温度显示出来,比如从天气接口取数据。这样它既是一台终端工具,也是一台桌面上安静的资讯屏。等到哪天你连这行字都懒得看的时候,说明工具已经足够顺手了。