Temat: Skaner dla seniora, czyli skanowanie na zasób z dowolnego skanera USB
Wklejam artykuł, który napisałem na potrzeby dokumentacji dla domowego intranetu.
Szkoda, by się marnował, zatem zostawiam tu dla potomnych.
Kilka poniżej opisanych kroków pozwoli wykorzystać dowolny wspierany przez xsane skaner (np. stary skaner USB) w roli skanera sieciowego, skanującego dokumenty bezpośrednio na wskazany odpowiednim klawiszem klawiatury numerycznej zasób sieciowy.
Do uruchomienia takiego zestawu będzie potrzebny:
- skaner wspierany przez xsane (w naszym przypadku skaner CanoScan LIDE 30)
- urządzenie z uruchomionym oprogramowaniem xsane (w naszym przypadku będzie to router działający pod kontrolą OpenWRT z zainstalowaną paczką xsane)
- klawiatura USB (w naszym przypadku będzie to klawiaturka numeryczna Natec Goby)
Opis instalacji i konfiguracji paczki xsane dostępny jest we wpisie:
https://eko.one.pl/forum/viewtopic.php? … 99#p289299
Pora na instalację paczki kmod-usb-hid, która pozwoli systemowi OpenWRT poprawnie obsłużyć klawiaturę USB.
Po zainstalowaniu paczki:
opkg update
opkg install kmod-usb-hidwypadałoby zweryfikować, czy podpięta do routera klawiatura widziana jest przez system OpenWRT. W tym celu użyłem polecenia:
cat /sys/kernel/debug/usb/devicesA następnie, pośród odnalezionych urządzeń USB odszukałem blok wyświetlający informacje o mojej klawiaturze:
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 15 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=c0f4 ProdID=05e0 Rev= 1.10
S: Manufacturer=SZH
S: Product=usb keyboard
C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr= 98mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=10msnastępnie sprawdziłem w logach systemowych:
logreadinformację o klawiaturze:
Sat Sep 2 08:53:27 2023 user.info kernel: [3037752.421989] kmodloader: loading kernel modules from /etc/modules.d/*
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.450373] hid: raw HID events driver (C) Jiri Kosina
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.473314] input: SZH usb keyboard as /devices/platform/1e1c0000.xhci/usb1/1-1/1-1:1.0/0003:C0F4:05E0.0001/input/input0
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.484785] hid-generic 0003:C0F4:05E0.0001: input,hidraw0: USB HID v1.10 Keyboard [SZH usb keyboard] on usb-1e1c0000.xhci-1/input0
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.507562] input: SZH usb keyboard Consumer Control as /devices/platform/1e1c0000.xhci/usb1/1-1/1-1:1.1/0003:C0F4:05E0.0002/input/input1
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.520937] input: SZH usb keyboard System Control as /devices/platform/1e1c0000.xhci/usb1/1-1/1-1:1.1/0003:C0F4:05E0.0002/input/input2
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.536362] hid-generic 0003:C0F4:05E0.0002: input,hidraw1: USB HID v1.10 Device [SZH usb keyboard] on usb-1e1c0000.xhci-1/input1
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.548834] usbcore: registered new interface driver usbhid
Sat Sep 2 08:53:27 2023 kern.info kernel: [3037752.554621] usbhid: USB HID core driver
Sat Sep 2 08:53:27 2023 user.info kernel: [3037752.566216] kmodloader: done loading kernel modules from /etc/modules.d/*
Sat Sep 2 08:53:27 2023 user.info kernel: [3037752.657063] kmodloader: loading kernel modules from /etc/modules.d/*
Sat Sep 2 08:53:28 2023 user.info kernel: [3037752.675499] kmodloader: done loading kernel modules from /etc/modules.d/*
Sat Sep 2 08:53:28 2023 user.info kernel: [3037752.758775] kmodloader: loading kernel modules from /etc/modules.d/*
Sat Sep 2 08:53:28 2023 user.info kernel: [3037752.774870] kmodloader: done loading kernel modules from /etc/modules.d/*
Sat Sep 2 08:53:28 2023 user.info kernel: [3037752.857395] kmodloader: loading kernel modules from /etc/modules.d/*
Sat Sep 2 08:53:28 2023 user.info kernel: [3037752.875746] kmodloader: done loading kernel modules from /etc/modules.d/*Jak widać, wszystko zadziałało poprawnie.
Teraz pozostaje zadbać o to, by powiązać zdarzenie naciśnięcia wybranego przycisku na tej klawiaturze z akcją zeskanowania włożonego do skanera dokumentu i wysłania wykonanego skanu do odpowiedniego zasobu zdalnego SMB.
W powiązaniu zdarzenia przyciśniętego klawisza z wspomnianą wyżej akcją pomoże nam paczka triggerhappy, którą zainstalowałem w następujący sposób:
opkg install triggerhappyZaraz po zainstalowaniu tej paczki postanowiłem sprawdzić co wydarzy się po naciśnięciu klawisza „1”, w tym celu użyłem polecenia:
thd --dump /dev/input/event*co spowodowało wyświetlenie w konsoli następujących linii:
EV_KEY KEY_KP1 1 /dev/input/event0
# KEY_KP1 1 command
EV_KEY KEY_KP1 0 /dev/input/event0
# KEY_KP1 0 commandTym samym, upewniłem się, że wygenerowane zostało zdarzenie naciśnięcia przycisku „1”.
Na koniec pozostaje więc wyedytować plik konfiguracyjny dla paczki triggerhappy
nano /etc/triggerhappy/triggers.d/example.confMój przykładowy config wygląda następująco:
# This is an example configuration for the triggerhappy daemon (thd)
# please note that every file to be processed must end in ".conf"
#
# To view a list of supported event codes, use "thd --listevents" or
# "thd --dump /dev/input/event*"
#
# Format:
# <eventcode> <value> <command>
#
# values for key events are 1 (pressed), 0 (released) or 2 (held)
#
## control an mpd instance
# KEY_NEXTSONG 1 /usr/bin/mpc next
# KEY_PREVSONG 1 /usr/bin/mpc prev
KEY_KP1 1 /scripts/skan_medyczne.sh
KEY_KP2 1 /scripts/skan_polisy_na_samochod.sh
KEY_KP3 1 /scripts/skan_polisy_na_dom.sh
KEY_KP4 1 /scripts/skan_oplaty_gaz.sh
KEY_KP5 1 /scripts/skan_oplaty_odpady.sh
KEY_KP6 1 /scripts/skan_oplaty_prad.sh
KEY_KP7 1 /scripts/skan_oplaty_woda.sh
KEY_KPENTER 1 /scripts/skan_inne.shPo zedytowaniu pliku konfiguracyjnego pozostaje nam zerstartować usługę:
service triggerhappy restartWe wskazane lokalizacje podpiąłem odpowiednie skrypty, poniżej zawartość jednego z nich:
/scripts/skan_inne.sh
ps | grep scanimage | grep -v grep > /dev/null
if [ $? -eq 0 ]; then
{
echo "Process is running."
}
else
{
timestamp=`date +%Y-%m-%d_%T`
filename=${timestamp}_Inne
echo "Montuje zdalny zasob..."
mount -t cifs //192.168.10.11/Skaner -o 'username=uzytkownik,password=haslo' /mnt/remote_share
echo "Tworze katalogi..."
mkdir /mnt/remote_share/Dokumenty
mkdir /mnt/remote_share/Dokumenty/Inne
scanimage -x 215 -y 297 --resolution 300dpi --format jpeg >/mnt/remote_share/Dokumenty/Inne/$filename.jpg
umount /mnt/remote_share/
}
fiOd tej pory przyciśnięcie odpowiedniego klawisza na płycie skanera (klawiatura przytwierdzona do klapy skanera) spowoduje zeskanowanie dokumentu, nadanie mu przyzwoitej nazwy pliku (z datą i opisem wykonanego skanu) oraz przesłanie go na domowy serwer plików pod właściwą lokalizację.
Odnośniki: