systemd를 사용하여 saned 설치(inetd 또는 xinetd 없음) - saned가 연결을 거부함

systemd를 사용하여 saned 설치(inetd 또는 xinetd 없음) - saned가 연결을 거부함

최소한의 Jessie 이미지로 Raspberry Pi B v1을 설정하고 컵을 통해 인쇄하고 Saned를 통해 스캔하도록 구성했습니다.

로컬 설정에는 문제가 없습니다. ㅏ

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

그러나 스캐너는 네트워크에 표시되지 않습니다. scanimage -L다른 컴퓨터의 a가 표시됩니다.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 -tulpnpi에서 발행 하고 saned.serviceand 의 상태를 확인하면 다음과 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 = 0ipv6은 v6에만 바인딩되지 않고 ipv4도 포함하므로 문제가 되지 않습니다.

하지만 파이의 열린 포트에 텔넷을 시도하면 연결이거절하다:

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에 있지만 SANE 1.0.24에는 문제가 남아 있습니다. 자세한 내용SANE 버그 추적기. systemd를 제대로 사용하려면 sane-utils 1.0.25 버전(Raspbian Jessie가 아님)을 사용하거나 1.0.24 버전을 조정해야 합니다.

즉, libsystemd-dev시스템 글루가 작동하려면 설치해야 하며 saned.service1.0.25에 대한 매뉴얼 페이지 제안과 일치하도록 편집해야 합니다.1.0.25 매뉴얼 페이지.

1.0.25용 매뉴얼 페이지

정상적인 시스템 구성은 시스템 지원 없이 컴파일됩니다.

이 구성은 Saned가 시스템 통합 지원으로 컴파일된 경우에도 작동하지만 디버깅 정보가 기록되는 것을 허용하지 않습니다.

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

또한 두 saned 참조가 동일한 saned로 시작되도록 하기 위해 Alias=saned.service마지막 설치 스탠자에 입력할 수도 있습니다 .*Also=saned.socket

또한 서비스가 실패하거나 /etc/default/saned포함되어야 하며 RUN=no, 참고로 제정신인 서버 주소 또는FQDN/etc/sane.d/net.conf(단지 서버 이름이 아님)을 모든 클라이언트 시스템에 입력해야 합니다 .

답변2

그러나 파이의 열린 포트에 텔넷을 시도하면 연결이 거부됩니다.

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실제 시스템 서비스가 아닙니다. /etc/init.d/saned에서 자동으로 변환되었습니다("LSB:" 접두사가 표시됨). init.d 변환이 처리해야 하기 때문에많은이상한 경우, 때로는 거의 작동하지 않는 서비스가 발생합니다.특히소켓 활성화와 결합될 때. 따라서 saned의 기본 시스템 단위와 LSB 변환 단위를 동시에 시작하지 않아야 합니다.

관련 정보