如何在Android的Termux中通过命令行打印至静态IP网络打印机?
Termux网络打印问题解决指南
1. 修复仅打印一行的问题
直接重定向到/dev/tcp只输出一行,是因为Termux的shell重定向在处理TCP流时存在缓冲或截断问题,换用nc(netcat)命令发送完整文件更可靠:
nc 你的打印机IP 9100 < 目标文件路径
⚠️ 注意:这种方法仅适用于纯文本,或者打印机原生能解析的格式(比如部分打印机支持直接打印PDF),否则仍会出现乱码。
2. 解决lp命令打印乱码问题
乱码本质是lp默认使用了打印机不支持的格式(比如PostScript),需要指定正确的输出模式:
- 纯文本文件:强制用原始模式发送,避免格式转换
cat 目标文件路径 | lp -h 你的打印机IP:9100 -o raw -
-o raw参数会让lp不做任何格式转换,直接将内容传给打印机,适配纯文本或打印机原生支持的格式。
- PDF文件:先转成打印机通用的PCL格式(需先安装ghostscript)
# 安装依赖工具 pkg install ghostscript # 转换PDF为PCL并发送打印 gs -sDEVICE=pxlmono -dNOPAUSE -dBATCH -sOutputFile=- 目标PDF路径 | lp -h 你的打印机IP:9100 -o raw -
3. 绕开lpadmin的root权限限制
Termux默认禁止无root用户使用lpadmin,可以手动创建CUPS配置文件:
- 创建CUPS配置目录:
mkdir -p ~/.cups/
- 新建
~/.cups/printers.conf文件,写入以下内容(替换为你的打印机信息):
<Printer MyPrinter> Info 网络打印机 DeviceURI socket://你的打印机IP:9100 State Idle Accepting Yes Shared No JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 </Printer>
- 之后直接通过命名打印机打印:
lp -d MyPrinter -o raw 目标文件路径
测试建议
先使用简单纯文本测试打印机连通性,避免浪费纸张:
echo "测试打印" | nc 你的打印机IP 9100
确认打印机能正常输出后,再处理复杂文件。
内容的提问来源于stack exchange,提问作者swgeek
相关产品推荐
相关产品推荐

