Я установил Raspberry Pi B v1 с минимальным образом Jessie и настроил его для печати через 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
работа - он находит два других сетевых сканера, нонетсканер, подключенный к Raspberry Pi.
Если я выдам 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
Правильное взаимодействие 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 Glue необходимо установить и 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.
Но, эм,это не отклонено. Если бы это было так, вы бы увидели «Подключение отклонено». Но здесь четко написано «Подключено» — соединение былопринял, а затем закрывается фактической службой.
В любом случае: я могу предположить две проблемы:
При активации сокета, подобного inetd, служба saned не запускаетсяпока не будет предпринята попытка соединения. Поэтому он также не может отображаться в результатах сканирования (так как он не запущен во время сканирования). Поэтому вместо этого вам может потребоваться запустить его как постоянную службу, а не как активируемую сокетом.
Ваш
saned.service
не является настоящей службой systemd; он был автоматически преобразован из /etc/init.d/saned (как показывает префикс "LSB:"). Поскольку преобразование init.d должно обрабатыватьмногостранные пограничные случаи, иногда это приводит к тому, что службы едва работают –особеннов сочетании с активацией сокета. Таким образом, следует избегать одновременного запуска модулей saned native-systemd и LSB-converted.