====== Ultimate Raspberry Pi: LAN Print, Scan and PDF Server ====== Článek jsem měl historicky uložený a pochází ze zdroje, který už neexistuje. Jeho přesná název zněl: **Ultimate Raspberry Pi : LAN Print , Scan and PDF Server : CUPS + AirPrint + IPP + cups-pdf + sanescan ( SaneTwain ) + phpSANE / PHP-Scanner-Server ( scanner webinterface ) + samba ( remote file access )**. Datum článku byl 2.4.2014. Samozřejmě už některé věci nebudou aktuální a je potřeba se přizpůsobit. Dávám zde alespoň přepis článku. ===== Assumptions ===== * Completed Ultimate Raspberry Pi : Preparation and with optional server preparation. * Raspberry Pi IP address: **192.168.1.111** ===== Install Dependencies ===== apt-get update && apt-get install -f avahi-daemon cups cups-pdf python-cups avahi-discover libnss-mdns sane-utils xinetd printer-driver-gutenprint system-config-printer-udev **Optional: Install one of the relevant printer drivers** apt-get install printer-driver-c2050 #printer driver for Lexmark 2050 Color Jetprinter apt-get install printer-driver-c2esp #printer driver for Kodak ESP AiO color inkjet Series apt-get install printer-driver-cjet #printer driver for Canon LBP laser printers apt-get install printer-driver-escpr #printer driver for Epson Inkjet that use ESC P-R apt-get install printer-driver-foo2zjs #printer driver for ZjStream-based printers apt-get install printer-driver-gutenprint #printer drivers for CUPS apt-get install printer-driver-hpcups #HP Linux Printing and Imaging - CUPS Raster driver (hpcups) apt-get install printer-driver-hpijs #HP Linux Printing and Imaging - gs IJS driver (hpijs) apt-get install printer-driver-m2300w #printer driver for Minolta magicolor 2300W 2400W color laser printers apt-get install printer-driver-min12xxw #printer driver for KonicaMinolta PagePro 1[234]xxW apt-get install printer-driver-pnm2ppa #printer driver for HP-GDI printers apt-get install printer-driver-postscript-hp #HP Printers PostScript Descriptions apt-get install printer-driver-ptouch #printer driver Brother P-touch label printers apt-get install printer-driver-pxljr #printer driver for HP Color LaserJet 35xx 36xx apt-get install printer-driver-sag-gdi #printer driver for Ricoh Aficio SP 1000s SP 1100s apt-get install printer-driver-splix #Driver for Samsung and Xerox SPL2 and SPLc laser printers ===== Configure cups to listen on the LAN ===== sed -i "s|Listen localhost:631|Listen *:631|" /etc/cups/cupsd.conf ===== Allow LAN access to CUPS ===== sed -i "s||\nAllow from all\n|g" /etc/cups/cupsd.conf ===== Add the server name and browse address ===== Replace **192.168.1.255** with your LAN broadcast address. echo -e "\nServerName raspberrypi" >> /etc/cups/cupsd.conf sed -i -e "s|BrowseAddress|BrowseAddress 192.168.1.255\n#BrowseAddress|" /etc/cups/cupsd.conf ===== Restart CUPS ===== service cups restart ===== Add the pi user to the lpadmin group ===== adduser pi lpadmin ===== Enable print sharing and remote administration ===== cupsctl --share-printers --remote-admin --remote-printers sed -i "s|Shared No|Shared Yes|g" /etc/cups/printers.conf lpoptions -d PDF -o printer-is-shared=true ===== Custom cups-pdf output directory ===== **PDF storage directory: /storage/pdf** mkdir -p /storage/pdf chown root:lpadmin /storage/pdf chmod 777 /storage/pdf ===== Append the date to the PDF file name ===== mkdir -p /opt/extremeshok cat > /opt/extremeshok/cups-pdf-postprocess < ===== Enable cups-pdf post processing ===== chmod 777 /opt/extremeshok/cups-pdf-postprocess chown root:lpadmin /opt/extremeshok/cups-pdf-postprocess sed -i "s|#PostProcessing|PostProcessing /opt/extremeshok/cups-pdf-postprocess|" /etc/cups/cups-pdf.conf sed -i "s|#PDFVer 1.4|PDFVer 1.5|" /etc/cups/cups-pdf.conf ===== Enable automatic retrying of failed print jobs ===== sed -i -e "s|BrowseAddress|ErrorPolicy retry-job\nJobRetryInterval 30\nBrowseAddress|" /etc/cups/cupsd.conf ===== Restart CUPS ===== service cups restart ===== Configure your printer ===== Visit the web interface: **https://192.168.1.111:631/admin** **Steps:** * Log in using: * **Admin username:** pi * **Admin password:** raspberry * Navigate to **Administration -> Find New Printers** * Add your printer and enable **Share This Printer** * Select your make and model or specify a PPD file. * Restart services: service cups restart service avahi-daemon restart ===== Optional: Enable AirPrint ===== **(Not needed on iOS 7 and above)** Enhanced iOS support: echo "image/urf urf (0,UNIRAST)" > /usr/share/cups/mime/apple.types mkdir /opt/AirPrint cd /opt/AirPrint wget -O airprint-generate.py --no-check-certificate https://raw.github.com/vidaren/airprint-generate/master/airprint-generate.py chmod +x airprint-generate.py ./airprint-generate.py -d /etc/avahi/services --cups ===== Using your PDF postscript printer via IPP ===== **Driver: Microsoft Windows** * **Manufacturer:** Generic * **Printer:** MS Publisher Imagesetter Via IPP: Use the following as the printer's location: http://192.168.1.111:631/printers/PDF ===== Using your printer via IPP ===== **Driver: Microsoft Vista and 7/8** * **Manufacturer:** HP * **Printer:** HP Color Laserjet 8550 PS or HP Color Laserjet 4550 PS **Driver: Microsoft 2000 and XP** * **Manufacturer:** HP * **Printer:** HP Color Laserjet PS Via IPP: Use the following as the printer's location: http://192.168.1.111:631/printers/printer_name ===== Optional: Enable Scanning ===== **Enable scanning support and share a scanner on your network** Install: apt-get install -f sane-utils xinetd Enable the saned service: echo -e "\n192.168.1.0/24" >> /etc/sane.d/saned.conf sed -i "s|RUN=no|RUN=yes|g" /etc/default/saned Enable the xinetd sane service: cat > /etc/xinetd.d/saned < **BUG FIX:** Scanner not working: usbfs: interface 1 claimed by usblp while `scanimage` sets config #1: echo -e "\nblacklist usblp" >> /etc/modprobe.d/blacklist.conf Reboot: sync && shutdown -r now Verify the scanner is supported and listening: scanimage -L Example output: device `xerox_mfp:libusb:001:004' is a Samsung Samsung SCX-4623 Series multi-function peripheral Verify the service: cat /etc/services | grep sane Example output: sane-port 6566/tcp sane saned # SANE network scanner daemon ===== Optional: phpSANE (Web-Based Frontend for SANE) ===== **Note:** Simple and low requirements. Install Requirements: apt-get install -y libapache2-mod-php5 unzip netpbm gocr imagemagick Install phpSANE: mkdir -p /tmp/phpSANE cd /tmp/phpSANE wget -O phpSANE-0.8.0.zip "http://downloads.sourceforge.net/project/phpsane/phpsane/0.8.0/phpSANE-0.8.0.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fphpsane%2F&use_mirror=tenet" unzip -q phpSANE-0.8.0.zip mv /tmp/phpSANE/* /var/www/ Configure: sed -i "s|\" --jpeg-quality 0\"|\"\"|g" /var/www/incl/config.php sed -i "s|/opt/bin/gocr|/usr/bin/gocr|g" /var/www/incl/config.php sed -i "s|/usr/local/bin/pdfunite|/usr/bin/pdfunite|g" /var/www/incl/config.php sed -i "s|Timeout 300|Timeout 900|g" /etc/apache2/apache2.conf sed -i "s|max_execution_time = 30|max_execution_time = 900|g" /etc/php5/apache2/php.ini sed -i "s|max_input_time = 60|max_input_time = 900|g" /etc/php5/apache2/php.ini Set Permissions: chmod +s /usr/bin/scanimage mkdir -p /var/www/tmp && chmod 775 /var/www/tmp mkdir -p /var/www/output && chmod 775 /var/www/output mkdir -p /var/www/scanners && chmod 775 /var/www/scanners ===== Optional: PHP-Scanner-Server (Advanced Web-Based Frontend for SANE) ===== **Note:** Requires 1GB+ drive space and a 512MB Raspberry Pi. Install Requirements: apt-get install -y imagemagick sane-utils usbutils libapache2-mod-php5 php5-curl tesseract-ocr tar zip php-fpdf libpaper-utils grep sed coreutils Add `www-data` to the `lp` group: adduser www-data lp Install PHP-Scanner-Server: mkdir -p /tmp/PHP-Scanner-Server cd /tmp/PHP-Scanner-Server wget -O PHP-Scanner-Server.zip "https://github.com/GM-Script-Writer-62850/PHP-Scanner-Server/archive/master.zip" unzip -q PHP-Scanner-Server.zip mkdir -p /var/www/scanner/ mv -f /tmp/PHP-Scanner-Server/PHP-Scanner-Server-master/* /var/www/scanner/ Configure: sed -i "s|Timeout 300|Timeout 900|g" /etc/apache2/apache2.conf sed -i "s|max_execution_time = 30|max_execution_time = 900|g" /etc/php5/apache2/php.ini sed -i "s|max_input_time = 60|max_input_time = 900|g" /etc/php5/apache2/php.ini Create Directories and Set Permissions: mkdir -p /var/www/scanner/scans chmod 775 /var/www/scanner/scans chown www-data /var/www/scanner/scans mkdir -p /var/www/scanner/config chmod 775 /var/www/scanner/config chown www-data /var/www/scanner/config Configure PHP-Scanner-Server: sed -i "s|Timeout 300|Timeout 900|g" /var/www/scanner/config.ini sed -i "s|FreeSpaceWarn = 2048|FreeSpaceWarn = 1024|g" /var/www/scanner/config.ini sed -i "s|Fortune = true|Fortune = false|g" /var/www/scanner/config.ini sed -i "s|RulerIncrement = 25.4|RulerIncrement = 10|g" /var/www/scanner/config.ini sed -i "s|TimeZone = ''|TimeZone = 'UTC'|g" /var/www/scanner/config.ini sed -i "s|Printer = 0|Printer = 1|g" /var/www/scanner/config.ini Access the web interface for configuration: http://192.168.1.111/scanner/index.php?page=Config ===== Using Your Scanner ===== **Windows Users:** Use TWAIN drivers to create a bridge between TWAIN and SANE on the network. Download the Windows installer: http://sanetwain.ozuzo.net/downloads/setup136.exe Configure the connection: * **Hostname:** 192.168.1.111 * **Port:** 6566 * **Username:** PCUSER * **Options:** Tick "Get list of devices on startup" ===== Optional: Enable Samba ===== **We will create a PDF share and a scanner share.** Install Samba: apt-get install -y samba samba-common-bin Configure `smb.conf`: cat > /etc/samba/smb.conf < Restart Samba: service samba restart ===== Optional: rpisysinfoscript (Web-Based System Information Frontend) ===== Visit the web interface: http://192.168.1.111/sysinfo.php Install Requirements: apt-get install -y libapache2-mod-php5 lsb-release lsscsi git -y Install rpisysinfoscript: cd /tmp wget -O rpisysinfoscript.php "https://gist.githubusercontent.com/jvhaarst/4388108/raw/4ae8702effeafb89e583722f5a963ba6c1a4d06a/gistfile1.php" mv /tmp/rpisysinfoscript.php /var/www/sysinfo.php ===== CUPS Command Line Utilities ===== Here is a list of CUPS command line utilities and their functions: * **accept** Instructs the printing system to accept print jobs to the specified destinations. * **cancel** Cancels existing print jobs from the print queues. * **cupsaddsmb** Exports printers to the Samba software for use with Windows clients. * **cups-config** A CUPS program configuration utility. * **cupsctl** Updates or queries the `cupsd.conf` file for a server. * **cupsd** The scheduler for the Common Unix Printing System. * **cupsfilter** A front-end to the CUPS filter subsystem, allowing you to convert a file to a specific format. * **cupstestdsc** Tests the conformance of PostScript files. * **cupstestppd** Tests the conformance of PPD files. * **ippfind** Finds Internet Printing Protocol (IPP) printers. * **ipptool** Sends IPP requests to the specified URI and tests and/or displays the results. * **lp** Submits files for printing or alters a pending job. * **lpadmin** Configures printer and class queues provided by CUPS. * **lpc** Provides limited control over printer and class queues provided by CUPS. * **lpinfo** Lists the available devices or drivers known to the CUPS server. * **lpmove** Moves the specified job to a new destination. * **lpoptions** Displays or sets printer options and defaults. * **lppasswd** Adds, changes, or deletes passwords in the CUPS digest password file `passwd.md5`. * **lpq** Shows the current print queue status on the named printer. * **lpr** Submits files for printing. * **lprm** Cancels print jobs that have been queued for printing. * **lpstat** Displays status information about the current classes, jobs, and printers. * **ppdc** Compiles PPDC source files into one or more PPD files. * **ppdhtml** Reads a driver information file and produces an HTML summary page listing all the drivers in a file and their supported options. * **ppdi** Imports one or more PPD files into a PPD compiler source file. * **ppdmerge** Merges two or more PPD files into a single, multi-language PPD file. * **ppdpo** Extracts UI strings from PPDC source files and updates either a GNU gettext or Mac OS X strings format message catalog source file for translation. * **reject** Instructs the printing system to reject print jobs to the specified destinations. * **libcups.so** Contains the CUPS API functions.