最小限の 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
他の2つのネットワークスキャナは見つかりますが、ない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 も含まれているため、これは問題にならないはずです。
しかし、Piの開いているポートにtelnet接続しようとすると、接続は拒否した:
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
適切なsystemd連携はSANE 1.0.25で実現されていますが、SANE 1.0.24には問題が残っています。SANE バグトラッカーsaned を systemd で動作させるには、sane-utils 1.0.25 バージョン (Raspbian Jessie には含まれません) を使用するか、1.0.24 バージョンを調整する必要があります。
つまり、libsystemd-dev
systemd グルーが機能するためにはインストールする必要があり、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
いなければサービスが失敗します。念のため、sanedサーバアドレスまたは完全修飾ドメイン名(サーバー名だけでなく) を/etc/sane.d/net.conf
すべてのクライアント マシンに入力する必要があります。
答え2
しかし、Pi の開いているポートに Telnet しようとすると、接続が拒否されます。
pi@EMK-RPiBv1:~$ telnet localhost 6566 Trying ::1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.
でも、うーん、拒否されないもしそうなら、「接続が拒否されました」と表示されます。しかし、ここでは明らかに「接続されました」と表示されています。接続は承認済み、その後実際のサービスによって閉じられます。
とにかく、私は 2 つの問題を推測できます。
このようなinetdのようなソケットアクティベーションでは、sanedサービスは実行されません。接続が試みられるまでしたがって、スキャン結果にも表示されません (スキャン中は実行されていないため)。そのため、ソケットでアクティブ化されるサービスではなく、永続的なサービスとして実行する必要がある場合があります。
これは
saned.service
実際のsystemdサービスではありません。/etc/init.d/sanedから自動的に変換されたものです(「LSB:」プレフィックスが示すとおり)。init.d変換では、多くの奇妙なエッジケースでは、サービスがほとんど機能しなくなることもあります。特にソケットアクティベーションと組み合わせた場合。したがって、saned のネイティブ systemd ユニットと LSB 変換ユニットを同時に起動することは避けてください。