Szukaj…


Wprowadzenie i instalacja

Celem tej dokumentacji jest użycie skanera bez interfejsu użytkownika. Powszechnym zastosowaniem jest przesyłanie zeskanowanego pliku PDF bezpośrednio na Dysk Google lub Dropbox za pomocą przycisków skanera.

scanbd pozwala na uruchamianie akcji za pomocą przycisków skanera, używa rozsądnego.

Trochę trudniejsze jest to, że poprzez odpytanie skanera, scanbd blokuje urządzenie. Ponieważ musimy także skanować z lokalnych narzędzi (takich jak scanimage), musimy ustawić serwer proxy, który w razie potrzeby będzie przerywał scandb przed odpytywaniem. Jest to zadanie scanbm, który monitoruje sieć i daje pierwszeństwo przed scanbd jakimkolwiek lokalnym dostępem do skanera.

Dlatego musimy:

  • Skonfiguruj lokalną rozsądną konfigurację, aby skanować tylko z sieci (przez scanbm)
  • Skonfiguruj scanbd, aby mieć dostęp i skanować lokalny skaner

Jako root :

apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd

Najnowszą wersję scanbd można znaleźć tutaj: https://sourceforge.net/projects/scanbd/files/releases/

# Download the latest version of **scanbd**.
wget https://sourceforge.net/projects/scanbd/files/releases/scanbd-1.4.4.tgz/download

# Uncompress
tar xvzf scanbd-1.4.4.tgz && cd 1.4.4

# Configure with the installation path in /etc/
./configure --disable-Werror

# install it
make
make install

# Add a dbus policy to authorize "saned" user to manage scanbd :
cp integration/scanbd_dbus.conf /etc/dbus-1/system.d/

# Add the init script to manage the daemon :
cp integration/scanbd.debian /etc/init.d/scanbd

scanbd jest teraz zainstalowany, ale jeszcze nie skonfigurowany.

Skonfiguruj rozsądny do skanowania z sieci

Lokalna konfiguracja sane znajduje się w /etc/saned.d


/etc/sane.d/dll.conf

# /etc/sane.d/dll.conf - Configuration file for the SANE dynamic backend loader
#
# Backends can also be enabled by configuration snippets under
# /etc/sane.d/dll.d directory -- packages providing backends should drop
# a config file similar to dll.conf in this directory, named after the package.
#

# The next line enables the network backend; comment it out if you don't need
# to use a remote SANE scanner over the network - see sane-net(5) and saned(8)

net

dll.conf zawiera tylko backend net .


/etc/sane.d/net.conf:

# This is the net backend config file.

## net backend options
# Timeout for the initial connection to saned. This will prevent the backend
# from blocking for several minutes trying to connect to an unresponsive
# saned host (network outage, host down, ...). Value in seconds.
connect_timeout = 3

## saned hosts
# Each line names a host to attach to.
# If you list "localhost" then your backends can be accessed either
# directly or through the net backend.  Going through the net backend
# may be necessary to access devices that need special privileges.

localhost

W tym momencie scanbm nie jest jeszcze skonfigurowany, nie można uzyskać dostępu do skanera z sieci. Musimy skonfigurować scanbm wraz ze scanbd, aby przetestować konfigurację.

Skonfiguruj scanbd, aby odpytywał lokalny skaner

Zidentyfikuj lokalny skaner

Korzystając z lsusb, zidentyfikuj productId (tutaj 1909):

pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110

Z tym identyfikatorem produktu grep poprawny plik konfiguracyjny (zależy od modelu skanera, dla mnie jest to genesys.conf ):

pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909

Skopiuj plik do folderu konfiguracji scanbd:

cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/

Edytuj /usr/local/etc/scanbd/dll.conf i zamień net na właściwy backend skanera:

# /etc/sane.d/dll.conf - Configuration file for the SANE dynamic backend loader
#
# Backends can also be enabled by configuration snippets under
# /etc/sane.d/dll.d directory -- packages providing backends should drop
# a config file similar to dll.conf in this directory, named after the package.
#

# The next line enables the network backend; comment it out if you don't need
# to use a remote SANE scanner over the network - see sane-net(5) and saned(8)

genesys

Sprawdź, czy skaner lokalny został znaleziony przez scanbd

Teraz jesteśmy gotowi do przetestowania:

scanbd -d7 -f

Unikaj jak najwięcej, aby manipulować zmienną env var SANE_CONFIG_DIR. Może to zepsuć, domyślna wartość jest już skonfigurowana w /usr/local/etc/scanbd/scanbd.conf i w skrypcie init.

Dane wyjściowe powinny być podobne do:

scanbd: foreground
scanbd: reading config file /usr/local/etc/scanbd/scanbd.conf
scanbd: debug on: level: 7
scanbd: dropping privs to uid saned
scanbd: dropping privs to gid scanner
scanbd: group scanner has member: 
scanbd: saned
scanbd: pi
scanbd: drop privileges to gid: 110
scanbd: Running as effective gid 110
scanbd: drop privileges to uid: 110
scanbd: Running as effective uid 110
scanbd: dbus_init
scanbd: dbus match type='signal',interface='org.freedesktop.Hal.Manager'
scanbd: SANE_CONFIG_DIR=/usr/local/etc/scanbd/sane.d
scanbd: sane version 1.0
scanbd: Scanning for local-only devices
scanbd: found device: genesys:libusb:001:005 Canon LiDE 110 flatbed scanner

Najważniejszym tutaj jest found device .

Co się stanie, jeśli „znalezione urządzenie” nie pojawi się?

Powinieneś ponownie sprawdzić swoją konfigurację, szczególnie część identyfikacyjną tej dokumentacji i wyczyścić ewentualne niepoprawnie ustawione SANE_CONFIG_DIR env var, wpisując: unset SANE_CONFIG_DIR


Skonfiguruj xinetd, aby nasłuchiwał skanera w sieci

Utwórz /etc/xinetd.d/sane-port który zawiera:

service sane-port
{
        port        = 6566
        socket_type = stream
        wait        = no
        user        = saned
        group       = scanner
        server      = /usr/local/sbin/scanbm
        server_args = scanbm -c /usr/local/etc/scanbd/scanbd.conf
        disable     = no
}

/! \ Dokładnie sprawdź ścieżkę scanbm, z which scanbm

Następnie zrestartuj xinetd i uruchom scanbd :

service xinetd restart
/etc/init.d/scanbd start

scanimage -L powinien teraz wyświetlać skaner.

Większość problemów na tym etapie dotyczy uprawnień. Upewnij się, że scanimage -L działa, gdy jesteś zalogowany jako saned, wykonując sudo -u saned -s .

Jeśli nie, sprawdź uprawnienia USB: ls -al /dev/bus/usb/***

Wyzwalaj akcje za pomocą przycisków skanera

Działania znajdują się w /usr/local/etc/scanbd/scanbd.conf . Mam 4 przyciski skanowania , kopiowania , e - mail i pliku .

Domyślny plik konfiguracyjny nie zawiera wszystkich akcji domyślnie, prawdopodobnie będziesz musiał ręcznie dodać blok. W zależności od modelu skanera możesz mieć mniej lub więcej przycisków.

Dla każdej akcji ustawimy niestandardową ścieżkę dla opcji skryptu .

action scan {
    filter = "^scan.*"
    numerical-trigger {
            from-value = 1
            to-value   = 0
    }
    desc   = "Scan to file"
    # script must be an relative path starting from scriptdir (see above), 
    # or an absolute pathname. 
    # It must contain the path to the action script without arguments
    # Absolute path example: script = "/some/path/foo.script 
    script = "/home/pi/scan.sh"
}

Nie zapomnij skomentować innej domyślnej akcji na końcu pliku scanbd.conf:

# devices 
# each device can have actions and functions, you can disable not relevant devices
#include(scanner.d/avision.conf)
#include(scanner.d/fujitsu.conf)
#include(scanner.d/hp.conf)
#include(scanner.d/pixma.conf)
#include(scanner.d/snapscan.conf)
#include(scanner.d/canon.conf)

Możesz teraz utworzyć własny skrypt do obsługi każdej akcji:

Każda linia względem /sys/class/leds/led0/trigger do sterowania diodą LED w celu monitorowania, co się dzieje. Możesz robić, co chcesz, cat /sys/class/leds/led0/trigger daje ci różne wzory świateł.

/home/pi/scan.sh

#!/bin/bash

# don't forget to create the folder
scan_dir=/home/pi/scanned-files
datetime=`date +%F_%H%M%S`

echo none >/sys/class/leds/led0/trigger

case $SCANBD_ACTION in
  scan)
    filename=file-$datetime
    logger -t "scanbd: $0" "$SCANBD_DEVICE $SCANBD_ACTION - scanning --resolution 150 --mode Color --depth 8 --format=tiff to $scan_dir/$filename.jpg"
    echo timer >/sys/class/leds/led0/trigger
    scanimage -d $SCANBD_DEVICE --resolution 150 --mode Color --depth 8 --format=tiff  --brightness 5 --contrast 20 | convert tiff:- -compress jpeg $scan_dir/$filename.pdf
    echo none >/sys/class/leds/led0/trigger
    logger -t "scanbd: $0" "Finished scanning"
    ;;
    
  email)
    logger -t "scanbd: $0" "Emailing $scan_dir/file-*pdf"
    echo heartbeat >/sys/class/leds/led0/trigger
    # here are the lines to send the file
    echo none >/sys/class/leds/led0/trigger

esac


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow