在systemd环境下禁用CUPS-LPD远程打印任务横幅的最优配置方法


阅读 3 次

理解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