LPR(Line Printer Remote)是 Linux 系统中最经典的打印命令之一,用于向打印机提交打印任务,支持本地和远程打印,在 CUPS 为主流的今天,LPR 依然作为标准接口被广泛支持,是系统管理员必须掌握的工具。它源自 BSD 系统,设计简洁,不依赖现代打印子系统也能独立工作,无论你管理的是老旧打印机还是嵌入设备,理解 LPR 都能帮你快速定位打印问题,并直接操作打印队列。
LPR Linux 命令详解:基础用法与参数选项
LPR 是 Linux 下最直接的打印命令,它的核心动作就是把文件发送到打印机队列,在不同发行版中,LPR 通常由 lpr 软件包提供,或集成在 CUPS 的 cups-client 组件中,掌握它的基本语法,是你进行远程打印和排错的第一步。
基本语法与常见选项
lpr 的标准用法很简单:lpr [选项] 文件名,如果不指定文件,它会从标准输入读取数据,以下是几个最常用的参数,相当一部分日常操作都靠它们完成:
-P 打印机名:指定打印机或队列,如果不加,使用系统默认打印机。-# 份数:打印多份副本,-3。-h:去掉作业标题页(banner page)。-l:指定文件为原始格式,不进行任何过滤,适合打印二进制数据。-r:打印完成后删除原文件,常用于脚本自动化。
打印文件示例
远程打印一个文本文件,可以用一条命令搞定:
lpr -P remote_printer /home/user/document.txt
如果你需要打印 PDF 并指定份数,可以这样:
lpr -P laserjet -# 2 -h report.pdf
命令会在名为 laserjet 的打印机上打印两份 report.pdf,并去掉标题页,多数情况下,-h 选项能帮你节省纸张,尤其在批量打印时。
指定打印机与队列
LPR 的打印机名称可以在 /etc/printcap 或 CUPS 的配置文件中定义,如果你使用 CUPS,lpr 会通过 lpinfo 识别已安装的打印机,查看可用打印机列表,执行:
lpstat -p -d
输出中会显示所有打印机状态,以及默认打印机名称,你可以把这个名称直接用于 -P 选项。LPR Linux 打印到远程打印机时,名称通常对应远程主机上的队列名,这与本地打印机的配置方式一致。
LPR 与 LP 对比:Linux 打印命令怎么选
很多新手会混淆 lpr 和 lp,它们都是提交打印作业的命令,但起源和设计哲学不同。
LPR 与 LP 对比 是 Linux 打印管理中的经典话题,了解差异能帮你根据不同场景做出正确选择。
命令起源与设计差异
- LPR:来自 BSD 系统,历史更早,命令参数较短,选项风格偏传统,它直接操作
printcap文件,适合嵌入式或老旧系统。 - LP:来自 System V(AT&T Unix),后来被 CUPS 继承并扩展。
lp的参数更接近现代语法,支持-o选项传递自定义参数,-o media=A4。
在 CUPS 环境下,两者实际上都通过 lp 后端处理,但 lpr 的 -P 选项与 lp 的 -d 选项作用相同,行业共识认为,lpr 更适合快速脚本编写,因为它的短选项减少了输入量;而 lp 则更适合需要精细控制打印属性的场景。
实际使用场景选择
- 如果你只需要简单打印文件,不关心标题页或介质类型,LPR 更直接。
- 如果你需要设置双面打印、打印范围、纸张尺寸,LP 的
-o选项更灵活。 - 在远程打印场景中,
lpr的传统-P hostname:queue语法依然被许多旧设备支持,而lp则依赖 CUPS 的 URI 格式。
LPR Linux 设置默认打印机 可以通过环境变量 PRINTER 实现,这对脚本非常友好。
export PRINTER=hp_laserjet lpr file.txt
而 lp 的默认打印机则由 lpoptions 或 CUPS 的 lpadmin 管理,如果你在混合环境中工作,建议优先使用 lpr 保持兼容性,除非你需要 CUPS 特有的高级功能。
配置远程 LPR 打印:连接网络打印机
远程打印是 LPR 的核心应用之一。LPR Linux 打印到远程打印机 不需要安装 CUPS 或其他复杂服务,只要远程主机允许 LPR 协议(端口 515),本地就可以直接提交作业,这一特性在嵌入式系统或受限环境中非常实用。
设置远程打印机地址
在命令行中,可以直接用 -P 指定远程打印机,格式为 主机名:队列名。
lpr -P 192.168.1.100:lp -l image.ps
这个命令将原始数据发送到 168.1.100 主机上的 lp 队列,注意,-l 选项告诉 LPR 不要做任何格式转换,直接发送原始字节,这对二进制文件(如 PostScript)至关重要。
使用 /etc/printcap 配置
如果你需要频繁访问远程打印机,可以将其写入 /etc/printcap 文件。printcap
是 BSD 风格的打印机数据库,每一行定义一个打印机条目。
remotelaser:
:lp=:rm=192.168.1.100:rp=lp:
:sd=/var/spool/lpd/remotelaser:
:lf=/var/log/lpd-errs:
rm:远程主机地址。rp:远程队列名称。sd:本地假脱机目录,用于存放作业。lf:错误日志路径。
配置完成后,运行 lpr -P remotelaser file.txt 即可使用,注意,本地需要运行 lpd 守护进程,否则假脱机无法工作,近年来,多数 Linux 发行版默认不启动 lpd,改用 CUPS 的 cups-browsed 来发现网络打印机,但如果你维护老旧设备,printcap 仍有不可替代的价值。
通过 CUPS 模拟 LPR 服务
如果你使用 CUPS,但需要向后兼容 LPR 客户端,可以启用 CUPS 的 LPD 后端,安装 cups-lpd 包,并启动 cups-lpd 服务,这样 CUPS 就能监听 515 端口,接收传统 LPR 请求,配置方法如下:
sudo systemctl enable cups-lpd.socket sudo systemctl start cups-lpd.socket
之后,你可以用 lpr -P printer_name 提交作业,CUPS 会自动处理,这种方式适合需要同时支持新旧打印协议的混合网络环境。
LPR 打印队列管理:查看与取消任务
提交作业后,管理队列是日常维护的一部分。LPR Linux 打印队列管理 主要依赖两个命令:lpq(查看队列)和 lprm(取消任务),它们与 lpr 配合使用,构成完整的打印作业生命周期。
使用 lpq 查看队列
lpq 显示指定打印机队列中的作业列表,基本用法:
lpq -P printer_name
输出示例:
Rank Owner Job File(s) Total Size
1st user 123 document.txt 2048 bytes
2nd user 124 report.pdf 10240 bytes
- Rank:作业在队列中的位置。
- Job:作业 ID,用于后续取消。
- File(s):原始文件名。
- Total Size:作业大小。
如果不指定 -P,lpq 显示默认打印机队列,如果队列为空,它会输出 “no entries”,多数情况下,lpq 是检查打印机是否卡纸或离线的第一工具。
使用 lprm 取消任务
lprm 用于删除未打印的作业,语法:
lprm -P printer_name job_id
取消队列中 ID 为 123 的作业:
lprm -P laserjet 123
如果你不指定作业 ID,
lprm 会删除当前用户的所有作业(如果允许),root 用户可以删除任何作业。LPR Linux 设置默认打印机 后,管理队列时不必每次都输入 -P,直接 lprm 123 即可。
队列状态检查与排错
当作业无法打印时,可以查看错误日志,LPR 的日志通常位于 /var/log/lpd-errs 或 /var/log/cups/error_log(如果使用 CUPS),常见错误包括:
- 打印机不可达:检查远程主机名和端口 515 是否开放。
- 权限不足:
/etc/printcap中的sd目录必须可写。 - 队列已满:删除旧作业或增加假脱机空间。
如果你遇到”Unknown printer”提示,先确认打印机名称是否输入正确,再用 lpstat -p 验证。LPR Linux 命令详解 中,这部分常被忽略,但却是排错的关键。
LPR Linux 常见问题解答
Q1: lpr 命令提示 “Unknown printer” 如何解决?
首先检查打印机名称是否大小写敏感,LPR 的名称通常区分大小写,然后运行 lpstat -p 查看可用打印机列表,确认你使用的名称在其中,如果使用远程打印机,检查 /etc/printcap 中的 rm 和 rp 是否正确,或直接使用 -P hostname:queue 格式,如果仍报错,查看 /var/log/lpd-errs 或 CUPS 错误日志,确认远程服务是否运行。
Q2: 如何设置 lpr 默认打印机?
设置默认打印机有三种方式:1)通过环境变量 export PRINTER=printername,仅对当前会话有效;2)在 /etc/printcap 中将目标打印机列为第一个条目;3)如果使用 CUPS,用 lpadmin -d printername 设置系统默认打印机,lpr 会自动继承,脚本中推荐使用环境变量,避免影响其他用户。
Q3: lpr 和 lp 命令在输出效果上有什么区别?
在 CUPS 环境下,两者最终都调用相同的后端,输出结果完全一致,区别在于参数传递方式:lpr 的 -P 对应 lp 的 -d,lpr 的 对应 lp 的 -n。lp 支持 -o 传递更细粒度的选项,如 -o page-ranges=1-5,而 lpr 没有原生等价物,如果你只需要简单打印,lpr 更快捷;如果需要高级控制,lp 更灵活,两者都可靠,选择取决于你的习惯和脚本的兼容性要求。
LPR 作为 Linux 打印的基石,在远程应急和系统底层维护中始终有一席之地,掌握它的核心用法,你就能在任何打印异常时快速切入,直接操控作业流程,而不必依赖图形界面。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/511129.html



