1.问题环境
系统版本:Kylin-Desktop-V10-SP1-General-Release-xxx-20221120-x86_64
内核版本:linux 5.4.18-44kt-generic
系统版本:麒麟v10 sp1
处理器:kx6640ma
2.问题描述
问题详细描述:用户通过lpr协议去连接文印打印机的,打印传输时间需要5分钟,在做文印打印机得连接测试,发现使用lpr协议去连接文印机进行打印的时候,打印任务发送到打印机需要278秒时间(无论打印文件大小)
从抓包日志上看到,连接lpr515端口就是用了278秒后才能成功,中间发生过多次重试连接。连接3次后才能成功,理光厂家就判断麒麟电脑的LPR协议对windows server协议不兼容导致的。
处理方法一:uri配置的时候加入?reserve=no
例如添加打印机的时候,使用lpd://10.41.124.131?reserve=no
根据分析lpd可能是根据url来判断是否使用预留端口进行打印。
处理方法二:尝试使用网络命名空间的部署脚本
添加网络命名空间,将cups的守护进程放入到ns1的网络命名空间中执行,而后在系统网络命名空间中使用iptables实现源地址和端口转换。
1、创建部署脚本deploy.sh
#!/bin/bash
# 部署网络命名空间 cat <<EOF > /usr/local/bin/netns.sh #!/bin/bash ip netns add ns1 ip link add veth0 type veth peer name veth1 ip link set veth1 netns ns1 ip addr add 10.0.0.1/24 dev veth0 ip link set veth0 up ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth1 ip netns exec ns1 ip link set veth1 up ip netns exec ns1 ip route add default via 10.0.0.1 dev veth1 ip netns exec ns1 sysctl -w net.ipv4.tcp_syn_retries=1 iptables -t nat -A POSTROUTING -s 10.0.0.2 -j MASQUERADE --random sysctl -w net.ipv4.ip_forward=1 EOF
chmod a+x /usr/local/bin/netns.sh
# 部署开机服务 cat <<EOF > /etc/systemd/system/netns.service [Unit] Description=Create and configure network namespaces After=network.target
[Service] Type=oneshot RemainAfterExit=yes ExecStart=bash /usr/local/bin/netns.sh
[Install] WantedBy=multi-user.target EOF
systemctl enable netns.service systemctl start netns.service
# 修改cups服务 systemctl stop cups cp /lib/systemd/system/cups.service /lib/systemd/system/cups.service.bak sed -i 's#ExecStart=/usr/sbin/cupsd -l#ExecStart=/usr/bin/ip netns exec ns1 /usr/sbin/cupsd -l#g' /lib/systemd/system/cups.service
systemctl daemon-reload systemctl start cups |
2、登录root用户,su - root
3、进行部署,bash ./deploy.sh
3.问题处理
1、建议使用方法一,修改uri,在uri结尾添加?reserve=no
2、也可以使用方法二的部署脚本,直接部署,不会影响其它进程。
4.参考资料
http://web.mit.edu/ops/services/print/Attic/src/doc/LPRng-HOWTO-18.html