Linux lpd命令是行式打印机守护进程(Line Printer Daemon),是传统BSD打印系统的核心组件。
lpd [选项] [端口]
| 选项 | 说明 |
|---|---|
-l |
启用日志记录,将调试信息记录到syslog |
-D |
在前台运行,不进入后台守护进程模式 |
-h |
显示帮助信息 |
-V |
显示版本信息 |
-s |
不从inetd启动(standalone模式) |
| 文件/目录 | 说明 |
|---|---|
/etc/printcap |
打印机配置文件(BSD风格) |
/etc/hosts.lpd |
允许访问打印服务的主机列表 |
/var/spool/lpd/ |
打印队列和作业目录 |
/usr/sbin/lpd |
lpd守护进程二进制文件 |
/etc/inetd.conf |
inetd配置文件(如果从inetd启动) |
# 在前台启动lpd,启用日志记录
sudo lpd -l -D
# 作为后台守护进程启动
sudo lpd
# 检查lpd是否正在运行
ps aux | grep lpd
netstat -tlnp | grep 515
# /etc/printcap示例配置
# 定义本地打印机lp
lp:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:sh:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/lp/filter:
# 定义网络打印机
netprinter:\
:sd=/var/spool/lpd/netprinter:\
:rm=printserver.example.com:\
:rp=raw:\
:mx#0:\
:sh:
# 查看打印队列状态
lpq -P lp
# 提交打印作业
lpr -P lp document.txt
# 删除打印作业
lprm -P lp 作业号
# 检查打印机状态
lpstat -p
# 编辑/etc/hosts.lpd,允许特定主机
echo "192.168.1.100" >> /etc/hosts.lpd
echo "192.168.1.0/24" >> /etc/hosts.lpd
echo "*.example.com" >> /etc/hosts.lpd
# 重启lpd服务使配置生效
sudo systemctl restart lpd
# 或者
sudo /etc/init.d/lpd restart
# 创建简单的打印过滤器脚本
cat > /var/spool/lpd/lp/filter << 'EOF'
#!/bin/bash
# 简单的文本过滤器
# 添加页眉和页脚
echo "===== 开始打印 ====="
cat
echo ""
echo "===== 打印结束 ====="
EOF
# 设置可执行权限
chmod +x /var/spool/lpd/lp/filter
# /etc/inetd.conf配置示例
printer stream tcp nowait root /usr/sbin/tcpd /usr/sbin/lpd
# 重启inetd服务
sudo systemctl restart inetd
# 或者
sudo killall -HUP inetd
# 在前台运行lpd并查看调试信息
sudo lpd -l -D
# 查看系统日志中的lpd消息
tail -f /var/log/messages | grep lpd
# 或
journalctl -f -u lpd
# 检查打印队列目录
ls -la /var/spool/lpd/
ls -la /var/spool/lpd/lp/
#!/bin/bash
# 打印服务器初始化脚本
# 1. 安装必要的软件包
# Ubuntu/Debian
sudo apt-get install lpr lprng
# 2. 创建打印队列目录
sudo mkdir -p /var/spool/lpd/lp
sudo chown daemon:daemon /var/spool/lpd/lp
sudo chmod 755 /var/spool/lpd/lp
# 3. 配置printcap文件
sudo tee /etc/printcap << 'EOF'
lp:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:sh:\
:lp=/dev/usb/lp0:\
:if=/var/spool/lpd/lp/filter:
EOF
# 4. 启动lpd服务
sudo systemctl start lpd
sudo systemctl enable lpd
# 5. 测试打印
echo "测试打印" | lpr -P lp
| 字段 | 说明 | 示例 |
|---|---|---|
sd |
假脱机目录(spool directory) | :sd=/var/spool/lpd/lp: |
mx |
最大文件大小(0表示无限制) | :mx#0: |
sh |
抑制页眉(suppress header) | :sh: |
lp |
本地打印机设备 | :lp=/dev/lp0: |
rm |
远程机器(remote machine) | :rm=printer.example.com: |
rp |
远程打印机(remote printer) | :rp=raw: |
if |
输入过滤器(input filter) | :if=/var/spool/lpd/lp/filter: |
of |
输出过滤器(output filter) | :of=/usr/libexec/lpr/lpf: |
br |
波特率(串口打印机) | :br#9600: |
fc |
清除标志位(串口打印机) | :fc#0: |
| 特性 | lpd(BSD打印系统) | CUPS(现代打印系统) |
|---|---|---|
| 协议支持 | LPD/LPR协议 | IPP、LPD、SMB、AppSocket等 |
| 配置方式 | /etc/printcap文本文件 | Web界面、配置文件、命令行 |
| 驱动程序 | 过滤器脚本 | PPD文件、标准驱动 |
| 网络打印 | 基础支持 | 高级网络功能 |
| 安全特性 | 基本访问控制 | SSL/TLS加密、认证 |
| 管理工具 | lpr、lpq、lprm命令 | lp、cancel、lpstat命令,Web界面 |
| 适用场景 | 老系统、简单环境 | 现代Linux、企业环境 |
# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install lpr lprng
# CentOS/RHEL系统
sudo yum install lpr lprng
# 从源码编译安装
wget http://www.lprng.com/LPRng/LPRng-3.8.35.tar.gz
tar -xzf LPRng-3.8.35.tar.gz
cd LPRng-3.8.35
./configure
make
sudo make install
可能原因: 端口515被占用
解决: 检查端口占用情况
netstat -tlnp | grep 515
# 如果被占用,停止相应服务或修改配置
解决: 清理打印队列
# 停止lpd服务
sudo systemctl stop lpd
# 清理假脱机目录
sudo rm -rf /var/spool/lpd/lp/*
# 重启服务
sudo systemctl start lpd
解决: 检查目录权限
# 设置正确的权限
sudo chown daemon:daemon /var/spool/lpd/lp
sudo chmod 755 /var/spool/lpd/lp
解决: 检查网络配置
# 测试网络连接
ping printer.example.com
# 检查防火墙设置
sudo iptables -L -n | grep 515
lpr - 提交打印作业lpq - 查看打印队列状态lprm - 删除打印作业lpadmin - 打印机管理(CUPS)lpstat - 显示打印机状态cupsd - CUPS打印守护进程