Configuré una Raspberry Pi B v1 con una imagen mínima de Jessie y la configuré para imprimir mediante tazas y escanear mediante saned.
La configuración local no presenta problemas; a
pi@EMK-RPiBv1:~$ scanimage -L device 'fujitsu:ScanSnap S1500:25959' is a FUJITSU ScanSnap S1500 scanner
Sin embargo, el escáner no es visible en la red. a scanimage -L
en otra máquina muestra
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
Entonces, scanimage -L
funciona: encuentra los otros dos escáneres en red, peronoel escáner conectado al Raspi.
Si emito netstat -tulpn
en el pi y verifico el estado de saned.service
y saned.socket
, obtengo
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)
El puerto abierto se muestra solo para tcp6, pero según pi@EMK-RPiBv1:~$ sudo sysctl net.ipv6.bindv6only
tengo entendido net.ipv6.bindv6only = 0
, esto no debería ser un problema, ya que ipv6 no está vinculado solo a v6, sino que también incluye ipv4.
Pero cuando intento hacer telnet en el puerto abierto del pi, la conexión esrechazado:
pi@EMK-RPiBv1:~$ telnet localhost 6566
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
Esto indica que no puedo alcanzar mi saned.
Si elimino el servicio systemd y el socket de saned e intento depurarlo, obtengo lo siguiente:
root@EMK-RPiBv1:~# systemctl stop saned.service
root@EMK-RPiBv1:~# systemctl stop saned.socket
root@EMK-RPiBv1:~# lsof -i :6566
Entonces, no hay nada escuchando en este momento, no hay salida.
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
¿Qué necesito hacer para abrir la conexión? Sin instalar inetd ni xinetd por favor. Esto debería funcionar solo con systemd.
Respuesta1
La cooperación apropiada con systemd está en SANE 1.0.25, SANE 1.0.24 tiene problemas pendientes. Más enRastreador de errores SANE. Para acostumbrarse a trabajar con systemd, se debe usar la versión sane-utils 1.0.25 (no en Raspbian Jessie) o hacer ajustes a la versión 1.0.24.
En resumen, libsystemd-dev
es necesario instalarlo para que systemd pegamento funcione y editarlo saned.service
para que coincida con la sugerencia de la página de manual para 1.0.25:1.0.25 página de manual.
Página de manual para 1.0.25
Configuración de systemd cuando saned se compila sin soporte de systemd
Esta configuración también funcionará cuando Saned se compila CON soporte de integración systemd, pero no permite que se registre información de depuración.
saned.socket
(sin alterar)
[Unit]
Description=saned incoming socket
[Socket]
ListenStream=6566
Accept=yes
MaxConnections=1
[Install]
WantedBy=sockets.target
[email protected]
(cambiado, funciona también si systemd
el soporte está compilado, pero no permite el registro de información de depuración)
[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
También puede ingresar Alias=saned.service
la última estrofa de instalación después Also=saned.socket
para que ambas referencias saned comiencen con el mismo saned.*
Además, /etc/default/saned
debe contener RUN=no
o el servicio falla y, como recordatorio, la dirección del servidor saneada oFQDN(no solo el nombre del servidor) debe ingresarse /etc/sane.d/net.conf
en todas las máquinas cliente.
Respuesta2
Pero cuando intento hacer telnet en el puerto abierto del pi, la conexión se rechaza:
pi@EMK-RPiBv1:~$ telnet localhost 6566 Trying ::1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.
Pero, em,no es rechazado. Si así fuera, verías "Conexión rechazada". Pero aquí dice claramente "Conectado": la conexión fueaceptadoy luego cerrado por el servicio real.
De todos modos: puedo adivinar dos problemas:
Con una activación de socket tipo inetd como esta, el servicio saned no se está ejecutandohasta que se intente una conexión. Por lo tanto, tampoco puede aparecer en los resultados del análisis (ya que no se ejecuta durante el análisis). Por lo tanto, es posible que deba ejecutarlo como un servicio permanente, no como uno activado por socket.
Su
saned.service
no es un servicio systemd real; se convirtió automáticamente desde /etc/init.d/saned (como muestra el prefijo "LSB:"). Como la conversión init.d necesita manejarmuchoscasos extremos extraños, a veces resulta en servicios que apenas funcionan –especialmentecuando se combina con la activación del enchufe. Por lo tanto, debe evitar iniciar las unidades systemd nativas de saned y las unidades convertidas a LSB al mismo tiempo.