使用 systemd 安裝 saned(無 inetd 或 xinetd) - saned 拒絕連接

使用 systemd 安裝 saned(無 inetd 或 xinetd) - saned 拒絕連接

我已經設定了一個帶有最小 Jessie 映像的 Raspberry Pi B v1,並將其配置為透過 cups 進行列印並透過 saned 進行掃描。

本地設定沒有問題; A

pi@EMK-RPiBv1:~$ scanimage -L device 'fujitsu:ScanSnap S1500:25959' is a FUJITSU ScanSnap S1500 scanner

但是,掃描器在網路上不可見。 ascanimage -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 的掃描器。

如果我在 pi 上發出並檢查和netstat -tulpn的狀態,我得到saned.servicesaned.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 上的開放連接埠時,連接是拒絕:

pi@EMK-RPiBv1:~$ telnet localhost 6566
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

這表明我無法達到我的理智。

如果我終止 saned 的 systemd 服務和套接字並嘗試調試,我會得到以下資訊:

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 進行 saned 工作,應使用 sane-utils 1.0.25 版本(不在 Raspbian Jessie 中)或對 1.0.24 版本進行調整。

簡而言之,libsystemd-dev需要安裝 systemdglue 才能運作,並saned.service進行編輯以符合 1.0.25 的手冊頁建議:1.0.25 手冊頁

1.0.25 的手冊頁

在沒有 systemd 支援的情況下編譯 saned 時的 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

但是當我嘗試 telnet 到 pi 上的開放連接埠時,連接被拒絕:

pi@EMK-RPiBv1:~$ telnet localhost 6566
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

但是,嗯,沒有被拒絕。如果是,您會看到「連線被拒絕」。但這裡清楚寫著「已連接」——連接是公認,然後由實際服務關閉。

無論如何:我可以猜測兩個問題:

  1. 透過類似 inetd 的套接字激活,saned 服務不會運行直到嘗試連接。因此它也不能出現在掃描結果中(因為它在掃描期間沒有運行)。因此,您可能需要將其作為永久服務運行,而不是套接字啟動的服務。

  2. 你的saned.service不是真正的systemd服務;它是從 /etc/init.d/saned 自動轉換的(如“LSB:”前綴所示)。由於 init.d 轉換需要處理許多奇怪的邊緣情況,有時會導致服務幾乎無法工作 –尤其與套接字活化結合使用時。因此,您應該避免同時啟動 saned 的本機系統單元和 LSB 轉換單元。

相關內容