我已经设置了一个带有最小 Jessie 图像的 Raspberry Pi B v1,并将其配置为通过 cups 进行打印和通过 saned 进行扫描。
本地设置没有问题;
pi@EMK-RPiBv1:~$ scanimage -L device 'fujitsu:ScanSnap S1500:25959' is a FUJITSU ScanSnap S1500 scanner
但是,扫描仪在网络上不可见。scanimage -L
另一台机器上显示
emk2203@XPS12-9Q33:~$ scanimage -L device 'hpaio:/net/HP_LaserJet_CM1415fn?ip=192.168.1.30' is a Hewlett-Packard HP_LaserJet_CM1415fn all-in-one device 'hpaio:/net/HP_Officejet_Pro_276dw_MFP?ip=192.168.1.40' is a Hewlett-Packard HP_Officejet_Pro_276dw_MFP all-in-one
因此,scanimage -L
它找到了另外两个联网的扫描仪,但是不是连接到 Raspi 的扫描仪。
如果我netstat -tulpn
在 pi 上发出并检查saned.service
和的状态saned.socket
,我会得到
pi@EMK-RPiBv1:~$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN -
tcp6 0 0 :::6566 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::631 :::* LISTEN
udp 0 0 0.0.0.0:42976 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 0.0.0.0:29987 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 192.168.1.34:123 0.0.0.0:* -
udp 0 0 127.0.0.1:123 0.0.0.0:*-
udp 0 0 0.0.0.0:123 0.0.0.0:*-
udp6 0 0 :::35810 :::* -
udp6 0 0 :::5353 :::* -
udp6 0 0 :::49009 :::* -
udp6 0 0 fe80::ba27:ebff:fe4:123 :::* -
udp6 0 0 2a02:8070:a182:ce00:123 :::* -
udp6 0 0 ::1:123 :::* -
udp6 0 0 :::123 :::* -
pi@EMK-RPiBv1:~$ systemctl status saned.socket
● saned.socket - saned incoming socket
Loaded: loaded (/lib/systemd/system/saned.socket; enabled)
Active: active (listening) since Sun 2015-10-11 20:01:52 CEST; 2min 18s ago
Listen: [::]:6566 (Stream)
Accepted: 0; Connected: 0
pi@EMK-RPiBv1:~$ systemctl status saned.service
● saned.service - LSB: SANE network scanner server
Loaded: loaded (/etc/init.d/saned)
Active: active (exited) since Sun 2015-10-11 20:01:53 CEST; 2min 26s ago
Process: 342 ExecStart=/etc/init.d/saned start (code=exited, status=0/SUCCESS)
仅显示 tcp6 的开放端口,但据pi@EMK-RPiBv1:~$ sudo sysctl net.ipv6.bindv6only
我所知net.ipv6.bindv6only = 0
- 这应该不是问题,因为 ipv6 不仅限于 v6,还包括 ipv4。
但当我尝试通过 telnet 连接到 pi 上的开放端口时,连接拒绝:
pi@EMK-RPiBv1:~$ telnet localhost 6566
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
这表明我无法达到我的理智。
如果我终止 systemd 服务和 saned 套接字并尝试调试,我会得到以下结果:
root@EMK-RPiBv1:~# systemctl stop saned.service
root@EMK-RPiBv1:~# systemctl stop saned.socket
root@EMK-RPiBv1:~# lsof -i :6566
因此,目前没有任何监听 - 没有输出。
root@EMK-RPiBv1:~# saned -d128 -a saned
[saned] main: starting debug mode (level 128)
[saned] read_config: searching for config file
[saned] read_config: done reading config
[saned] saned (AF-indep+IPv6) from sane-backends 1.0.24 starting up
[saned] do_bindings: trying to get port for service "sane-port" (getaddrinfo)
[saned] do_bindings: [1] socket () using IPv6
[saned] do_bindings: [1] setsockopt ()
[saned] do_bindings: [1] bind () to port 6566
[saned] do_bindings: [1] listen ()
[saned] do_bindings: [0] socket () using IPv4
[saned] do_bindings: [0] setsockopt ()
[saned] do_bindings: [0] bind () to port 6566
[saned] do_bindings: [0] bind failed: Address already in use
[saned] run_standalone: spawning Avahi process
[saned] run_standalone: waiting for control connection
[saned] saned_avahi_callback: AVAHI_CLIENT_S_RUNNING
[saned] saned_create_avahi_services: adding service 'saned'
[saned] saned_avahi_group_callback: service 'saned' successfully established
我需要做什么才能打开连接?请不要安装 inetd 或 xinetd。这应该只适用于 systemd。
答案1
SANE 1.0.25 中提供了适当的 systemd 协作,SANE 1.0.24 中仍存在问题。更多信息SANE 错误追踪器。为了能够顺利使用 systemd,应该使用 sane-utils 1.0.25 版本(Raspbian Jessie 中没有)或对 1.0.24 版本进行调整。
简而言之,libsystemd-dev
需要安装 systemd glue 才能工作,并且saned.service
进行编辑以匹配 1.0.25 的手册页建议:1.0.25 手册页。
1.0.25 的手册页
当 saned 编译时没有 systemd 支持时的 Systemd 配置
当 Saned 使用 systemd 集成支持进行编译时,此配置也将有效,但它不允许记录调试信息。
saned.socket
(未变)
[Unit]
Description=saned incoming socket
[Socket]
ListenStream=6566
Accept=yes
MaxConnections=1
[Install]
WantedBy=sockets.target
[email protected]
(已更改,如果systemd
编译了支持也可以工作,但不允许记录调试信息)
[Unit]
Description=Scanner Service
Requires=saned.socket
[Service]
ExecStart=/usr/sbin/saned
User=saned
Group=saned
StandardInput=socket
Environment=SANE_CONFIG_DIR=/etc/sane.d
[Install]
Also=saned.socket
您还可以Alias=saned.service
在最后的安装节中输入,Also=saned.socket
以使两个 saned 引用都以相同的 saned 开头。*
此外,/etc/default/saned
需要包含RUN=no
或服务失败,并作为提醒,理智的服务器地址或完整限定域名 (FQDN)(不仅仅是服务器名称)需要输入/etc/sane.d/net.conf
到所有客户端机器上。
答案2
但是当我尝试通过 telnet 进入 pi 上的开放端口时,连接被拒绝:
pi@EMK-RPiBv1:~$ telnet localhost 6566 Trying ::1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.
但是,嗯,没有被拒绝。如果是,您会看到“连接被拒绝”。但这里清楚地显示“已连接”——连接已公认,然后由实际服务关闭。
无论如何:我可以猜测两个问题:
使用类似 inetd 的套接字激活(例如此),saned 服务不会运行直到尝试连接。因此它也不能出现在扫描结果中(因为它在扫描期间没有运行)。因此,您可能需要将其作为永久服务运行,而不是套接字激活服务。
您的
saned.service
服务不是真正的 systemd 服务;它是从 /etc/init.d/saned 自动转换而来的(如“LSB:”前缀所示)。因为 init.d 转换需要处理许多奇怪的边缘情况,有时会导致服务几乎无法正常工作 -尤其与套接字激活结合使用。因此,您应避免同时启动 saned 的本机 systemd 单元和 LSB 转换单元。