Linux print- en scanserver

Een vijftal jaar geleden kochten we een nieuwe printer/scanner: een Brother DCP-115c.

Eerst en vooral: ik zou het niet opnieuw doen. Een nieuwe inktcassette kost bijna even veel als de printer zelf, en bovendien heeft het meer dan 3 jaar geduurd vooraleer de printer min of meer ‘out of the box’ werkte met een recente Linuxdistributie; de eerste waarmee het lukte was Ubuntu 10.04. (Is het nu echt zó moeilijk om postscript-ondersteuning in een printer in te bouwen? Maar dit ter zijde.)

Tegenwoordig staat onze printer op zolder, want als we thuis een computer gebruiken, dan is het een laptop. Die printer hangt aan een Linuxserver, en je kunt dus via het draadloze netwerk je printeropdrachten naar boven sturen. Je moet dan wel trappen doen om de prints te gaan halen, maar dat beperkt het aantal printopdrachten, en is goed voor de conditie ;-)

De printserversoftware is gewoon CUPS, en die draait op mijn ‘thuisserver’, een oude PC waar ik in het voorjaar van 2008 Ubuntu server edition op installeerde. Ik zou nu misschien niet meer voor Ubuntu kiezen, maar mijn server van toen draait nu nog steeds met weinig problemen, dus waarom zou ik hem vervangen?

De installatie van CUPS was niet moeilijk:

sudo apt-get install brother-cups-wrapper-common brother-cups-wrapper-extra cups

Als jouw printer standaardvriendelijker is dan de mijne, dan zijn die Brotherpakketten uiteraard niet nodig.

De configuratie was al iets moeilijker. Op mijn Ubuntu server staat geen grafische schil, en de webinterface voor de cups-configuratie werkt standaard enkel vanaf localhost. Ik had cups toch graag geconfigureerd vanop een andere PC, maar ik vond niet direct hoe ik dat moest ‘enablen’, dus loste ik het op via een ssh-tunnel. (Vermoedelijk gaat dat allemaal veel gemakkelijker door rechtstreeks de configuratiefiles aan te passen, maar ik had geen zin om dat uit te zoeken.) Ssh-tunnel dus. Voor linux/cygwin:

ssh -L 8080:127.0.0.1:631 username@servername

waarbij je het stuk ‘username@servername’ aanpast alnaargelang de naam van je ‘server’ en een user die kan ssh'en.

Als je nu surft naar http://localhost:8080 surft, kom je terecht op de administratie-interface van cups op je printserver. Eventueel kun je daar onder het flapje ‘Administration’ ‘Allow remote administration’ aanvinken, zodat je in de toekomst de omweg via de ssh-tunnel niet meer nodig hebt. Je kan je printserver dan beheren via http://servername:631.

Ook onder het flapje ‘Administration’ klik je op ‘Add printer’ om je printer te configureren. Dit komt neer op het doorlopen van een aantal eenvoudige stappen. (Ik koos de driver voor Brother DCP-110c, en die werkte.)

Je geconfigureerde printer aanspreken vanop een andere Linuxcomputer is vrij gemakkelijk. De meeste distributies voorzien wel een tooltje waarmee je een printer kan ‘toevoegen’. Deze tooltjes zijn in het algemeen ook in staat om een cups-printerserver te herkennen. Moest dat toch niet het geval zijn, dan kan je allicht ergens de URI van je printer opgeven, en die is ‘ipp://servername/printers/printername’ waar ‘printername’ de naam is die je je printer gegeven hebt op de server. (Let op: ik moest op de client, in dit geval Linux Mint, ook wel de Brotherdingen installeren: brother-cups-wrapper-common en brother-cups-wrapper-extra).

Je kan je cups-printserver overigens ook gebruiken onder Windows, op voorwaarde dat de juiste printerdriver op je Windowsclient geïnstalleerd is. Je voegt daarvoor een netwerkprinter toe, en als URL gebruik je gewoon de URI van je printer, maar je tikt ‘http:’ in plaats van ‘ipp:’, dus: ‘http://servername/printers/printername’. Geen gedoe meer dus met installatie van samba; had ik dat maar eerder geweten ;-)

Maar nu probleem 2: de scanner. Er bestaan command-line tools om de scanner aan te sturen:

apt-get install sane-utils

Je hebt ook nog software van Brother zelf nodig; download en installeer het pakket brscan2 van de website van Brother.

Update: If you have a 64-bit system, the driver provided by Brother won't work on a recent Ubuntu distribution. Shame on you, Brother. A solution can be found (as always :)) in the forums: http://ubuntuforums.org/showpost.php?p=11578647&postcount=8

Scannen kan nu als volgt:

sudo scanimage --format=tiff > outputfile.tiff

Nu graag nog wat gebruikersgemak. Je zou een webapplicatietje op de server kunnen maken, dat scant en het gescande document aanbiedt als download. Maar in mijn situatie is dat niet ideaal. Er staat geen grafische omgeving op mijn server, en bovendien hangt er ook geen scherm aan. En telkens een laptop mee naar boven nemen om de scan te kunnen starten, is een beetje vervelend. (En naar beneden lopen nadat het document op de scanner ligt, om het na de scan terug te gaan halen, is nog vervelender.)

Ik pakte het anders aan. Er hangt nu een toetsenbord aan mijn server, en telkens je op ENTER duwt, wordt een scan gemaakt, die wordt dan weggeschreven, en kan dan opgepikt worden via ftp of (toch) samba.

Om dit te bewerkstelligen maakte ik een nieuwe user aan:

sudo useradd -g scanner scanner

Deze user moet kunnen scannen met sudo, zonder dat daarvoor een wachtwoord ingegeven moet worden. Bewerk de configuratie van sudo met visudo, en voeg deze lijn toe:

scanner ALL = NOPASSWD : /usr/bin/scanimage

Maak een bestand ‘/usr/local/bin/scanloop.sh’ aan, met deze inhoud:

#!/bin/bash

outputdir=/mnt/bigdata/documenten/scans

while true; do
      echo Druk ENTER om te scannen.
      read a
      outputfile=`tempfile --suffix=.tiff -d $outputdir`
      chmod 666 $outputfile
      sudo scanimage --format=tiff > "$outputfile"
      echo Scan bewaard als "$outputfile"
done

En maak het executable:

sudo chmod +x /usr/local/bin/scanloop.sh

Als we het nu voor elkaar krijgen dat na het booten van de server de user scanner automatisch aanlogt, en bovenstaand script uitvoert, dan zijn we gesteld. En dat kan met ‘mingetty’.

sudo apt-get install mingetty

In het bestand ‘/etc/init/tty1.conf’ vervang je de lijn

exec /sbin/getty -8 38400 tty1

door

exec /sbin/mingetty --autologin scanner tty1

Op die manier wordt na het opstarten van de server, de user ‘scanner’ automatisch aangemeld op tty1. Als je dan nog het volgende commando ingeeft:

usermod -s /usr/local/bin/scanloop.sh scanner

dan maak je het nifty scanscriptje de shell voor diezelfde gebruiker.

Als je nu je server herstart, dan zal op tty1 automatisch het scanscriptje gestart worden. Iedere keer je op ENTER drukt, wordt een scan gemaakt, en weggeschreven in de directory bepaald in ‘scanloop.sh’. Die directory maak je dan beschikbaar via ftp, samba, webinterface, of nog een andere creatieve oplossing, zodat je vanop elke client in huis de documenten gemakkelijk kan downloaden.

Commentaar

Comments powered by Disqus