Jun 172013
 

Intro

wifi_logo (1)In diesem Artikel stelle ich eine Lösung vor, um  das Netzwerk an dem der Raspberry verbunden ist über einen USB WLAN Adapter für andere Computer zur Verfügung zu stellen. Der Raspberry arbeitet dabei als Brücke (bridge), und leitet einfach alle Daten die am WiFi  Adapter ankommen in das LAN weiter.

Das kann bspw. sinnvoll sein, wenn man zwei Netzwerke zu Hause betreiben möchte – ein schnelles für n-fähige Geräte, und ein langsames für b / g Geräte; Eine Isolation der Netzwerke gegeneinander findet aufgrund des bridged Modes in unserer Anleitung nicht statt – die IP Adressen der über WLAN angeschlossenen Computer z..B. werden vom  DHCP-Router vergeben, nicht vom Raspberry.

Ein weiterer Einsatzzweck ist das Einrichten von WLANs in anderen Stockwerken / entfernten Orten (z.B. im Keller?), vor allem wenn man  dem  Raspberry noch weitere Aufgaben angedeihen lassen möchte.

Der Vorteil an der bridged Lösung ist geringerer Prozessor-Overhead für den Raspberry, und geringerer Verwaltungsaufwand (IP Adressen).

Hardware-Anforderungen

Nicht alle USB WLAN Sticks unterstützen den dazu notwendigen AP Modus, bzw. die “nl80211 API”. Wir beschreiben weiter unten, wie Sie Ihren Stick überprüfen können.

cartIn unserem Shop bieten wir den Logilink WL0084B v2.0 an, der als Access Point geeignet ist.

Er basiert auf dem Ralink RT5370 Chipsatz.

 

Root-Rechte nötig

Die folgenden Kommandos sind alle als root Nutzer auszuführen (sudo su).

Installation der nötigen Pakete
aptitude install hostapd hostap-utils iw bridge-utils
  • hostapd, hostap-utils: WLAN Stick als Access Point nutzen
  • iw: Konfigurations-Programm für Funknetzwerk-Devices
  • bridge-utils: ermöglichen zwei Netzwerke miteinander zu verbinden

iw hilft festzustellen ob Ihr USB-WiFi Stick Access-Point fähig ist. Nicht alle sind es!

iw list

iw list zeigt die vorhandenen Funknetzwerk-Geräte an.

nl80211 not found

Falls hier der Fehler “nl80211 not found” auftaucht, wird eine ältere Version von hostapd benötigt. Weitere Details dazu – bspw. für den TP-Link TL-WN725N WiFi – gibt es auf dieser Seite. Der besagte TP-Link wäre bei lsusb beispielsweise folgendermaßen aufgeführt (v1):

Bus 001 Device 011: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

Sticks die die nl80211 API unterstützen

Wir benutzen im folgenden einen USB-WLAN Stick, der die nl80211 api unterstützt, d.h. dieser Fehler taucht NICHT auf, sondern man erhält mit iw list etwa folgende Ausgabe:

root@andromeda:~# iw list
Wiphy phy9
        Band 1:
( ... )
        Available Antennas: TX 0 RX 0
        Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
        software interface modes (can always be added):
                 * AP/VLAN
                 * monitor
        interface combinations are not supported
( ... )        
Device supports HT-IBSS.

Wir nutzen einen Logilink Adapter (Modell WL0084B v2.0), per lsusb wird dessen Chipsatz identifiziert als:

Bus 001 Device 021: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter

 

Konfiguration

Zunächst muss man in der /etc/init.d/hostapd den Pfad zur (noch zu erstellenden) hostapd Konfigurationsdatei einstellen. ( nano /etc/init.d/hostapd ) Finden Sie die Zeile mit DAEMON_CONF, und ergänzen Sie sie wie folgt:

DAEMON_CONF=/etc/hostapd/hostapd.conf

erstellen Sie jetzt die hostapd.conf ( nano /etc/hostapd/hostapd.conf ) und befüllen Sie sie mit dem folgenden Inhalt:

ctrl_interface=/var/run/hostapd
###############################
# Basic Config
###############################
macaddr_acl=0
auth_algs=1
# Most modern wireless drivers in the kernel need driver=nl80211
driver=nl80211
##########################
# Local configuration...
##########################
interface=wlan0
bridge=br0
hw_mode=g
channel=1
ssid=www.pi3g.com
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=BITTE___AENDERN
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Kurze Diskussion der Datei /etc/hostapd/hostapd.conf

hostapd.conf ist empfindlich was Leerzeichen hinter den jeweiligen Konfigurationseinstellungen angeht – bitte vermeiden Sie diese daher.

  • driver: nl80211 bei Geräten die die nl80211 API unterstützen. Es sind auch andere (legacy-) APIs verfügbar, siehe hier
  • interface: man kann auch mehrere WiFi Adapter am Raspberry anschließen – der erste heißt wlan0
  • bridge: diese Brücke werden wir gleich noch einrichten
  • hw_mode: Verbindungsmodus. g bedeutet: g + b
    • b bedeutet: nur b
  • SSID: die SSID des Hotspots
  • wpa=3: WPA1 und WPA2 werden enabled – diese sind dem unsicheren WEP vorzuziehen
  • wpa_passphrase: das ist Ihr Netzwerkschlüssel. BITTE ÄNDERN SIE DIESEN!!

Um 802.11 n einzuschalten, muss man einen zusätzlichen Parameter “ieee80211n” auf 1 setzen. z.B. für g & n:

hw_mode=g
ieee80211n=1
 
Konfiguration der bridge

Die Bridge sorgt dafür, dass die Netzwerkpakete die die Access Point Clients über diesen senden direkt über den Ethernet Port des Raspberrys weitergeleitet werden. Wir haben die bridge-utils bereits installiert, und müssen nur noch die Einstellungen anpassen.

Editieren Sie die /etc/network/interfaces (nano etc/network/interfaces )

auto lo

iface lo inet loopback
auto br0
iface br0 inet static
        address 192.168.1.11
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        bridge-ports eth0 wlan0

Kurze Diskussion:

  • Die bridge br0  ersetzt Ihr bisheriges eth0 Interface, sie wird daher wie eth0 konfiguriert
    • hier in einer statischen Konfiguration – unser Netzwerk ist 192.168.1.*, der Router 192.168.1.1
  • bridge-ports eth0 wlan0 ist das “magische Kommando”, was wlan0 mit eth0 verknüpft
  • Das ist alles – keine weiteren Einträge (insbesondere nicht für wlan0)

Neustart

Nach einem Neustart sollte das System voll funktionsfähig sein. Sie können jetzt Clients mit Hilfe der Zugangsdaten über den Access Point verbinden.

Alternativ können Sie es auch mit folgenden Kommandos ohne Neustart versuchen:

ifdown eth0; ifup br0
service hostapd restart
DNSMASQ

In unserem Setup ist kein dnsmasq nötig – das wäre erforderlich, falls Sie keine bridge machen wollen, sondern den Clients eigene IP Adressen aus einem anderen Bereich geben wollen, z.B. aus Sicherheitsüberlegungen.

Windows – debugging, etc.

  • um die IP Adresse herauszufinden: unter Powershell: ipconfig /all
  • Es empfiehlt sich, die Funknetzwerkbelegung zu analysieren, um den Durchsatz zu optimieren. Unter Windows gibt es dazu bspw. das Tool InSSIDer. (Scheint kostenlos zu sein).

image

Dokumentation & weiterführende Links

Tools
  • InSSIDer – WiFi Analyse-Tool für Windows (auch mit Windows 8 kompatibel)
Waren
Apr 112013
 

As we have posted earlier, we own an old CanoScan LiDE 30. We are very satisfied with this scanner – but unfortunately it does not work on newer versions of Windows (e.g. Windows 7 64 bit, Windows 8) – Canon “forgot” to release updated drivers.

Raspberry Pi networked scanner sharing

A Raspberry Pi is perfect for a small, low volume server application. Today, we have put together all the pieces necessary to use it to attach the Canon scanner to our network, and scan from Windows once again.

BTW: It looks as though the Fujitsu ScanSnap 1300i might also be supported by SANE. This is the replacement scanner for the Canon flatbed scanner we bought – but it can’t scan books, for instance.

Step by step setup guide:

This guide is written for Raspbian. We have tested it with the latest Raspbian version currently available (2013-02-09).

Get the required packages:

sudo su
aptitude update
aptitude install xinetd sane-utils

xinetd is the Internet superdaemon which will start saned, the “Scanner Easy Access Now” daemon when a network connection to it’s port is opened (saned can’t do that on it’s own).

sane-utils contains the saned. (On Archlinux the package is called simply “sane”)

Raspbian automatically sets up the group saned and the user saned for you. It also adds the user saned to the group scanner.

Configure /etc/default/saned so it will start automatically (RUN=yes):

# Defaults for the saned initscript, from sane-utils

# Set to yes to start saned
RUN=yes

# Set to the user saned should run as
RUN_AS_USER=saned

Start saned, and test whether the scanner is recognized. Ideally you should do this as user saned, to see if all access rights for saned are setup correctly. Your scanner should naturally be attached to the Raspberry Pi. If it draws its power through USB, we recommend to use a powered USB hub.

root@raspberrypi:/home/pi# /etc/init.d/saned start

root@raspberrypi:/home/pi# su -s /bin/sh - saned
No directory, logging in with HOME=/

$ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 008: ID 04a9:220e Canon, Inc. CanoScan N1240U/LiDE 30
Bus 001 Device 007: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 001 Device 006: ID 046d:c31c Logitech, Inc. Keyboard K120 for Business

$ scanimage -L
device `plustek:libusb:001:008' is a Canon CanoScan N1240U/LiDE30 flatbed scanner

$ exit

root@raspberrypi:/home/pi#

I have included the # and $ prompt in this listing, so you can distinguish between commands the root user (#) issues and the saned user issues ($)

If you see your scanner here, great. If not – have a look at the documentation and further reading links we will provide at the end of this article.

The USB scanner itself is plug & play – you can attach it to the Raspberry Pi when you feel like scanning, and remove it after you have finished.

Prepare network sharing of the scanner

root@raspberrypi:/etc/xinetd.d# cat /etc/services | grep sane
sane-port       6566/tcp        sane saned      # SANE network scanner daemon

You should see the sane-port line as in the listing. If it is not in there, add it.

root@raspberrypi:/# cd /etc/xinetd.d

root@raspberrypi:/etc/xinetd.d# touch sane-daemon

root@raspberrypi:/etc/xinetd.d# which saned
/usr/sbin/saned

root@raspberrypi:/etc/xinetd.d# nano sane-daemon

This will set up the XInet configuration. Please use the following configuration for the /etc/xinetd.d/sane-daemon file:

service sane-port
            {
              socket_type = stream
              server = /usr/sbin/saned
              protocol = tcp
              user = saned
              group = saned
              wait = no
              disable = no
            }

Note that we used the output from “which saned” in the configuration above. If it is different for you – e.g. on Archlinux – adjust accordingly.

Set up saned to accept connections from your network by editing /etc/sane.d/saned.conf:

# saned.conf
# Configuration for the saned daemon

## Daemon options
# [...]
# data_portrange = 10000 - 10100


## Access list
# [...]
# The hostname matching is not case-sensitive.

#scan-client.somedomain.firm
192.168.1.0/24

#192.168.0.1
#192.168.0.1/29
#[2001:7a8:185e::42:12]
#[2001:7a8:185e::42:12]/64

# [...]

Please adjust the subnet specification 192.168.1.0/24 to your network architecture. You can also explicitly specify single IPs. If you do not edit this file, SaneTwain will hang when contacting your Raspberry Pi scanner server.

Now you can reboot the Raspberry Pi (sudo reboot), and continue to the set up on the Windows side.

Setting up Windows to access the SANE network scanner

We have tested with Windows 7 64 bit & Windows 8 64 bit.

Windows users use “TWAIN” drivers. Luckily, there is an application, which will create a bridge between TWAIN and SANE on the network. The author claims it does not work for 64 bit Windows, but it did work for us. Please report back in the comments about your success / failure stories on different Windows versions.

Download SaneTwain here.

SaneTwain Setup

image

Just enter your Raspberry Pi IP (if you do not know it, “ip addr show” will show you it’s network setup) as the hostname. Port and Username can stay the way they are. Look through the other settings, if you want to. The Mail tab, for instance, offers the possibility to set up an Evernote account you want to scan to.

Before you try to use the TWAIN driver SaneTwain offers, you should set up the hostname using the way we just described (by starting ScanImage.exe).

Scan

Now you’re set up for scanning. Use the “preview” button to acquire a preview, and the “scan” button to save the selected area to a PNG (it will be scanned with better quality, of course). The resolution can be set, also other options.

Wait until the scanner is finished with the preview and has repositioned itself, before you hit the “scan” button.

image

The TWAIN driver works for us, too. (Tested with IrfanView) – this is Windows 8 64 bit. No special tweaks were applied.

Setting up Linux to scan from the network scanner

If you have a Linux box, you can use basically any SANE Frontend to scan using the network.

You need to add the network scanner to a local SANE installation.

Edit /etc/sane.d/net.conf and add the IP of your server. You can specify multiple servers.

image

Test with scanimage –L once again, and after a while you will see your network scanner showing up.

Frontends

Try XSane. Noteworthy is also gscan2pdf which will convert scanned pages to multipage PDFs, and even OCR them for you!

Of course you should be able to scan from another Raspberry Pi on your network, or even the Internet.

simple-scan is a frontend for SANE.

Further Reading & Links

SANE

SaneTwain

How-Tos

We used the following how-tos in building this tutorial. Thanks, guys!

Optimization WordPress Plugins & Solutions by W3 EDGE