poniedziałek, 9 kwietnia 2018

Jak drukować bez sterowników – Windows 10

Bezpośrednią inspiracją do powstania tego artykułu okazał się komentarz do wpisu „Jak drukować bez sterowników?” opublikowany przez użytkownika Reprotechnika dnia 28 marca 2018 roku, w którym stwierdza on, że pod Windows 10 to nie działa.

W poprzednim wpisie pokazałem wprawdzie, że jeśli drukarka obsługiwana jest przez Windows XP, to nadal można drukować bez sterowników, nie tylko z Linuksa, ale również z systemu Windows 10. Co jednak, gdy komputer z fizycznie podłączoną drukarką pracuje pod kontrolą tego ostatniego systemu? Miałem wątpliwości, czy pod Windows 10 da się skonfigurować wirtualną drukarkę postscriptową, tak aby można było w sieci drukować z poziomu innych systemów operacyjnych nawet wówczas, gdy nie obsługują one danego modelu drukarki fizycznej.

Wprawdzie nie miałem potrzeby realizowania takiej konfiguracji na potrzeby mojej sieci domowej (drukarka w dalszym ciągu jest obsługiwana przez komputer z XP), ale problem nie dawał mi spokoju i postanowiłem sprawdzić. Dzisiaj już wiem: da się w systemie Windows 10 skonfigurować wirtualną drukarkę postscriptową i drukować na niej bez sterowników (a właściwie z wykorzystaniem sterownika PostScript, który jest dostępny praktycznie w każdym normalnym systemie), nawet jeśli ten Windows 10 jest 64-bitowy, nawet jeśli chcemy drukować z poziomu tak starego systemu jak Windows 98 czy 95 i nawet wtedy, jeśli fizyczna drukarka jest jakimś najnowszym „wynalazkiem” nieobsługiwanym przez żaden system operacyjny poza Windows 10.

Zanim przejdę dalej chciałbym zaznaczyć, że wpis ten jest uzupełnieniem artykułów „Jak drukować bez sterowników?” oraz „Drukujemy z Linuksa (i innych systemów) na drukarce Windows”. Podane tam informacje są niezbędne do poprawnego skonfigurowania środowiska druku.

Konfigurujemy wirtualną drukarkę PostScript

Potrzebne będą najnowsze wersje następujących programów:
  • Ghostscript
  • GSview
  • RedMon
Komplet linków do pobrania można znaleźć na tej stronie.
Ponadto przyda się aplikacja cmdow.exe, którą umieściłem tutaj. Musiałem go skompresować, bo jak wrzuciłem plik EXE, to po jakimś czasie pliku nie można było pobrać. Gdyby link przestał działać, dajcie znać w komentarzu.

Po pobraniu plików (Ghostscript i GSview w wersji 32-bitowej lub 64-bitowej odpowiednio do systemu) instalujemy je w kolejności, w jakiej zostały wymienione. Niestandardowo przebiega instalacja RedMona: należy „ręcznie” utworzyć katalog, skopiować do niego pliki z archiwum i dopiero w tym katalogu uruchomić setup.exe. Koniecznie trzeba zapamiętać (zapisać) katalogi, w których zostało zainstalowane oprogramowanie. U mnie wygląda to następująco (może się przydać dla ustalenia uwagi:
  • C:\Program Files\gs\gs9.23
  • C:\Program Files\gs\gsview5.0
  • C:\Program Files\gs\redmon
  • C:\Util\cmdow.exe
Teraz tworzymy plik typu BAT niezbędny do komunikacji z drukarką fizyczną. Szczegółowe zasady tworzenia tego pliku podałem w pierwszym z podlinkowanych wpisów. U mnie zawartość tego pliku wygląda następująco (publikuję tylko jako przykład, należy go dostosować do swojego środowiska):

c:\util\cmdow @ /HID
C:\PROGRA~1\gs\gsview5.0\gsview\gsprint.exe -printer "HP DeskJet 840C na AXIS 540+" -color -

Kolejnym krokiem będzie (uwaga: inaczej niż pod XP) utworzenie wirtualnego portu drukarki, który będzie przekierowywał wydruki do naszego pliku wsadowego. Pod Windows 10 musimy wykonać tę czynność z uprawnieniami administratora. Otwieramy zatem okno wiersza poleceń używając funkcji „Uruchom jako administrator” i wprowadzamy polecenie jak niżej:


Spowoduje to otwarcie okna właściwości serwera wydruku z wymaganymi uprawnieniami. Klikamy zakładkę „Porty”, następnie przycisk „Dodaj port”, wybieramy „Redirected Port” (będzie dostępny, jeśli prawidłowo zainstalowaliśmy RedMona), klikamy przycisk „Nowy port...” i ustalamy jego nazwę. Proponuję nie zmieniać domyślnej: „RPT1:”.


Po dodaniu portu klikamy przycisk „Konfiguruj port...” i wpisujemy ścieżkę do utworzonego wcześniej pliku BAT.


Teraz można już skonfigurować naszą wirtualną drukarkę (jak to robić podałem szczegółowo w poprzednim wpisie). W opcjach wybieramy „Dodaj drukarkę lokalną lub sieciową z ustawieniami ręcznymi”, jako port drukarki – utworzony przed chwilą port wirtualny (RPT1:),... 


jako sterownik – jakiś sterownik drukarki postscriptowej dostępny w systemie, u siebie dobre wyniki uzyskałem z HP Color Laseret 4500PS.


Jeszcze jakaś sensowna nazwa drukarki i gotowe.


Jest bardzo ważne, aby po skonfigurowaniu drukarki wykonać wydruk strony testowej i rozwiązać ewentualne problemy.

Kolejnym krokiem będzie udostępnienie naszej wirtualnej drukarki w sieci z wykorzystaniem usług drukowania dla systemów Linux/Unix (LPD/LPR). Jak to zrobić w systemie Windows 10 podałem w poprzednim wpisie (punkt 5).


Drukujemy w sieci

Teraz możemy już zainstalować drukarkę sieciową w docelowym systemie. Jak to zrobić w przypadku Linuksa i Windows 10 (pod XP jest podobnie) opisywałem poprzednio.

Nie byłbym jednak dinozaurem, gdybym nie spróbował drukowania z poziomu Windows 98 i tu pojawia się problem: ten system nie ma wbudowanej obsługi drukarek LPR, nie obejdzie się zatem bez dodatkowego softu. W internecie znalazłem program KPrint, stworzony kiedyś przez firmę Koyocera dla Windows 95/98/NT/2000/XP, w celu umożliwienia obsługi sieciowej produkowanych przez nich profesjonalnych drukarek. Spróbujmy go wykorzystać do naszych celów.

Instalujemy KPrint (w standardowy dla Windows sposób) i w odpowiednim momencie zaznaczamy opcję uruchomienia kreatora portu (można go też uruchomić po zakończeniu instalacji).


Wybieramy drukowanie z użyciem LPR.


Wpisujemy adres IP naszego komputera z Windows 10 i nazwę nadaną wirtualnej drukarce podczas udostępniania (nazwę kolejki LPD).


W systemie zostanie utworzony port drukarki LPR. Proponuję nie zmieniać jego domyślnej nazwy.


Można już przystąpić do konfiguracji drukarki. W kreatorze wybieramy opcję „Drukarka lokalna” (właśnie tak, nie sieciowa) 


i sterownik drukarki postscriptowej. Tu ciekawostka: używany przeze mnie dotychczas sterownik HP Color LaserJet PS (patrz wpis „Jak drukować bez sterowników”) nie chciał „dogadać się” z oprogramowaniem Koyocera. Drukowały się jakieś śmieci i fragmenty komunikatów PostSriptu. Jednakże wybór sterownika Apple LaserWriter 12/640 PS daje poprawne wyniki.


Jako port drukarki wskazujemy wirtualny port LPR utworzony w programie Koyocera.


Jeszcze tylko jakaś nazwa dobrze opisująca naszą drukarkę i…



nie, teraz jeszcze nie powinniśmy drukować strony testowej, ponieważ musimy wyłączyć dwukierunkową obsługę drukarki.


We właściwościach drukarki wybieramy zakładkę „Szczegóły”…


klikamy przycisk „Ustawienia buforowania...”


i zaznaczamy odpowiednią opcję.


Można już spróbować wydrukować stronę testową. Jeśli wszystko działa poprawnie, powinniśmy otrzymać taki wynik:

Tak więc w epoce Windows 10 również da się drukować bez sterowników.

środa, 4 kwietnia 2018

Drukujemy z Linuksa (i innych systemów) na drukarce Windows

Jeśli mówimy o udostępnianiu drukarki obsługiwanej przez system Windows dla Linuksa lub udostępnianiu drukarki linuksowej dla stacji roboczych Windows, to najczęściej mamy na myśli wykorzystanie protokołu SMB oraz, w przypadku Linuksa – pakietu samba.

Chciałbym tu zaproponować zupełnie inne rozwiązanie, oparte o usługi LPD/LPR, które zostały zaimplementowane w każdej wersji Windows (w Windows 10 Microsoft miał to usunąć, na szczęście dotychczas tego nie zrobił), chociaż nie są instalowane i uruchamiane domyślnie.

Rozwiązanie takie wydaje mi się prostsze, a już na pewno jest o wiele bardziej uniwersalne. Można na przykład drukować z Linuksa na windowsowej drukarce GDI, do której albo w ogóle nie ma sterowników w systemie druku cups, albo istniejący sterownik jest kiepskiej jakości, co się zdarza, gdy społeczność próbuje odtworzyć działanie drukarki, do której producent nie udostępnił specyfikacji. Warunkiem dokonania takiej sztuki jest jednak, aby w systemie Windows dało się skonfigurować wirtualną drukarkę postscriptową, a nie próbowałem tego robić w systemach nowszych niż XP (i nie wiem, czy się w ogóle da).

No dobrze: starczy już tego wstępu, pora brać się do roboty.

1. Konfigurujemy i udostępniamy wirtualną drukarkę PostSript jak opisano tutaj. Jeśli brak sterownika w systemie Linux nie jest problemem, to możemy pominąć całą zabawę z GhostScriptem i udostępnić od razu odpowiednią drukarkę fizyczną.

2. Teraz musimy zainstalować i uruchomić usługi drukowania dla systemów Unix/Linux. W systemie Windows XP robi się to w ten sposób, że uruchamiamy Panel Sterowania, wybieramy ikonę „Dodaj lub usuń programy”, klikamy przycisk „Dodaj/Usuń składniki systemu Windows” i instalujemy „Inne usługi plików i drukowania w sieci” (potrzebna płyta lub katalog instalacyjny).


Wracamy do głównego okna Panelu sterowania, wybieramy ikonę „Usługi”, znajdujemy usługę „Serwer wydruku TCP/IP” i we właściwościach (prawy klawisz myszy -> „Właściwości”) przestawiamy tryb uruchamiania na automatyczny.


Ciekawostka: Drukarka udostępniana poprzez „Serwer wydruku TCP/IP” wcale nie musi być jednocześnie udostępniana w sieci Windows. Można więc po zainstalowaniu usług drukowania powrócić do okna dialogowego udostępniania drukarki (patrz wpis podlinkowany w punkcie 1) i wyłączyć udostępnianie. Ważne, żeby zachowała się „Nazwa udziału” nadana podczas udostępniania – będzie to nazwa kolejki wydruku LPD.


3. Pora przejść do Linuksa. Na potrzeby prezentacji wybrałem dystrybucję Lubuntu 16.04 LTS, bo ma stosunkowo niskie wymagania sprzętowe (to jest w końcu blog dla dinozaurów), a z systemów rodziny Ubuntu korzysta stosunkowo duża liczba użytkowników. No a dlaczego nie Puppy? Testowany przeze mnie w 2015 roku Puppy Precise Retro zdezaktualizował się znacznie bardziej niż Windows XP (chociaż jest od niego o wiele młodszy), zaś jego następca, Tahrpup, to już nie jest dystrybucja dla słabego sprzętu. Moim zdaniem Puppy utracił w ten sposób sens swojego istnienia.

    Ale do rzeczy: uruchamiamy Lubuntu, otwieramy menu (można w tym przypadku mówić o menu „Start”, czy też jakiś linuksiarz się obrazi?), „Narzędzia systemowe”, „Drukarki” i …


Upsss! Czy to nie jest irytujące, że w systemie operacyjnym domyślnie drukarki nie działają?

No dobrze, zainstalujmy tego cups-a (potrzebne połączenie z internetem):
sudo apt install cups

Teraz można już dodać drukarkę. Klikamy przycisk „Dodaj”, rozwijamy „Drukarka sieciowa” i zaznaczamy „Komputer lub drukarka LPD/LPR”.


Wpisujemy adres IP komputera obsługującego drukarkę, a jako nazwę kolejki – nazwę nadaną w systemie Windows podczas udostępniania.

Jako sterownik drukarki wybierzmy Generic Postscript Printer Foomatic/Postscript.


Pozostaje tylko nadanie nazwy i stosownego opisu...


i mamy skonfigurowaną drukarkę.


Możemy teraz wydrukować stronę testową. Jeśli wszystko wykonaliśmy poprawnie, wynik powinien być taki, jak poniżej.


Ktoś jeszcze nie wierzy, że to działa? No to niech sam sprawdzi.

4. Jeśli już mamy w sieci skonfigurowaną drukarkę LPR, to możemy na niej drukować nie tylko z poziomu Linuksa czy innych systemów uniksopodobnych, ale także na przykład… z Windows 10. W ten sposób możemy drukować na drukarce podłączonej do komputera z Windows XP (a nawet z Windows 98, bo i tam da się udostępnić drukarkę w ten sposób), co „windowsowymi” mechanizmami okazuje się trudne do osiągnięcia (bo Microsoft pozmieniał te mechanizmy).

Konfiguracja drukarki w systemie Windows 10 (podobnie jest w 7 i 8) przebiega następująco. Otwieramy Panel Sterowania…

Dygresja: Jeśli ktoś nie może znaleźć panela sterowania, to niech sobie wyszuka przy pomocy wyszukiwarki. Mnie osobiście wkurza to, że Microsoft w każdej kolejnej kompilacji systemu zmienia położenie różnych ustawień w interfejsie. Nie mam czasu ani ochoty, żeby za tym nadążać.

klikamy ikonę „Urządzenia i drukarki”, następnie link „Dodaj drukarkę”. W tym momencie włącza się irytująca funkcja Windows 10 wyszukująca dostępne drukarki sieciowe. Jeśli mamy małą sieć domową, nie stanowi to problemu, jednak w przypadku dużej sieci lepiej szybko kliknąć „Drukarki, której szukam, nie ma na liście” (naszej drukarki i tak nie znajdzie).

Następnie wybieramy opcję „Dodaj drukarkę lokalną lub sieciową z ustawieniami ręcznymi”. To nam zapewni maksymalną kontrolę i nie będziemy potem godzinami zastanawiać się „co nam tu Windows ustawił, że nie działa”.


Tworzymy nowy port drukarki i wybieramy typ „Standard TCP/IP port”.


Wpisujemy adres IP komputera obsługującego drukarkę i nie zaznaczamy opcji „Sprawdź drukarkę i automatycznie wybierz sterownik do użycia”.


W następnym oknie zaznaczamy „LPR”, wpisujemy nazwę kolejki (nazwa nadana drukarce podczas udostępniania pod Windows XP) i koniecznie zaznaczamy opcję „Włączone zliczanie bajtów LPR”. Bez tego nie będzie działać.


Pora wybrać sterownik drukarki. Zaznaczamy jakiś sterownik postscriptowy dostępny w systemie. U mnie dobrym wyborem okazał się „HP Color LaserJet CP4005 PS Class Driver”.


Jeszcze jakaś sensowna nazwa drukarki i gotowe!


Teraz możemy wydrukować stronę testową, pamiętając, że w systemie Windows 10 trzeba w tym celu otworzyć „Właściwości drukarki”, a nie „Właściwości” (kolejne dziwactwo).

Wam też działa, prawda?

5. Drukarkę LPD/LPR można też udostępnić pod kontrolą Windows 10 (podobnie 7 i 8). Wprawdzie nie próbowałem w tym systemie konfigurować wirtualnej drukarki postscriptowej i nie wiem, czy w ogóle się da, ale jest wiele drukarek standardowo obsługujących PostScript czy chociażby PCL. Udostępnienie drukarki w ten sposób pozwoli nam drukować na niej nie tylko z poziomu systemów Linux/Unix, ale również spod Windows XP czy 98.

Otwieramy Panel sterowania, klikamy ikonę „Programy i funkcje”, a następnie link „Włącz lub wyłącz funkcje systemu Windows” (albo, co będzie bardziej w stylu Windows 10, wyszukujemy odpowiedni aplet Panela sterowania w wyszukiwarce) i włączamy dwie funkcje: „Monitor portu LPR” i „Usługa drukowania za pośrednictwem portu LPD”.


Potrzebne będzie połączenie z internetem, gdyż system pobiera niezbędne pliki z serwisu Windows Update.

Teraz we „Właściwościach drukarki” (a nie we „Właściwościach”!) włączamy udostępnianie i wpisujemy nazwę udziału, która staje się nazwą kolejki wydruku LPD.

 

Podobnie jak to miało miejsce pod Windows XP, udostępnianie można teraz wyłączyć. Ważne, żeby zachowała się wpisana nazwa udziału.


Pozostaje podłączyć drukarkę w docelowym systemie. Jak to zrobić w Linuksie napisałem powyżej (tylko trzeba odpowiedni sterownik wybrać, może jakiś generic PCL), a pod Windows XP – kto doczytał do tego miejsca, na pewno sobie poradzi. Powodzenia!