admin管理员组

文章数量:1618724

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

本文标签: 理光麒麟银河打印机实例