Aug 272013
 

CUPS_printer

Prerequisites

ALL of the following commands will be run as root. If you are not root already, you can become root by entering “sudo su” as user pi.

Install packages

aptitude update
aptitude install avahi-daemon cups cups-pdf python-cups
  • This will update your package list, and install the packages we need
  • avahi-daemon is a free zeroconf implementation (open source Bonjour replacement)
  • CUPS = Common Unix Printing System – manages the printers for you

This command will take a while, especially after [ ok ] Starting Common Unix Printing System: cupsd. Please be patient here.

Edit /etc/cups/cupsd.conf

nano /etc/cups/cupsd.conf

Comment out the line just below “# Only listen for connections from the local machine.” with an #, and add some new lines, like this:

# Only listen for connections from the local machine.
#Listen localhost:631
#CHANGED TO LISTEN TO LOCAL LAN
Port 631
# Restrict access to the server...
<Location />
  Order allow,deny
  Allow @Local
</Location>
 
# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow @Local
</Location>
 
# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow @Local
</Location>

Leave the other lines as they are.

  • This will allow access to the CUPS web interface from other machines than your Raspberry Pi itself (on the local network)
  • We advise you to change the default “raspberry” password for the user “pi” just in case …
  • You can change the port from 631 to something else, but be sure to replace it in the instructions below!

Restart the CUPS service

service cups restart
  • This will restart the CUPS service and reload it’s configuration files

Add the user pi to the lpadmin group

This is necessary to allow you to administrate the printers through the web interface as user pi, later on:

adduser pi lpadmin

AirPrint will have to be enabled after you have added the printers.

 

Add printer(s)

CUPS actually has a very nice web-interface. It apparently has been purchased by Apple in 2007, and is being supported by that huge company and the original developer, Michael Sweet. Maybe that is one reason why it really works quite effortlessly. But, let’s begin:

Open your favorite browser, and enter “https://” + your Raspberry Pi’s IP address + “:” + the port (631 as default).

For example: https://192.168.1.11:631/

CUPS Admin interface

Your browser will most definitely warn you about a security certificate problem. Please ignore it, and continue (or do you sign certificates for your local machines?)

CUPS-interface-raspberry-pi

Hint: CUPS will show up to you in the language your browser indicates to it. Even the directive “DefaultLanguage en” in the configuration file will NOT change that. In other words, to change the language of the CUPS web interface, change your browser default language setting.

Modify CUPS Settings

Click on the Administration Tab, and check “Share printers connected to this system”. Click on “Change Settings”.

cups-administration-tab

At this point you will probably be asked to enter your credentials. If you have added the user pi to the printer management group lpadmin, as per instructions above, you can enter it’s credentials now:

credentials-required

The CUPS server is being restarted.

Connect Printer to CUPS

You can add network printers, or USB printers to CUPS.

Before continuing with the instructions, please ensure that your printer is connected to the network or via USB to the Raspberry Pi , and powered on. You do not need to restart your Raspberry – you can simply plug in your printer right now.

Add a new printer to CUPS

If you have a USB printer, click on “Find New Printers” on the Administration tab (this is called “Verfügbare Drucker auflisten” in German)

cups-find-new-printers

CUPS will take a while – and it should list all printers which it has recognized.

add-kyocera-fs3900dn-cups

Simply add the printer, in this example my trusty Kyocera FS-3900DN (I will only buy Kyocera Laser printers from now on Winking smile). My DYMO LabelWriter 450 was also recognized “out-of-the-box”.

Now simply follow the dialogues and enter sensible values:

add-printer-step-2-example

 

cups-add-printer-iii

(Note: the connection line in the screenshot will say something like “usb://…” for USB printers).

Select your Make and your Model here. A lot of printers are listed. If you don’t find yours, try to find a PPD file for it on the web: A PPD File is a “PostScript Printer Description”” File – it describes fonts, paper sizes, resolutions and other capabilites that are standard for a particular Postscript printer.

Now you will be presented with a dialogue which will have different default options to set up, according to your printer.

Here’s the one for the Kyocera FS-3900DN, for example:

kyocera-fs-3900dn-cups-default-options

Please note: these are default options. If, for instance, the paper sizes your printer supports are not listed here (as is the case for my DYMO LabelWriter 450), simply select the next “matching” one, and set it up under Windows / your Mac correctly.

Now your printer is set up, and you can continue:

Print test page

The CUPS menu “Printers” will list the available printers. By clicking on a particular printer, you can administrate it. For instance, you can print a test page from the Maintenance drop down menu:

cups-test-job

CUPS will show you the progress of the print job.

Adding network printers to CUPS

If you have a network printer, we recommend to use the “Add Printer” button instead, and setting up the printer manually.

appsocket

The CUPS manual recommends to use “HP JetDirect” as it is the most reliable protocol. This works with my Kyocera FS-3900DN.

cups-socket

In the next screen, enter your printer’s IP address, followed by the port (i.e. socket://192.168.1.21:9100 ). There are options to set up secure (encrypted) printing, but this is beyond the scope of this article.

Now you can continue as described above.

Set up AirPrint

In GitHub, there is a script which creates the AirPrint service. In the German article this one translates and elaborates, it is recommended to put it into /opt/AirPrint.

As user root (sudo su):

mkdir /opt/AirPrint
cd /opt/AirPrint
wget -O airprint-generate.py --no-check-certificate https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py
chmod +x airprint-generate.py
./airprint-generate.py -d /etc/avahi/services
service cups restart
service avahi-daemon restart

This will:

  • Create a new directory “/opt/AirPrint”, change into it
  • Download the airprint-generate.py script
  • make it executable
  • execute it, and modify the configuration files in the directory /etc/avahi/services (add an XML description of the new printer service)
  • restart the CUPS and avahi services

If the ./airprint-generate.py command yields an error, like “image/urf is not in mime types, [PRINTER_NAME] may not be available on ios6 (see https://github.com/tjfontaine/airprint-generate/issues/5)”, please refer to the solution in the German article (there is always Google Translate)

The printers should be available now.

 

Install printer on Windows

Open “Devices and Printers”. Click “Add a printer”. Select “Add a network, wireless or Bluetooth printer”.

image

Select “The printer that I want isn’t listed”

image 

image

Select “Select a shared printer by name”, and enter http:// + Raspberry Pi IP + :631 + /printers/ + your printer’s name (called “Queue Name” in CUPS).

For example: http://192.168.1.11:631/printers/kyo-3900

Again, this could probably be changed for encryption – but is outside the scope of this beginner’s article.

Click “Next”, and continue to install the driver. If you can’t select it from the list, try Windows Update (be patient). If that does not work, try to locate the driver on the vendor’s homepage. I had to do the latter for the DYMO LabelWriter 450.

Remember to set up sensible default settings for your new network printer. These settings will override the settings you set on CUPS – thus you CAN actually print to page formats CUPS does not know yet.

 

Add printer to Apple Mac

This Apple KB article should help you to set up your printer on your Mac. Unfortunately there’s no Mac here, when we have access to one, we will test it.

 

 

Problem solving

Can’t find a network printer

Try to add it manually, by using it’s IP address and the information we have given you in this article. If it still does not work, try changing your printer LAN server settings.

Well, what about SAMBA?

CUPS printers can be shared through SAMBA. This is additional configuration overhead, but may add the possibility for Windows machines to automatically download drivers from the Raspberry Pi. This is beyond the scope of this article.

References

Feb 062013
 

Today we have received our shipment of model A Raspberrys – and of course we tried them with the TEK-BERRY case:

Raspberry-Pi-Model-A-im-TEKO-TEKBERRY-case

(Modell A in TEK-BERRY Gehäuse)

There will be rubber plugs available for the LAN port and the second USB port which are not present on the model A – but you can already use the case with it – it’s a solid fit Smile

In fact, we are going to offer a cased version very soon!

As a bonus, here’s a photo of PiFace along with our case:

PiFace-im-pi3g-Raspberry

 

You can buy both Model A and the PiFace Digital from our store, starting right now!

Dec 042012
 

image

Motivation

Der Kyocera SB-4e ist ein TCP/IP Printserver für Kyocera Drucker, z.B. unseren FS-1700+. Wenn man ihn gebraucht gekauft hat, sind diese Daten oft schon so konfiguriert, dass man an den Printserver nicht herankommt, und ihn nicht administrieren / diese Daten ändern kann.

Aus dem Controlpanel des Druckers (Tastenbedienfeld) habe ich keine direkte Möglichkeit gefunden, diese Daten neu einzustellen.

Aber zum Glück gibt es ja dafür das Raspberry Pi!

Idee

  • Raspberry Pi wird über LAN an den Drucker angeschlossen. (Dafür kann man auch ein normales Patch-Kabel nehmen, da das Raspberry Pi die Pins automatisch umschalten kann = auto-MDI).
  • Über WiFi wird das Pi an das lokale Netzwerk angebunden
  • Über NGINX im reverse proxy Modus ermöglicht man den Zugriff auf das Web Control Panel des Printers

Dass es funktioniert zeigt der obere Screenshot (man beachte die IP Adressen!).

pi3g-raspberry-pi-helping-kyocera-printserver

Im Screenshot zu sehen: Kyocera FS-1700+ von hinten mit Printserver-Einheit SB-4e (oder auch bekannt als IC59-ETHER-KYO2 – hergestellt von der Firma SEH.), Raspberry Pi, TP-LINK W-LAN Adapter mit Booster-Antenne, und unser spezielles Flachkabel – mit dem man LAN im häuslichen Bereich unauffälliger verlegen kann.

Alle Produkte (bis auf den Drucker und den darin verbauten Printserver) werden demnächst bei uns im Shop erhältlich sein. Alle sind natürlich, wie alle Produkte im Shop, 100 % mit dem Raspberry Pi kompatibel.

Anleitung

(Bemerkung: man kann den Printserver SB-4e einfach resetten, siehe weiter unten im Text – er geht dann in den DHCP Modus. Aber natürlich bringt man sich damit um ein wenig Bastelspaß mit dem Pi!)

Das Raspberry Pi muss sowohl in das bereits bestehende Funknetzwerk angebunden werden, als auch über den LAN Port mit dem Printserver kommunizieren. Dazu müssen (bei WPA Verschlüsselung) die Dateien wie folgt angelegt sein:

/etc/network/interfaces

auto lo

iface lo inet loopback
#iface eth0 inet dhcp
iface eth0 inet static
        address 192.168.192.124
        netmask 255.255.255.192
        gateway 192.168.192.065

allow-hotplug wlan0
#iface wlan0 inet manual
iface wlan0 inet dhcp
wpa-conf /etc/wpa.conf

#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Erläuterung:

  • Das eth0 (der LAN Port) wird statisch so konfiguriert, dass es zu den Druckerdaten passt
  • Diese Drucker(printserver)daten kann man sich ausgeben lassen, indem man bei eingeschaltetem Drucker kurz auf den Statusknopf drückt.
  • Die Adresse muss dabei verändert werden (z.b. -1)
  • Die Netmask bleibt gleich, wie die des Printservers
  • Gateway kann auch gleich bleiben
  • Das Funknetzwerk wird aus der neu anzulegenden Datei /etc/wpa.conf heraus eingestellt

/etc/wpa.conf

network={
        ssid=”Netz_SSID”
        key_mgmt=WPA-PSK
        psk=”Ihr_schluessel”
}

Hier müssen Sie die Netz_SSID durch Ihren Netzwerknamen, die SSID, in Anführungszeichen ersetzen. Und bei psk Ihren Netzwerkschlüssel, ebenfalls in Anführungszeichen, eintragen.

Nach einem Netzwerk / Raspberry Pi Neustart sollte jetzt die Verbindung mit dem Drucker möglich sein, bspw. kann man ihn anpingen

ping 192.168.192.125

Man kann auch, wenn man das Paket Lynx installiert (aptitude install lynx als root) direkt die IP des Druckers als Adresse unter der Konsole ansurfen. Mit dem Raspberry Pi ist über den HDMI Ausgang selbstverständlich auch das “grafische” Nutzen eines normalen Webbrowsers (Midori) möglich.

Doch was tun, wenn der Monitor woanders steht? X-11 forwarding, ODER: reverse proxying des Webservers des Printservers. Enter NGINX:

NGINX

NGINX ist eigentlich eine gute Alternative zu Apache, vor allem wenn es um Performance und geringen Ressourcenverbrauch geht – es lohnt sich sich damit vertraut zu machen. Neben einem reinen Webserver kann NGINX jedoch auch deutlich mehr. Wir nutzen das Reverse Proxying Feature, das einem Webbrowser “vorgaukelt”, dass er direkt mit der Endmaschine verbunden ist, aber eigentlich die Daten selbst wiederum von dieser Maschine holt und sie dann an den Webbrowser weiterleitet. Dieses Reverse Proxying ist eine sehr interessante Technologie für Load Balancing, Web Acceleration, u.v.m, wir haben uns schon intensiv damit auseinandergesetzt, und es werden bestimmt weitere Artikel in diese Richtung folgen.

Doch zurück zu unserer Konfiguration. Installation von nginx mittels:

aptitude install nginx

Es müssen nun zwei Dateien angelegt werden:

/etc/nginx/conf.d/proxy.conf

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;

proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;

proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

/etc/nginx/sites-enabled/raspberry.pi.conf

server {
listen   80 default;
server_name  raspberry.pi;

access_log  /var/log/nginx/raspberry.pi.access.log;

location / {
proxy_pass http://192.168.192.125/;
proxy_redirect default;
sub_filter      http://192.168.192.125/http://192.168.1.151/’;
sub_filter_once off;
}
}

In der zweiten Datei passiert die Magie. Die Direktive proxy_pass sagt, dass alle Zugriffe für die Location / und Unterverzeichnisse / Dateien an den Server der unter http://192.168.192.125 erreichbar ist, weitergeleitet werden sollen, um das Resultat dann wieder zurückzuschicken.

sub_filter dient hier dazu, das Webinterface des Printservers umzuschreiben: Leider wurde hier mit vollen URLs mit fest verdrahteten IPs im Link gearbeitet, so dass Klicks im Webinterface zu “Server nicht erreichbar”-Fehlern führen.

Es ist klar, warum – diese Adresse kann nur das Raspberry Pi erreichen, und es ist dem “normalen” Netzwerk nicht bekannt, dass das Pi eine Route zu dieser Adresse kennt. Der Printserver geht aber davon aus, dass er ganz normal mit dieser Adresse angesprochen werden kann …

sub_filter kann beliebige Textsnippets suchen und ersetzen. Die zweite Direktive, sub_filter_once off, dient dazu ALLE Vorkommen dieses Textsnippets in der ausgelieferten Seite (technisch: dem Response Body) zu ersetzen.

Mittels netstat -tulpn kann man jetzt verifizieren, dass NGINX läuft und auf dem Port 80 gebunden hat:

image

Durch Zugriff auf die IP des Raspberry Pi sollte jetzt automatisch der Zugriff auf den Printserver (im reverse proxying Verfahren) möglich sein.

 

Passwort des Druckers neu setzen (Reset des Druckservers SB-4e)

image

Nötig, falls auf dem Druckserver ein Passwort vergeben wurde.

Auf der Seite 194 des folgenden Manuals wird der Prozess beschrieben

Im Photo ist der schwarze Status-Knopf mit einer weißen Pfeilspitze markiert:

pi3g-closeup-printserver

Diese Vorgehensweise hat bei mir funktioniert:

  • Drucker ausschalten
  • Netzwerkkabel aus dem Drucker ausstecken
  • Status Knopf (einziger Knopf am Druckserver) drücken
  • Drucker einschalten, auf Lämpchen am Printserver achten
  • Ativity und Status LED Lämpchen blinken gleichzeitig -> Knopf loslassen (nach 5 x Blinken kommt man sonst in den “BIOS” Modus)
  • ca. 2 sec warten, die LEDs blinken abwechselnd
  • Knopf nochmal drücken und halten, bis nur noch die Activity LED blinkt.
  • Knopf loslassen
  • Drucker ausschalten
  • Drucker einschalten
  • Status Knopf kurz drücken um ein Printout der Einstellungen zu kriegen -> Druckserver FS-4e sollte jetzt resetted sein.

Nach dem Reset geht der Printserver übrigens vollautomatisch in den DHCP Modus.

ansonsten hilft:

Kyocera Hotline (0180 / 5 177 377; Mo-Fr 8:30 – 18:00; 0,12 cent/Min.).

Für abgelaufene Garantie hat Kyocera die kostenpflichtige Nummer 09001 5962372 (0,99 Ct / min)

Quelle: narkive.com, Detlef Meinke (danke!)

Optimization WordPress Plugins & Solutions by W3 EDGE