LPD/LPR w Linuksie i udostępnianie drukarki Windowsowym klientom
30/01/2010, 23:00:40 | 5 komentarzy | Systemy operacyjne
Ostatnio, stając się właścicielem - znanego dobrze joggerowiczom - thin clienta HP T5520, zapragnąłem coś wydrukować. Ponieważ nie znam się zbytnio na Linuksie, a osoba która przygotowała mi lekką dystrybucję Gentoo na ten sprzęt (pozdrawiam groszka) najwyraźniej drukarki nie posiada i nie mogła mi pomóc zbytnio z tym zagadnieniem, spróbowałem wymyśleć coś samu. Pominę tutaj zawiłości akurat tej "groszkowej" wersji Gentoo (jak chrootowanie się do osobnego środowiska do kompilacji i tak dalej) oraz samego sprzętu jakim jest T5520 (może go kiedyś tutaj również opiszę), i skupie się na samej konfiguracji LPD. Plusem LPD jest to że serwer udostępniający drukarkę nie musi mieć żadnych sterowników do niej a jego rola polega na wysyłaniu do urządzenia przez odpowiedni port odpowiednio spreparowanych danych odebranych od klientów.
Po skompilowaniu za pomocą emerge lprng potrzebnych binarek (lub przy użyciu innego systemu pakietów w zależności od dystrybucji GNU/Linuksa), otrzymujemy także przykładowe pliki konfiguracyjne. Cała konfiguracja zawarta jest w katalogu /etc/lprng/ Generalnie możemy zostawić pliki lpd.perms i lpd.conf w spokoju, jednak ja do conf dopisałem opcję Longnumber wg. poradnika dla FreeBSD. Następnym krokiem jest konfiguracja pliku printcap. Usuwamy wszystko co się tam znajduje (lub komentujemy za pomocą "#" na początku linii) i dodajemy np. coś takiego:
lp|drukarka:\
W pierwszej linijce mamy nazwę portu LPR ("lp") oraz alias ("drukarka") który będzie np. wyświetalny w monitorze kolejki lpq, druga linijka to miejsce gdzie będą przechowywanie tymczasowe pliki drukowania (pamiętajmy żeby nadać temu katalogowi odpowiednie uprawnienia). Ostatnia linijka to nazwa urządzenia drukującego, która należy dostosować według potrzeb, również tutaj pamiętajmy o odpowiednich prawach dostępu do urządzenia blokowego. Uruchamiamy demona za pomocą polecenia lpd
:sd=/mnt/storage/lpr:\
:sh:\
:lp=/dev/usblp0:
Po konfiguracji, instalujemy po stronie klienta Windowsowego dodatkowe usługi ("dodaj usuń programy" i "funkcje systemu windows" albo jakaś podobna nazwa), w przypadku XP są to "opcjonalne komponenty drukowania i udostępniania plików" oraz "komponenty zarządzania i monitorowania sieci" czy jakoś tam (przepraszam ale piszę z pamięci), w przypadku Windows 7:
Po wykonaniu tego polecenia, usuwamy naszą lokalną drukarkę (jeśli ją mamy) i dodajemy nową drukarkę (uwaga) lokalną, natomiast w opcji wyboru portu wybieramy port LPR, i wpisujemy w pierwszym polu adres naszego serwera (np. 192.168.6.66) oraz nazwę portu LPR (np. lp), później wybieramy odpowiednie sterowniki (opcja "z dysku" i wskazujemy). I teraz uwaga techniczna, zwykła zmiana i dodanie nowego portu dla istniejącej już drukarki, nie działa zarówno pod Windows 7 jak i XP, gdyż urządzenie będzie widziane przez system cały czas jako "offline" (przynajmniej w przypadku gdy wcześniej ta drukarka była do nas podłączona via USB), dlatego najpierw należy usunąć taką drukarkę, a później dodać ją jeszcze raz, tutaj już nie musimy korzystać z opcji "z dysku" gdyż system w liście dostępnych sterowników będzie miał już naszą drukarkę, którą oczywiście wybieramy.
Tadam, wszystko powinno działać. Jeśli nie działa, to pytania raczej nie do mnie, bo jak mówiłem ledwo się nie znam na Linuksie, no ale z zachwytu że działa notkę napisać postanowiłem ;).
Jeśli coś nie działa pomocne jest także utworzenie pliku testowego, za pomocą opcji drukuj do pliku (bądź wybrania w opcjach drukarki portu FILE) jeśli mamy zainstalowany odpowiedni sterownik na naszym komputerze z Windows, i później ten plik kopiujemy do Linuksa i wydajemy polecenie w stylucp /mnt/gdzie-ten-plik/ /dev/urządzeniedrukarkowe. U mnie jeszcze musiałem zrobić z niewiadomych względów zrobić chmod 666 /dev/null gdyż w innym przypadku demon nie startował. Do monitorowania stanu kolejki drukowania można użyć polecenia lpq.
Bibliografia, czyli co mi pomogło i z czego ten opis jest częściowo "ukradziony" (oba opisy do FreeBSD):
- [howto] 10 steps to setup FreeNAS as a Printer-Server ;)
- FreeNAS as a Print Server (tutaj polecam ostatnie strony gdzie jest ładny opis ze screenami jak ustawić klienta w XP, niestety trzeba skorzystać z bugmenot zeby obejrzeć te obrazki)
Errata (13 marca 2010): W przypadku dodawania drukarki jako lokalnej jak podałem powyżej, po jakimś czasie automagicznie zrobi się offline, lepiej jest jednak dodać drukarkę jako sieciową i tam uzupełnić odpowiednie dane portu LPD, procedura trochę się różni, ale nie jest specjalnie trudniejsza.
Errata (2 kwietnia 2010): Należy jeszcze dopisać do /etc/hosts hosta odpowiadającego naszemu hostname wraz z adresem lokalnym (127.0.0.1) u mnie hostname to "brainslug" więc plik wygląda tak:
127.0.0.1 localhost
127.0.0.1 brainslug
::1 localhost
Errata (29 maja 2010): Włączamy, w opcjach portu, opcję: "Włącz zliczanie danych LPD" - bez tego przynajmniej w moim wypadku, nic nie działa.
a nie prościej puścić po IP do drukarki?
np. tak:? http://www.kraszewscy.net/Pod%C5%82%C4%85czenie_Windows_do_drukarki_udost%C4%99pnionej_przez_CUPS
ja mam w domu tak zrobione, i nie mogę narzekać, żona drukuje od siebie z XP na tak podłączonej drukarce a ja u siebie to już z CUPSa (skoro ja mam Linuxa)
Do tego trzeba CUPSa, który zajmuje dużo więcej niż LPD
zdziwiony (#) 01/02/2010 - 14:45:05
Nie wiedzialem, ze linux ma mozliwosc monitorowania dzialan Ligi Polskich Rodzin...
Grafii, dzięki za ten link! Już miałem się użerać z instrukcją peceta, ale pokazałeś mi, że można to zrobić łatwiej! :)
Ja wiem czy łatwiej? Jak się ma 3 mb do wykorzystania, to napewno bawienie się z CUPSem sensu nie ma.