Cel:
Skanowanie za pomocą skanera (Canon MP360) po naciśnięciu przycisku.Opis sytuacji:
Skaner (drukarka wielofunkcyjna) stoi sobie w pokoju koło serwera z Linux-em. Aby zeskanować trzeba podpiąć drukarkę do laptopa, lub do jakiegoś innego komputera. Pomysł jest taki, że można podłączyć skaner do serwera i po naciśnięciu przycisku uruchomić skanowanie, którego wynikiem będzie plik png w danej lokalizacji.Przygotowanie:
Aby możliwe było skanowanie konieczne są pakiety: sane-utils, sane i cups
Cups są potrzebne aby drukarka była widoczna przez sane.
Po instalacji pakietów należy sprawdzić czy wszystko działa:
scanimage -L
Wynik powinien być podobny do:
device `pixma:04A9263C_8027C0' is a CANON PIXMA MP360 multi-function peripheral
Z pomocy polecenia scanimage można wyczytać jakie dodatkowe opcje ma dany backend sane do skanowania.
Mięsko
Czyli skrypt, który umożliwi więcej niż jedno skanowanie przeniesie wynik do odpowiedniego katalogu:
#!/bin/bash CURRENT_SCAN_FILE=/tmp/current_scan_file.tiff OUTPUT_DIR=/mnt/shared/skany RESOLUTION=300 EMAIL_ADDRESS="root@sobczak.tk" EMAIL_SUBJECT="Scan image fail" EMAIL_MESSAGE="/tmp/scaner_fail.msg" PID_FILE="/var/run/scan-after-button.pid" if [ ! -d "$OUTPUT_DIR" ]; then mkdir $OUTPUT_DIR fi echo $$ > $PID_FILE while true; do scanimage --resolution $RESOLUTION --button-controlled=yes > $CURRENT_SCAN_FILE if [ $? == 0 ]; then CURRENT_TIME=`date +%F_%H.%M.%S` convert "${CURRENT_SCAN_FILE}" "${OUTPUT_DIR}/${CURRENT_TIME}.png" else echo "Scan failed. scanimage output code: $?" > $EMAIL_MESSAGE sleep 10; mail -s "$EMAIL_SUBJECT" "$EMAIL_ADDRESS" < $EMAIL_MESSAGE fi done
Automatyzacja
Kolejnym krokiem jest dodanie automatyzacji. Umieszczamy skrypt w katalogu /usr/local/sbin/ i sprawdzamy czy wszystko działa jak należy (nie zapomnij o nadaniu praw do wykonywania). Teraz tworzymy skrypty udev dzięki, któremu będziemy mogli reagować na włączenie/wyłączenie skanera. /usr/local/sbin/start-scan-after-button.sh#!/bin/bash PID_FILE="/var/run/scan-after-button.pid" /sbin/start-stop-daemon --start --pidfile $PID_FILE --background --exec /usr/local/sbin/scan-after-button.sh/usr/local/sbin/stop-scan-after-button.sh
#!/bin/bash PID_FILE="/var/run/scan-after-button.pid" PID=`cat ${PID_FILE}` pkill -P $PID && kill $PID rm $PID_FILEi /etc/udev/rules.d/85-scan-ater-button.rules
ACTION=="add", ENV{ID_MODEL}=="MP360_Series", RUN+="/usr/local/sbin/start-scan-after-button.sh" ACTION=="remove", ENV{ID_MODEL}=="MP360_Series", RUN+="/usr/local/sbin/stop-scan-after-button.sh"