DIR-320 z DD-WRT i konfiguracja drukarki na USB

Kilka słów wstępu znajdziecie we wpisie D-Link DIR-320 po mojemu, natomiast sposób na wgranie oprogramowania DD-WRT do niniejszego routera tutaj..

Poniżej opiszę moje przygody z podłączeniem drukarki USB do routera DIR-320 w celu udostępnienia możliwości drukowania na niej z poziomu sieci LAN. Wszystko odbywa się z wykorzystaniem firmware dd-wrt.v24\_usb\_generic.bin w rekomendowanej wersji deweloperskiej v24 preSP2 (Build 13064).

Hm… korzystając z rad wujka Google możecie w pierwszej kolejności natknąć się na stronę Technicznego. Wszystko było by fajnie, gdyby nie to, że korzystam z innego firmware, które ma nieco inne komendy, oraz faktu, iż sama komenda ipkg update nie działa za dobrze. Dodatkowo, wystąpiły jeszcze inne “ptaszki”, które zmusiły mnie do opracowania własnego sposobu na ustawienie drukarki USB w sieci.

A więc, chcesz żeby twoja drukarka na USB działała w sieci… hyhh?

Standardowo zastosowane oprogramowanie DD-WRT posiada wsparcie dla USB, w tym dla obsługi drukarki czy pamięci masowych, a nawet w wersji USB 2.0. Hyh… ale co z tego, skoro w samym routerze nie ma oprogramowania do wykorzystania routera jako printserwer - czyli przekazania zleconych zadań do routera na odpowiedni port drukarki podłączonej na USB. W tym przypadku musimy wykorzystać dodatkowy pakiet.

Ale od początku…

W pierwszej kolejności udajemy się do panelu zarządzania przez stronę www - Web (http://192.168.1.1).

Dla naszej wygody (jeżeli jeszcze tego nie zrobiliśmy), w Sekcji Administration, zmieniamy język “english - Angielski” na “polish - Polski”, po czym zapisujemy zmianę pierwszym po lewej przyciskiem na samym dole strony.

Dodatkowo, abyśmy mieli gdzie wrzucić dodatkowy program do routera, potrzebne jest nam miejsce oraz sposób na dokonanie tego.

W zakładce Administracja włączamy telnet (Wlaczone) oraz JFFS2 (Wlaczone). Dodatkowo możemy Oczyścić JFFS2 dla pewności, że żadne śmieci się tam nie znajdują. Klikamy Zapisz ustawienia a następnie Zastosuj, po czym czekamy na reboot naszego routera. Dalej przechodzimy do zakładki Service, oraz pod-zakładki USB. Przestawiamy na “WlaczoneCore USB Support, po czym w opcjach, które się pojawią USB 2.0 Support (jeżeli mamy starszą drukarkę 1.1, wówczas wybieramy odpowiednią opcję) oraz USB Printer Support.

usb support

Ponownie - Klikamy Zapisz ustawienia a następnie Zastosuj, po czym czekamy na reboot naszego routera.

Tyle jeżeli chodzi z zarządzania przez przeglądarkę, pora na telnet.

Dla systemu Linux, wystarczy użyć konsoli i połączyć się poleceniem telnet z portem 192.168.1.1

Dla użytkowników Windows - można użyć wbudowanego klienta w Windows, choć osobiście polecam Putty do tego celu.

Po połączeniu się przez telnet, podajemy nazwę użytkownika i hasło dostępowe do routera, które ustawiliśmy na początku wgrywania DD-WRT.

Rozpoczniemy od wgrania oprogramowania, służącego do otworzenia portu 9100, służącego jako printserwer dla drukarki podłączonej do portu USB.

Jako, że polecenie ipkg update, a co za tym idzie również ipkg install, nie działają poprawnie (również ze względu na ograniczoną, wolną przestrzeń w pamięci routera), należy pobrać oprogramowanie p910nd - bo to ono posłuży jako printserver; do naszego routera innym sposobem. Wykonujemy poniższe polecenia.

Przechodzimy do katalogu tymczasowego:

cd /tmp

Pobieramy program p910nd oraz instalujemy

wget http://downloads.openwrt.org/backports/rc5/p910nd\_0.7-2\_mipsel.ipk ipkg -d root install p910nd\_0.7-2\_mipsel.ipk

ps. Jeżeli wystąpią błędy takie jak poniżej, nie przejmuj się tym :)

ERROR: File not found: /jffs/usr/lib/ipkg/lists/whiterussian You probably want to run \`ipkg update'
ERROR: File not found: /jffs/usr/lib/ipkg/lists/non-free You probably want to run \`ipkg update'
ERROR: File not found: /jffs/usr/lib/ipkg/lists/backports You probably want to run \`ipkg update'

Takim to sposobem mamy zainstalowany program w naszej przestrzeni JFFS2 (/jffs) w routerze, ale to nie wszystko. Pakiet, który zainstalowaliśmy, jest przystosowany do instalacji w domyślnej lokalizacji środowiska Linux, czyli /etc. W związku z tym wszystkie skrypty startowe odwoływać się będą do /etc, a my zainstalowaliśmy do /jffs. W związku z tym należy dokonać modyfikacji jednej linii w pliku startowym, programu który zainstalowaliśmy.

cd /jffs/etc/init.d vi p910nd

Odszukujemy linijkę DEFAULT=/etc/init.d/p910nd i dodajemy /jffs.

Całość wygląda tak:

DEFAULT=/jffs/etc/init.d/p910nd

Parę uwag dotyczących edycji. Aby rozpocząć możliwość dodania linii wciskamy klawisz a, lub Insert. Po wprowadzeniu zmiany, musimy zmusić system aby zapisał wprowadzone zmiany (co nie jest takie oczywiste) i opuścił edytor. Dokonujemy tego wciskając klawisz Esc oraz wpisując :wq! potwierdzając klawiszem Enter.

Aby sprawdzić, czy zmiana rzeczywiście się zapisała, wydajemy poniższe polecenie i sprawdzamy czy zawartość pliku jest taka, jaka oczekiwaliśmy.

more p910nd

Teraz pora na test. Podłączamy drukarkę do portu USB i włączamy. Uruchamiamy zainstalowany program aby włączyć komunikację w sieci.

/bin/sh /jffs/etc/init.d/p910nd start

Sprawdzamy komendą ps, czy występuje tam uruchomiony program p910nd.

Przykład:

744 root       364 S    p9100d -b -f /dev/usb/lp0 0

Następnie netstat -an, czy otworzona jest komunikacja na porcie 9100:

tcp        0      0 0.0.0.0:9100            0.0.0.0:\*               LISTEN

Na chwilę obecną, przeskoczcie na sam koniec wpisu, aby dowiedzieć się, jak zainstalować drukarkę odpowiednio w systemie Windows i Linux.

Po zainstalowaniu, puszczamy stronę testową i sprawdzamy czy wyszła. Jeżeli wszystko zrobiliśmy poprawnie, strona powinna się wydrukować.

Teraz stajemy przed innym problemem. Po wyłączeniu drukarki, lub też zresetowaniu routera, nasz printserwer nie startuje, a dodanie powyższej komendy startu np. do poleceń autostartu z poziomu Web, nie wiele daje. W związku z tym, należy posłużyć się sprytnym skryptem, zastosowanym przy podobnej konfiguracji drukarki dla urządzenia WL-520gU, a mianowicie watchprinter.

Skrypt pobieramy do katalogu /jffs komendą:

wget http://wl520gu.googlepages.com/watchprinter

Lub też, tworzymy pusty plik:

touch watchprinter

A następnie wstawiamy do niego, korzystając z edycji pliku jak powyżej (vi, a lub Insert, Esc i :wq!) poniższą zawartość (przepisując lub przyklejając):

#!/bin/sh
if \[ -z "pidof p910nd\`" \]; then \[ -e /dev/usb/lp0 \] &&  /jffs/usr/sbin/p910nd -b -f /dev/usb/lp0 0 else \[ -e /dev/usb/lp0 \] || killall p910nd fi

Aby skrypt działał, należy nadać mu prawa do uruchamiania komendą chmod +x watchprinter.

Skrypt jest pewnego rodzaju pętlą. Jeżeli wykryje włączoną i podłączoną drukarkę, włączy nasz program robiący za printserwer. Jeżeli będzie odwrotnie - tzn. wyłączymy drukarkę - wyłączy go.

Ale, aby działał on tak, jak należy - trzeba go wrzucić do Crona (harmonogramu), aby nawet po ponownym uruchomieniu routera, skrypt działał.

Mała adnotacja tutaj - okres pomiędzy włączeniem a wyłączeniem programu za pomocą skryptu, będącego w Cronie, trwa ok. 1 minuty, więc po włączeniu drukarki, do momentu jego zadziałania, tyle może minąć, aby zaczęła ona działać.

ps. W telnecie skończyliśmy, więc możemy z niego wyjść (exit), oraz przejść do zarządzania przez stronę Web.

Powyższy skrypt w postaci zadania harmonogramu wrzucamy do Crona, przechodząc do zakładki Administracja. Na stronie wyszukujemy pozycję Cron (upewniamy się że jest stan “Wlaczony”), oraz w polu “Additional Cron Jobs” dodajemy poniższą linijkę.

* * * * * /bin/sh /jffs/watchprinter

Całość powinna wyglądać tak: cron

Klikamy (na dole strony) Zapisz ustawienia a następnie Zastosuj, po czym czekamy na reboot naszego routera.

Teraz wszystko powinno działać - jeżeli nie, należy prześledzić, czy na ostatnim etapie, włącza się za pomocą skryptu watchprinter, nasz program p910nd - w telnecie poleceniem ps.

Instalacja drukarki w systemie Linux i Windows.

W systemie Ubuntu Linux: System > Administracja > Drukowanie, a następnie dodajemy drukarkę sieciową AppSocket/HP JetDirect.

printer ubuntu

Dalej pozostaje instalacja urządzenia, wybierając stosowne sterowniki - tego już nie będę opisywać, bo powinniście obie dać radę.

W systemie Windows (przykład z Windows 7): Start > Panel Sterowania > Sprzęt i Dźwięk … Wyświetl urządzenia i drukarki

Następnie wybieramy Dodaj drukarkę i wskazujemy opcję Dodaj drukarkę lokalną, gdzie w następnym kroku wybieramy Utworzenie nowego portu typu Standard TCP/IP:

win print port

W następnym kroku wprowadzamy adres IP naszego routera (domyślnie 192.168.1.1):

win print host

W kolejnych krokach wybieramy odpowiednią drukarkę i sterowniki, oraz instalujemy.

Jak już nasza drukarka będzie zainstalowana, należy upewnić się, czy jest włączona obsługa dwukierunkowa. Bez tego, nie będzie można drukować.

Na liście drukarek, klikamy 2x na naszą, nowo zainstalowaną. W otworzonym oknie z menu Drukarka wybieramy > Właściwości. W zakładce Porty, sprawdzamy, czy jest “ptaszek” przy opcji Włącz obsługę dwukierunkową.

win print double

Uwaga: Powyższy krok czasami należy powtórzyć, gdyż Windows z niewiadomych przyczyn, jak nie widzi drukarki w sieci, wyłączy obsługę dwukierunkową.

I to by było na tyle… powodzenia!

Dołącz do dyskusji