理解CUPS-LPD在systemd中的服务机制
传统基于xinetd的CUPS-LPD配置中,我们习惯在/etc/xinetd.d/cups-lpd
中通过server_args = -o job-sheets=none
参数禁用打印横幅。但在systemd体系下,服务管理方式发生了根本变化。
# 传统xinetd配置示例
service printer
{
socket_type = stream
protocol = tcp
wait = no
user = lp
server = /usr/lib/cups/daemon/cups-lpd
server_args = -o job-sheets=none
}
systemd服务单元文件解析
在systemd中,CUPS-LPD服务通过模板单元文件cups-lpd@.service
实现。典型路径为/usr/lib/systemd/system/cups-lpd@.service
,其核心配置段如下:
[Unit]
Description=CUPS LPD/%i service
[Service]
Type=simple
ExecStart=/usr/lib/cups/daemon/cups-lpd -o job-sheets=none %i
User=lp
Group=sys
永久性配置方案
推荐通过systemd drop-in方式修改配置,避免直接修改原始服务文件:
# 创建配置目录
sudo mkdir -p /etc/systemd/system/cups-lpd@.service.d
# 创建自定义配置文件
sudo tee /etc/systemd/system/cups-lpd@.service.d/disable-banners.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/lib/cups/daemon/cups-lpd -o job-sheets=none %i
EOF
# 重新加载配置
sudo systemctl daemon-reload
多打印机批量配置方案
对于需要管理大量打印机的情况,可以使用以下脚本批量设置:
#!/bin/bash
# 获取所有打印机名称
printers=$(lpstat -a | awk '{print $1}')
# 为每个打印机创建systemd覆盖配置
for printer in $printers; do
sudo mkdir -p "/etc/systemd/system/cups-lpd@$printer.service.d"
sudo tee "/etc/systemd/system/cups-lpd@$printer.service.d/disable-banners.conf" <<EOF
[Service]
ExecStart=
ExecStart=/usr/lib/cups/daemon/cups-lpd -o job-sheets=none $printer
EOF
done
# 应用配置更改
sudo systemctl daemon-reload
验证配置有效性
执行以下命令验证配置是否生效:
# 检查服务配置
systemctl cat cups-lpd@lp.service
# 测试打印作业
echo "Test Page" | lpr -P lp -o job-sheets=none
# 检查打印队列属性
lpoptions -p lp -l | grep job-sheets
故障排查要点
- 确保cups-lpd服务已正确加载:
systemctl status cups-lpd@lp.service
- 检查journal日志:
journalctl -u cups-lpd@lp.service
- 验证SELinux上下文(如启用):
ls -Z /etc/systemd/system/cups-lpd@*.service.d