Disassembler

Artificial intelligence is no match for natural stupidity.
30leden2012

Jak jsem tisknul PDF na tiskárně HP


Koupil jsem si tiskárnu. Jelikož tisknu hlavně textové dokumenty, faktury a další byrokratické nesmysly, chtěl jsem nějakou černobílou laserovku. Netisknu jen z jediného počítače, a proto mým dalším požadavkem bylo, aby zařízení mělo integrovaný print server. A protože problémy s tiskovými ovladači lidstvo provází už od dob Gutenbergova knihtisku, rád bych, aby její instalaci zvládla i slepice, když se jí nasype zrní kolem enteru. Taky by to samozřejmě neměla být ta nejlevnější Čína, ale měla by něco vydržet (tohle kritérium by mělo být tak nějak implicitní u všech zařízení). Dal jsem tedy na kolegovo doporučení a pořídil si HP LaserJet P2055dn.

Blbuvzorná instalace


Instalace byla, dle požadavku, skutečně jednoduchá. Dokonce málem jednodušší než samotné vybalení, protože tiskárna byla zabezpečena cca osmi různými prvky a patenty, nacházejícími se uvnitř i vně zařízení. Kdybyste jedno zapomněli vyndat, pravděpodobně byste se to dozvěděli až podle zvuku. Po klasickém kolečku Zařízení a tiskárny -> Přidat tiskárnu -> Přidat místní tiskárnu -> Standard TCP/IP port -> IP adresa -> výběr ovladače bylo hotovo a tiskárna tiskla. Vytiskl jsem nějakých patnáct dokumentů a byl šťastnej jak blecha. Až do druhého dne. To jsem totiž poslal k tisku jednu nově obdrženou fakturu v PDF. Tiskárna chvilku přemýšlela a pak mi na papír vytiskla

PCL XL error
        Subsystem:   TEXT
        Error:       InsufficientMemory
        Operator:    Text
        Position:    1160

Z nuly na šedesát


Huh? Cože? Asi se někde ucpaly dráty, tak restartuju tiskárnu a zkusím to znovu. I napodruhé mi však tiskárna taktně oznámila, že takovou kravinu prostě tisknout nebude. OK, při instalaci jsem nechal Windows, ať si natáhnou svoje výchozí ovladače, takže můžu říct, že jsem něco podobného i trochu čekal. Letmý pohled na verzi ovladače (0.3.7071.0, Copyright © 1996-2005 Helwett-Packard Co.) dával tušit, že aktualizace by skutečně bodla. Tak tedy vzhůru na web HP Support & Drivers. Vyhledávání dle typu naštěstí zafungovalo na první pokus a jako bonus jsem si stáhl i nový firmware. Po aktualizaci obou zmíněných (ovladač nyní ve verzi 61.93.2.77, už asi chápu, kde se Mozilla inspirovala svým číslováním verzí) a pro jistotu i následném restartu Windows, kvůli kterému jsem přišel o krásný 53denní uptime, jsem se osmělil ke třetímu pokusu. Tiskárna se však jen škodolibě ušklíbla a vypadl z ní opět ten samý PCL XL error. Zkusil jsem vytisknout jiné PDF. To se bez problému nechalo. Chvíli jsem si tedy hrál s všemožným nastavením tiskárny, ale stále žádná výhra. PCL 5 ani PCL 5e ovladač jsem kvůli jednomu jedinému hloupému souboru používat nechtěl, tak jsem se v problému začal šťourat.

Byl vrahem zahradník?


Začal ve mně hlodat červíček pochybnosti. Je skutečně chyba v ovladači? Nemohl by být problém třeba v PDFku samotném? Zapnul jsem tedy druhý počítač, nainstaloval tiskárnu, tentokrát pro jistotu rovnou s novějšími ovladači a zkopíroval PDF. Při pokusu o tisk klávesovou zkratkou Ctrl+P mi ovšem spadl Acrobat Reader. OK, spustím jej tedy znovu, ručně vyberu Soubor -> Tisknout... a žuch, zase. Nejprve jsem to považoval za problém nesouvisející, zapříčinený tím, že produkty Adobe programuje banda lobotomizovaných cvičených šimpanzů (vizte třeba tyto statistiky zranitelnosti nebo bezpečnostní doporučení na Secunii), ale nakonec se ukázalo, že tohle padání je důležitým indikátorem toho, že tiskárna je správně nainstalována. Jak ironické. Po restartu počítače už vše fungovalo a PDF bylo vytištěno. OK, problém tedy pravděpodobně bude skutečně v ovladačích od tiskárny. Jelikož k systému, kde se tisk nedařil, byla v minulosti celkem určitě nějaká HP tiskárna připojena, bylo pravděpodobné, že se tam někde nějaká součást starších ovladačů schovala a teď dělá neplechu. Pokud jste někdy viděli, jak oficiální ovladače HP vypadají, tak jistě můj myšlenkový pochod chápete. Pokud ne, tak vám prozradím, že balík ovladačů a aplikací k HP LaserJet P2055dn má 104 MB, 55 složek a 395 souborů, z čehož většinu tvoří *.cab archivy obsahující další stovky souborů, a že je to na poměry HP ještě zatraceně málo!

Vyhledat a zničit


Rozhodl jsem se tedy ručně pomazat a poodstraňovat všechny soubory, záznamy v registru a další bordel, který by mohl instalaci ovladačů jakkoliv ovlivnit. Trochu teď zaspoiluji a prozradím, že nic z toho jsem dělat nemusel, ale jde o poměrně komplexní proceduru, která tvoří jádro celého tohoto článku, takže se třeba bude někomu při řešení podobných problémů hodit. Upozorňuji však, že daný postup provádíte na vlastní nebezpečí a hrozí u něj poškození tiskového subsystému, v horším případě i celých Windows. Zálohování v tomto případě vůbec není špatný nápad.

Následující kroky byly provedeny na počítači s Windows 7 x64 a popisují odstranění všech HP ovladačů a tiskových součástí. Přesný a všeobjímající návod není prakticky možno udělat, takže se primárně řiďte svým rozumem. Některé kroky jsou obecné a při troše porozumění a fantazie jsou aplikovatelné i u tiskáren jiných výrobců. Pokud je váš počítač značky HP nebo máte instalovaný jiný HP produkt, tak vás docela lituju, protože hrozí, že společně s ovladači tiskáren sundáte i pár jiných, takže u některých kroků budete muset vyvinout ještě větší dávku iniciativy než všichni ostatní.

  1. Ve Správci zařízení (resp. Zařízení a tiskárny) odeberte tiskárnu.
  2. HP poskytuje různé removal tooly na své aplikace. Za normální situace tedy doporučuju čistku zahájit stažením a spuštěním takového nástroje. Ty se však liší dle produktu (resp. balíku produktů), takže svůj odstraňovač zkuste buď vygooglit anebo jej můžete nalézt na svém CD/DVD k tiskárně (tedy za předpokladu, že dané médium neslouží bohulibějšímu účelu, jako třeba plašení vrabců). Některé removal tooly mají několik stupňů odstranění. Vždy použijte ten „nejvyšší“, protože ten většinou odstraňuje vše od aplikací až po ovladače a nastavení tisku.
  3. Odstraňte všechny zbytky HP produktů. Nejprve po dobrém, v Programech a funkcích a potom po zlém, prostým smazáním složek
    C:\Program files\HP
    C:\Program files (x86)\HP
  4. Otevřete si Služby, buď přes nabídku Start
    services.msc
    nebo si je najděte ve Správě počítače, pokud jste zvyklí chodit jinudy.
  5. Ve službách zastavte Službu zařazování tisku. Staří mazáci to můžou udělat přes komandlajnu pomocí příkazu
    net stop spooler
  6. Najděte a zastavte služby
    Net Driver HPZ12
    PML Driver HPZ12
    a dále všechny služby začínající písmeny HP. Většina z nich by už ale měla být zastavena, případně rovnou smazána.
  7. Otevřete nejlepšího přítele každého Windows admina - editor registru. Nabídka Start
    regedit
    a donavigujte do
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
    Zde smažte všechny služby, které jste potkali v předchozím kroku (spooler ne!). Tedy např.
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HP CUE Device Discovery
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HP Network Device Support
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hpqcxs08
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Net Driver HPZ12
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PML Driver HPZ12
  8. Přejděte do
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3
    resp. na 32bitových systémech
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3
    Zde si otevřete klíč s názvem tiskárny, která vás zlobí a zkopírujte si obsah hodnoty Dependent Files někam do texťáku. Tato hodnota obsahuje soubory, které tiskárnu ovládají a ze kterých budete většinu mazat. Budete ale mazat i klíče v registrech, takže potřebujete informaci o souborech schovat někam stranou.
  9. Smažte všechny klíče týkající se nevýchozích tiskáren a tiskových procesorů v umístěních
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Print Processors
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\Version-3
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers
    HP komponenty poznáte podle toho, že jejich název začíná písmeny HP. Výchozí tiskárny podle názvu pravděpodobně také poznáte. Jsou to třeba:
    Microsoft Shared Fax Driver
    Microsoft XPS Document Writer
    Remote Desktop Easy Print
    a tiskový procesor
    winprint
    Takže tyhle tam můžete v klidu nechat.
  10. Otevřete průzkumníka nebo cokoliv podobného a donavigujte do
    C:\Windows\System32\spool\drivers\x64\3
    resp. na 32bitových systémech
    C:\Windows\System32\spool\drivers\W32X86\3
    Ze seznamu souborů vylovených v kroku 8 vymažte všechny, co začínají na uni* a std*, ty totiž dodal systém. Ty co vám pak v seznamu zbydou, ze složky smažte. V případě HP to můžete udělat i předpřipravenou dávkou
    @ECHO OFF
    net stop spooler
    
    cd "%systemroot%\System32\spool\drivers\x64\3"
    del hp*
    del cioum*
    del pcl*
    del pjl*
    
    cd "%systemroot%\System32\spool\prtprocs\x64"
    del hp*
    
    cd "%systemroot%\System32"
    del hpz*
    pause
    Pokud se některé soubory nepodařilo smazat, restartujte počítač a zkuste to znovu.
  11. Pro jistotu si ještě jednou projděte celý
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
    i s podklíči a
    C:\Windows\System32\spool
    i s podsložkami a zkontrolujte, jestli někde něco nezůstalo. Ve spoolu pravděpodobně nejaké pozůstatky budou, ale už by při příští instalaci neměly být na závadu. Pokud tedy vše vypadá čistě (alespoň v rámci možností), restartujte počítač a můžete zkusit své štěstí s instalací znovu.

Čtenář vepřovic


Poskládání a opakované provedení výše uvedeného mi zabralo několik hodin. Když jsem byl s výsledkem spokojený a tiskový subsystém jsem měl nastaven naprosto stejně jako na počítači, odkud se tisk povedl, a to i včetně identických verzí všech komponent ovladače, zkusil jsem znovu otevřít PDF a znovu jej vytisknout. A znovu jsem bez mrknutí oka obdržel krásný a voňavý PCL XL Error. No do řiti, tak co ještě může být špatně? Hm... co takhle přeinstalovat Adobe Reader? Hurá na něj! Ovšem i po reinstallu z tiskárny vylezla tatáž strohá chybová hláška. Tak jsem si ze srandy stáhl a nainstaloval Foxit Reader, otevřel v něm ono nešťastné PDF a bez problému jej vytisknul. A v tom se mi rozsvítilo. PostScript! Žádná chyba paměti. Ten pitomec Adobáckej si někde něco rozdrbal a najednou prostě neumí do tiskárny natlačit postscriptovej dokument pomocí PCL 6. Má doměnka byla potvrzena ve chvíli, kdy jsem v Adobe Readeru v rozšířeném nastavení tisku zatrhl „Tisknout jako obraz“ a PDF se samozřejmě, za zvuku andělských trumpet, vytisklo.

A do něj!


Tááákže. Odinstalovat všechny produkty Adobe. Vymazat všechno z

C:\Program Files\Adobe
C:\Program Files (x86)\Adobe
%ProgramData%\Adobe
%AppData%\Adobe
%LocalAppData%\Adobe

a z registrů

HKEY_LOCAL_MACHINE\SOFTWARE\Adobe
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Adobe
HKEY_CURRENT_USER\SOFTWARE\Adobe

a restartovat počítač. Po restartu znovu nainstalovat Adobe Reader, spustit PDF, vybrat tisk a... žuch! Reader spadl. Čtenáři s dobrou pamětí vědí, že pád Readeru znamená úspěch při instalaci tiskárny. A skutečně, po dalším restartu už se s tiskárny sypou PDFka jako by se nechumelilo. Teorie o tom, že v Adobe zaměstnávají lobotomizované šimpanze je tedy potvrzena a já mám po Flashi dalšího nadějného kandidáta aspirujícího na přidání do blacklistu. Alternativ je dostatek.