Update 27.03.2021
Da es nun schon zwei Kommentare mit Nachfragen zu dem Thema gab, dachte ich mir das ich hier kurz ein Update Kommentar dazu verfasse. Es ist wohl letztes Jahr eine neue Version des brscan-skey Paketes erschienen, mit welchem meine Scripte zum Teil nicht mehr funktionieren. Hauptsächlich betrifft es wohl scantofile, wo nur noch ein leeres PDF raus fällt. Ich habe letztens erst die Linux Version auf dem Laptop meiner Mutter installiert, allerdings das Scankey Tool ignoriert, da sie es in den vergangenen 5 Jahren nicht einmal genutzt hat. Wenn ich Zeit und Lust habe werde ich mir die neue Version nochmal anschauen und die Skripte anpassen, allerdings kann ich nicht sagen wann das sein wird. Vielen Dank auf jeden Fall für die Kommentare von Peter und Michél, die mich darauf aufmerksam gemacht haben und an den Kommentator Wade, der sich offensichtlich sogar aktiv zu dem Thema mit Brother auseinander gesetzt hat/auseinander setzt.
Update
Die Scripts liegen mittlerweile auch auf Github. Diese haben auch schon ein paar Updates erhalten, unter anderem auch scan2mail.
Ausgangsituation
Meine Mutter hat seit ein paar Monaten einen neuen Laptop und da sie nicht so viel Ahnung von PC’s hat und quasi noch ein unbeschriebenes Blatt ist, bekam sie von mir Linux drauf, um genauer zu sein Linux Mint mit Cinnamon, womit sie auch wunderbar klar kommt. Leider konnte sie damals die Scanner Funkionalität des Druckers nicht nutzen, da mein Vater diesen über einen propritären „Druckserver“ ins Netzwerk gehangen hat, welcher natürlich nur unter Windows richtig funktionierte.
Nun hat sich mein Vater endlich einen neuen Drucker gekauft, wodurch der „Druckserver“ endlich entsorgt werden konnte. Bei dem neuen Drucker handelt es sich um einen Brother MFC-J470DW mit WLAN, welcher auch Linux Unterstützung mit sich bringt. Ich gehe jetzt hier nicht auf die Installation der Treiber und so ein, mir geht es primär um das Scankey-Tool (brscan-skey), welches ermöglicht das man die Scanbuttons am Drucker nutzen kann.
Scankey-Tool und Anpassungen
Das ganze Tool besteht aus einem Binary File and ein paar Shell Scripten, welche nach /opt/brother/scanner/brscan-skey installiert werden. Im Unterordner script/ findet man nach der Installation 4 Scripte, also für jeden Button einen. Da ich festellte das die Scans alle als .ppm Dateien gespeichert werden und meine Mutter damit natürlich nichts anfangen kann, schaute ich mir mal die einzelnen Scripte an. Ich würde nicht behaupten das das, was ich manchmal schreibe als gutes scripten/programmieren durchgeht, aber diese Scripte sehen aus, als ob die ein Azubi im ersten Lehrjahr geschrieben hat. Ich hatte dann den starken Wunsch das alles nochmal ordentlich zu machen, unter anderem mit Convertierung der Dateien. Folgendes kam dabei heraus: Neuere Versionen der Skripte findet ihr auf Github
scantox.sh
#!/bin/bash
scan_path=~/Dokumente/Scans
scan_path_tmp=$(mktemp -d)
#logfile=/tmp/scan_logfile.log
resolution=300
output_filename=scan_$(date +%Y%m%d%H%M%S)
output_file="$scan_path/$output_filename"
output_file_tmp="$scan_path_tmp/$output_filename%03d.tiff"
#exec &> $logfile
function checkscanpath() {
if [[ ! -d $scan_path ]]; then
mkdir -p $scan_path
fi
}
function scantox() {
scanimage --device-name "$device" --resolution $resolution -l 0 -t 0 \
-x 210.00 -y 295.00 --format=tiff --batch=$output_file_tmp
}
function convert2() {
if [[ "$1" == "pic" ]]; then
c=0
for file in $(find $scan_path_tmp -type f); do
convert $file -quality 90 $output_file-$c.jpg
c=$[$c+1]
done
elif [[ "$1" == "file" ]]; then
convert $scan_path_tmp/* $output_file.pdf
fi
}
function finish() {
if [[ -d $scan_path_tmp ]]; then
rm -r $scan_path_tmp
fi
if which nemo > /dev/null; then
nemo $scan_path &
fi
}
scantoimage.sh
#! /bin/sh
set +o noclobber
device=$1
. /opt/brother/scanner/brscan-skey/script/scantox.sh
sleep 1
checkscanpath
scantox
convert2 pic
finish
scantofile.sh
#! /bin/sh
set +o noclobber
device=$1
. /opt/brother/scanner/brscan-skey/script/scantox.sh
sleep 1
checkscanpath
scantox
convert2 file
finish
Die Scipte für OCR und Mail werde ich wahrscheinlich auch noch anpassen und werden dann ergänzt. Wenn ihr diese Scripte hier verwenden wollt, beachtet das wenn ihr die Filenames ändert ihr auch die .cfg einen Ordner höher anpassen müsst.
Probleme, Bugs etc.
Das die Scripte des Scankey Tools ziemlich schlecht geschrieben sind steht ja schon weiter oben, aber es gibt noch ein paar weitere Bugs:
Mehrere Seiten scannen über Flachbett nicht möglich
Der Drucker hat sowohl einen normales Flachbett als auch einen Dokumenteneinzug zum scannen. Wenn man nun über das Flachbett scannt, fragt er nach der ersten Seite ob man noch eine Weitere scannen möchte. Bejaht man das, fängt er an, bricht dann aber nach etwa 1/5 ab und man bekommt die Fehlermeldung (sofern man es mitloggt):
scanimage: sane_start: Device busy
Selbst wenn man die Zeile händisch ausführt, mit der expliziten Angabe das er bitte als Quelle das Flachbett nutzen soll, bekommt man bei der zweiten Seite einen Fehler, auch wenn es diesmal ein anderer ist:
scanimage --device-name "$device" --source FlatBed --resolution 300 -l 0 -t 0 \
-x 210.00 -y 295.00 --format=tiff --batch=$output_file_tmp --batch-prompt
scanimage: sane_start: document feeder out of documents
Mir scheint es so als ob er bei der ersten Seite noch mitbekommt das er das Flachbett nutzen soll, danach aber auf den Standart umspringt, welche ADF(left align) ist.
Wenn man hingegegen von Anfang an den Dokumenteneinzug zum scannen nutzt, funktionieren mehrere Seite ohne Probleme. Der Nachteil ist da natürlich, wenn man Dokumente hat, wo die Vorder- und Rückseite bedruckt ist, denn diese muss man so manuell zusammenführen.
Wenn jemand auch dieses Problem hat und es sogar gelöst hat, würde ich mich sehr über einen entsprechenden Kommentar freuen.
brscan-skey –help
Da ich mir mal anschauen wollte was ich mit dem Consolentool brscan-skey so machen kann führte ich es mal mit -h und –help aus. Beides brachte das selbe Ergebnis und zwar die Versionsausgabe. Als ich mir dann das Script mal anschaute, sah ich auch wieso:
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
if [ "$2" = "2" ];then
--- gekürzt ---
echo ' -h --help :help'
fi
echo ' Copyright 2007-2012 Brother Industries, Ltd'
exit 0
fi
Man muss also um die Help-Ausgabe zu bekommen -h 2 oder –help 2 eingeben. Wieso? Wusste der Entwickler nicht das -V geläufgier ist für die Versionsausgabe?
Versionsnummern
Das Paket kommt in der Version 0.2.4-1. Offenbar hatte der Entwickler vor dem Release keine Muse diese Versionsnummer überall anzupassen. So hat das Binaryfile noch die Version 0.2.4-0. Des Weiteren ist in der brscan-skey-0.2.4-1.sh als $BINVERSION ebenfalls noch die Version 0.2.4-0. Dieses Script ist dafür zuständig die Scripte unter script/ zu generieren, was zu einem weiteren Phänomen führt.
brscan-skey –reset
Führt man das nämlich aus, bekommt man die wunderschöne Fehlermeldung:
Can't open /opt/brother/scanner/brscan-skey/brscan-skey-0.2.4-0.sh
Ja klar, weil die auch brscan-skey-0.2.4-1.sh heißt. Passt man nun den Namen des Scripts an funktioniert –reset auch, nur haben dann alle Scripte unter script/ plötzlich eine Versionsnummer tiefer. Grund dafür ist das es neben $BINVERSION noch die Variable $VERSION gibt, welche zumindest schonmal nicht statisch vergeben ist, allerdings auch nicht, wie man denkt durch Abfrage der Paketversion gesetzt wird, nein, man schaute sich die Versionsnummer des ausgeführten Scripts an und setzt sie danach.
Das verursacht jetzt keine Probleme, da die brscan-skey-0.2.4-0.cfg auch entsprechend angepasst wird, aber dennoch…
brscan-skey -l / –list
Das ist einfach – diese Option hat einfach keine Funktion. Also zumindest zeigt sie weder unter Ubuntu noch unter Debian irgendwas an.
Fazit
Es funktioniert und macht, mit ein paar Anpassungen, weitesgehend das was es soll, aber dieses ganze Paket schreit einem quasi die Lust des Entwicklers ins Gesicht. Ich frag mich dann immer warum Unternehmen sowas machen. Wenn sie keinen Bock haben Linux Pakete zu bauen, schön, dann sollen sie den Code für das Binary irgendwohin werfen und sagen „Da habter den Code, macht es selbst, wir haben da keinen Bock zu.“ Das würde denen doch nicht mal jemand übel nehmen…
Michél
Hallo Sebastian,
vielen Dank für diesen ausführlichen Beitrag und die Anpassung der Scripte. Ich bin von Windows auf Linux Mint 20 umgestiegen und versuche nun die Funktion „Scannen zum PC“ für unserem Brother-MFC-L2710DW umzusetzen.
Ich kenne mich mit Linux nicht besonders gut aus und bräuchte deshalb noch (etwas) Hilfe.
Drucken und scannen vom PC aus funktioniert tadellos.
Für die Funktion „Scannen zum PC“ habe ich das aktuelle Tool „brscan-skey“ installiert (ich fand leider nur die aktuelle Version „brscan-skey-0.3.1-2.amd64.deb“ wie Peter schon beschrieben hat).
Nach dem Anpassen mit deinen Scripts erhalte ich leider auch nur leere pdf-Dokumente und folgende Meldung im Terminal:
michel@esther:~$ brscan-skey
michel@esther:~$ scanimage: rounded value of br-x from 210 to 209.981
scanimage: rounded value of br-y from 295 to 294.973
Scanning infinity pages, incrementing by 1, numbering from 1
Scanning page 1
Scanned page 1. (scanner status = 5)
Scanning page 2
scanimage: sane_start: Document feeder out of documents
Batch terminated, 1 page scanned
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF‘ @ error/constitute.c/IsCoderAuthorized/408.
Error loading document: File type Leeres Dokument (application/x-zerosize) is not supported
Könntest Du mir eventuell helfen?
Vielen Dank im Voraus
Michél
Sebastian
Hi Michél,
hm, da kann ich im Moment selber leider gar nichts dazu sagen. Ich hab zwar letztens selber erst bei meiner Mutter die Linux Mint Version auf 20 geupdatet, allerdings das Scankey Tool nicht eingerichtet, da sie es die letzten 5 Jahre nicht einmal genutzt hat. Wenn ich Zeit hab werd ich mir das mal anschauen und eventuell ein Update dazu veröffentlichen.
VG Sebastian
Ralf
Carsten hat am 5.7.20 die Lösung gepostet. Eine Zeile in der
/etc/ImageMagick/policy.xml
auskommentieren reicht:
zu
<!– –>
ändern und das Scantofile Script funktioniert wieder.
Danke für die Scripte und Danke an Carsten für die Lösung.
Ralf
Ralf
ups.. Steuerzeichen möchte die Kommentarfunktion nicht. Verständlich. Hier also die Zeile ohne Tags:
policy domain=“coder“ rights=“none“ pattern=“PDF“
Sebastian
Vielen Dank für den Hinweis :)
Carsten
Danke für die Scripte, hat fast alles auf Anhieb funktioniert. Ich musste nur die policy.xml in /etc/ImageMagick-6 anpassen, damit die pdf-Generierung klappt. Habt dazu einfach auskommentiert.
VG Carsten
Peter
Hi Sebastian, great BLOG (and the only one I found!)
Wit Corona lock-down, I had time to experiment with my OpenSuSE Tumbleweed:
Brother published new tools for MFC scanners in early 2020. A lot has changed: brscan-skey invokes a binary „brscan-skey-exe“ that keeps looking for data from the scanner buttons. It then starts the corresponding script, which in turn runs the new binary „skey-scanimage.“ (Previously, SANE’s „scanimage“ was used.) However, skey-scanimage produces only empty files on my linux Tumbleweed, and since there is no documentation or other „–help“, I needed to revert to editing the scripts back to „scanimage.“ Point is, that scanimage’s options are fewer, and the output must be directed with “ > outputfile“.
Wade
Hello Sebastian
I like some of your scripts. Yes Brother’s scripts have a lot to be desired. I’ve also been modifying them on my end to provide the type of files I need.
Did you ever get past the „Document feeder out of documents“ on the flatbed.
I had purchased and returned the flatbed HL-L2395DW and then picked up an ADF MFC-L2750DW. To my surprise the ADF scanner/printer had the same script for the flatbed and wouldn’t work with the ADF. I found a script almost perfect on the internet using scanadf and it worked fine (then later I found that Brother wrote it and had it down deep in the support area). This fixes the ADF but doesn’t fix the flatbed. Scan button starts scan of first page, then shows Continue and Finish. Pressing Continue does nothing and fails.
I have 15 cases with Brother and little by little I’m getting somewhere. I have told them that I spec’ed out their scanner and that there was nothing saying that linux users couldn’t use it. I’ve been pushing for a fix and have been told that the flatbed issue has been sent via Brother case to their Linux engineers in Japan. I’ve also spoken with the Brother Support supervisor and have sent a letter (certified) to the Executive Liaison manager at Brother USA headquarters explaining everything about the problem with the flatbed scanner issue and Brother’s support (in the US anyhow) of differing support for Windows/Apple users and linux users, i.e. no phone or email support for linux users – only cases (hence 15 cases). My take is that I am supporting users and that the scan to file/image/ocr is critical.
I believe the biggest problem I’ve/we’ve got thus far is that brscan-skey is largely undocumented (compiled binary – no source code) and because of that we don’t have much available. For example, what is the Continue button waiting on waiting on. I’m thinking perhaps if the script passes the right variable, then scanimage should continue running until the Finish button is pressed.
I like the Brother line of printers — they just have to get the brscan-skey issues resolved or allow us to at least understand what it does so we can find a fix. I’ve told Brother I don’t mind helping as I want me printer/scanner to operate properly.
Please let me know if you’ve found anything on your end.
Thank You
Wade
Sebastian
Hi Wade,
sorry that I didn’t answer your comment. I didn’t investigate any further on this topic, since my mothers didn’t use this feature at all. But I would like to thank you for your effort to inform Brother about the problems!
Thanks a lot!
Sebastian
Biggaeh
Hallo Sebastian,
nachdem ich die mitgelieferten Skripte schon selber ein bisschen verbessert hatte, haben mir Deine Skripte zum Durchbruch verholfen. Besten Dank dafür. Einen kleinen Verbesserungsvorschlag habe ich noch: das convert für die PDF-Erzeugung rufe ich mit der Option „-compress jpeg“ auf. Das reduziert z.B. eine 3-Seiten-Datei von 95MB auf 2MB.
VIele Grüße, Biggaeh
Sebastian
Hi Biggaeh, freut mich zu hören. Danke für den Tipp, hab ich direkt mal in der Github-Version geändert. :)
Maren
Hallo! Ich habe deinen Blog gerade erst entdeckt! Schade, eigentlich, er hätte mir glaube ich schon eher behilflich sein können^^ …auf jedenfall werde ich wohl nun häufiger mal vorbei schauen^^…Danke für deine Erklärungen und viele Grüße aus schenna südtirol ! Maren
Sebastian
Danke und Bitte und viele Grüße zurück :)