Udostępnianie drukarki USB w sieci
Ostatnia zmiana: 2016-02-20 17:29

Jeżeli router posiada port USB można z łatwością przemienić go w serwer wydruku, tzw. printserver. Wykorzystany program (p910nd) jest prostym serwisem odbierającym polecenia pochodzące z sieci i wysyłającym to na USB. Nie zarządza on wydrukiem, nie pamięta stron, nie modyfikuje stron wydruku ani nie interpretuje poleceń/kodu wydruku. Po prostu przesyła to co odebrał do drukarki. Innym serwerem wydruku jest CUPS. W przypadku Gargoyle wystarczy doinstalować dodatek plugin-gargoyle-usb-printer, dla LuCI - luci-app-p910nd. Jeżeli nie mamy środowiska graficznego lub chcemy skonfigurować drukarkę ręcznie można posłużyć się poniższym poradnikiem.

Instalacja

Należy wcześniej podłączyć drukarkę do portu USB rutera. Niezbędne są moduły do obsługi USB oraz wspomniany program:


    # opkg update
    # opkg install kmod-usb-core kmod-usb2 kmod-usb-printer p910nd

W zależności od posiadanego routera może być także konieczne doinstalowanie pakietu kmod-usb-uhci lub kmod-usb-ohci.

Konfiguracja

Znajduje się standardowo w w pliku /etc/config/p910nd. Włączenie demona to wydanie poleceń:


    # uci set p910nd.@p910nd[0].device=/dev/usb/lp0
    # uci set p910nd.@p910nd[0].port=0
    # uci set p910nd.@p910nd[0].enabled=1
    # uci commit p910nd
    # /etc/init.d/p910nd enable
    # /etc/init.d/p910nd start

Przy domyślnych ustawieniach portem drukarki jest 9100 (9100 + numer określony w port), protokół - raw. W zależności od numeru używanego kernela, urządzenie może nazywać się /dev/lp0 - należy to sprawdzić i ustawić właściwą nazwę.

Konfiguracja klienta Windows/Linux/MacOS

Opis dostępny jest pod adresem https://wiki.openwrt.org/doc/howto/p910nd.server#configuration_part_2_the_clients (EN)

Zakończenie

Nie wszystkie drukarki będą chciały współpracować w ten sposób. Niektóre modele odmawiają współpracy i nie ma niestety na to rozwiązania (poza zainstalowaniem innego serwera wydruku, np. cupsa). Jedyna możliwość ew. modyfikacji to wyłączenie dwukierunkowości transmisji:


    # uci set p910nd.@p910nd[0].bidirectional=0
    # uci commit p910nd
    # /etc/init.d/p910nd restart


Niektóre drukarki (np. LaserJet HP1020) wymagają załadowania firmware przed rozpoczęciem drukowania, inaczej będą odmawiały drukowania. Aby to zrobić, należy utworzyć plik np. /etc/hotplug.d/usb/20-printer, np. o następującej zawartości:


    #!/bin/sh
    FIRMWARE="/usr/lib/sihp1020.dl"

    DEVICE=/dev/usb/lp0

    if [ "$ACTION" = "add" ]; then
        for i in $(seq 30); do
            if [ -c $DEVICE ]; then
                if [ ! -e /tmp/wyslane ]; then
                    cat $FIRMWARE > $DEVICE
                    touch /tmp/wyslane
                    logger Wyslano firmware do drukarki
                    exit
                fi
            fi
            sleep 1
        done
    fi

Plik /usr/lib/ssihp1020.dl jest to firmware dla określonego typu drukarki. Dla niektórych można je znaleźć np. w http://oleg.wl500g.info/hplj/ i należy go umieścić w podanym katalogu (/usr/lib). Zadaniem skryptu jest wykrycie pojawienia się drukarki i wysłanie do niej wskazanego firmware.