Linux Printing HOWTO <author>Grant Taylor <tt/<gtaylor+pht@picante.com>/ Svensk översättning av Marcus Rejås <tt/<rejas@swipnet.se>/ <date>Version 3.17, 1998/06/17 14:03:27 (översatt 9 juli 1998) <abstract> Detta är Linux Printing HOWTO (Linux skriva ut HURDÅ), en samling av information om hur man skapar, förhandsgranskar, skriver ut och faxar något under Linux (och andra Unixliknande system). </abstract> <toc> <sect>Introduktion <p> Linux Printing HOWTO borde innehålla allt du behöver veta för att kunna sätta upp utskriftsmöjligheter på din Linuxburk. Som brukligt är, så är det något mer avancerat än Microsoft och Apples 'peka och klicka'-värld, men det är också mer flexibelt och definitivt lättare att administrera för stora LANs. <p> Detta dokument är strukturerat så att de flesta bara behöver läsa den första halvan (ungefär). Det mesta av det abstrakta och situiationsberoende stoffet kommer i andra halvan av dokumentet och kan lätt lokaliseras i innehållsförteckningen, men förmodligen behöver de flesta läsa kapitel 9 eller 10. <p> Eftersom version 3.x är en helt omskriven version har mycket av stoffet från tidigare versioner plockats bort. Detta för att den föregående versionen var så stor som 60 utskrivna papper och mycket svårläst. Om du inte hittar svaret på vad du söker här bör du göra på följande sätt: a) sök igenom förgående version av detta dokument på <url url="http://www.picante.com/~gtaylor/pht/" name="The Printing HOWTO Home Page"> och b) skicka mig en rad där det står vad som borde vara med i detta dokument men som inte är det. <p> <url name="Printing HOWTO Home Page" url="http://www.picante.com/~gtaylor/pht/"> är ett bra ställe för att hitta senaste versionen, den finns också, naturligtvis, från SunSite (<tt/sunsite.unc.edu/) och din lokala spegling av LDP. <sect1>Översättares kommentar <p> Det skall sägas att jag inte är någon expert på att översätta dokument. Men jag gör så gott jag kan. Vissa tekniska ord har mig veterligt inga svenska motsvarigheter, dessa står kvar på engelska. I de fall det är vanligt med ett försvenskat uttal eller stavning av ett ord har jag använt det. <p> Ett ofta återkommande ord är Daemon. Detta är ett engelskt ord som mig veterligt saknar svensk motsvarighet. Jag använder det engelska ordet med något försvenskat uttal i tal, och det engelska i text. En daemon är ett program som (oftast) startas upp vid systemstarten och sedan körs i bakgrunden för att bevaka och utföra vissa uppgifter. <p> Jag reserverar mig för översättningsfel, rent språkliga fel och stavfel. <p> Alla länkar och hänvisningar i Texten går till originaldestinationen, vilket innebär att de leder till engelska dokument. <p> Överallt i texten utom denna sektion avser ordet 'jag' originalförfattaren. <p> Hoppas att detta dokument kommer till nytta! --Marcus Rejås <rejas@swipnet.se> <sect1>Historia <p> Detta är den tredje generationen, vilket betyder att det är tredje gången dokumentet skrivs om. Dokumentets historia kan beskrivas som följer: <enum> <item>Jag skrev printing-howto 1992 eftersom det blev för många frågor om utskrifter i comp.os.linux, och postade det i gruppen. Detta kom några månader före HOWTO projektet och var således den första `mini-FAQen' som kallades `howto'. Den här utgåvan var i ren ascii. <item>Efter att ha hoppat in i HOWTO projektet blev Printing-HOWTO sammanslagen med en Lpd FAQ av Brian McCauley <tt/<B.A.McCauley@bham.ac.uk>/; vi fortsatte att samarbeta med PHT under ett par år eller så. Vid någon tidpunkt implementerade vi Karl Auer's <tt/<Karl.Auer@anu.edu.au>/ arbete. Denna generation av PHT var i TeXinfo, och fanns tillgänglig i PS, HTML, Ascii, och Info. <item>Efter att ha låtiti PHT förfalla i över ett år, och ett misslyckat försök att lämna över det till någon annan gjordes denna omskrivning. Denna generation av dokumentet är i Linuxdoc-SGML (numer känt som Sgml-tools paketet). </enum> <sect1>Copyright <p> Detta dokument är Copyright (c) 1997 av Grant Taylor. Kopiera och distribuera detta vida omkring, men modifiera inte dokumentet eller utelämna mitt namn. <sect>Hur man skriver ut <p> Om du redan har installerat lpd och konfigurerat för att skriva ut på din skrivare, eller om din systemadministratör eller försäljare har gjort det åt dig så behöver du bara lära dig att använda kommandot lpr. <url name="Printing Usage HOWTO" url="http://sunsite.unc.edu/LDP/HOWTO/Printing-Usage-HOWTO.html"> täcker detta, och en del andra kommandom för att manipulera skrivarköer som du troligen vill lära dig. <p> Men om du har ett nytt system eller ny skrivare så måste du installera och konfigurera skrivar rutiner på ett eller annat sätt innan du kan skriva ut. Läs vidare! <sect>Skrivarrutiner i kärnan <sect1>lp enheten <p> Linux kärnan (<=2.1.32), förutsatt att du kar kompilerat in eller laddat lp enheten (output av <tt>cat /proc/devices</tt> skall innehålla enheten lp), tillhandahåller en eller flera av <em>/dev/lp0</em>, <em>/dev/lp1</em>, och <em>/dev/lp2</em>. Dessa tilldelas INTE dynamisk utan var och en av dem svarar mot en specifik I/O adress. Detta betyder att din första skrivare kan vara <em/lp0/ eller <em/lp1/ beroende på din hårdvara. Prova båda. <p> Några få användare har rapporterat att deras dubbelriktade lp portar inte upptäcks om de använder en äldre universalriktad skrivarkabel. Se till att du har en passande kabel. <p> Man kan inte köra plip och lp drivrutinerna på samma gång på en port. Du kan dock ladda den ena eller den andra när som helst antingen manuellt, eller med kerneld om du har version 2.x (eller senare versioner av 1.3.x) av kärnan. Genom att noggrant ställa in irq och dylikt, kan du antagligen köra plip på ena porten och lp på den andra. Någon gjorde så genom att editera drivrutinen. Jag väntar otåligt på en positiv rapport om någon som lyckats göra detta med bara en smart kommandorad. <p> Det finns ett litet verktyg som heter <tt><htmlurl url="http://www.picante.com/~gtaylor/pht/man/tunelp.8.html" name="tunelp"></tt> med vilket du, som root, kan finjustera Linux lp enheters irq, "polling rate" och andra alternativ. <p> Om den är inbyggd, i en del 1.3.x och senare kärnor, kan kärnan ta emot <tt>lp=</tt> argumentet för att sätta irq och io adresser: <tscreen><verb> När lp drivrutinen är inbyggd i kärnan kan du använda kommandoraden till LILO/LOADLIN för att sätta portadresser och irq's som den drivrutinen skall använda. Syntax: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]] exempel: lp=0x378,0 eller lp=0x278,5,0x378,7 ** Observera att om du använder denna finess måste specificera *alla* portar som du vill använda, det finns inga "defaults". Du kan stänga av en inbyggd drivrutin med lp=0. </verb></tscreen> <p> Om den laddas som en modul i version 2 och sena 1.3.x kärnor är det möjligt att specificera io adresser och irq's på insmod kommandoraden (eller i <em>/etc/conf.modules</em> för att ha effekt på kerneld) genom att använda den vanliga syntaxen. Parametrarna är <tt/io=port0,port1,port2/ och <tt/irq=irq0,irq1,irq2/. Läs manualsidan för <em><htmlurl url="http://www.picante.com/~gtaylor/pht/man/insmod.1.html" name="insmod"></em> för ytterligare information om detta. <p> **För dem av er (som jag själv) som aldrig kan hitta standardportnumren när ni behöver dem, de är som i det andra exemplet ovan. Den andra porten (<em/lp0/) är på 0x3bc. Jag har ingen aning om vilken irq den brukar använda. <p> Källkoden för Linux parallellportsdrivrutin finns i /usr/src/linux/drivers/char/lp.c. <sect1>Parport enheten `parport device' (kärnor >= 2.1.33) <p> Med början i kärna 2.1.33 (och tillgänglig som patch för kärna 2.0.30), är lp enheten bara en klient till den nya parport enheten. Fördelen med parportenheten är att den rättar till ett antal problem som den gamla lp enheten led av - den kan dela port med andra drivrutiner, den tilldelar tillgängliga parallellportar dynamiskt till enhetsnummer istället för att kräva en fast kommunikation mellan I/O adresser och portnummer, och så vidare. <p> Tillkomsten av parport enheten har möjliggjort en hel flock av nya parallell-ports drivrutiner för saker som, Zip drives, Backpack CD-ROMs och diskar, etc. En del av dessa finns också tillgängliga för 2.0.x kärnor; leta runt på nätet. <p> Jag kommer att täcka parport drivaren mer komplett då jag själv använder en, men tills vidare kan du läsa filen <htmlurl url="http://www.cyberelk.demon.co.uk/parport/parport.txt" name="Documentation/parport.txt"> i din källkod till kärnan eller titta på <url url="http://www.cyberelk.demon.co.uk/parport.html" name="parport web site">. <sect1>Seriella enheter <p> Seriella enheter heter vanligtvis något som <em>/dev/ttyS1</em> under Linux. Verktyget <tt><htmlurl url="http://www.picante.com/~gtaylor/pht/man/stty.1.html" name="stty"></tt> låter dig interaktivt studera eller sätta inställningarna för en serieport; <tt><htmlurl name="setserial" url="http://www.picante.com/~gtaylor/pht/man/setserial.8.html"></tt> låter dig kontrollera ytterligare några attribut och konfigurera IRQs och I/O adresser för icke standard portar. Ytterligare behandling av serieportar under Linux hittas i <url url="http://sunsite.unc.edu/mdw/HOWTO/Serial-HOWTO.html" name="Serial-HOWTO">. <p> Om du använder en långsam seriell skrivare med flödeskontroll kan du komma att upptäcka att dina utskrifter trunkeras. Detta kan komma av att serieportens normala beteende är att slänga alla oöversända tecken från sin buffer 30 sekunder efter det att portenheten stängts. Bufferten kan hålla upp till 4096 tecken, och om din skrivare använder flödeskontroll och är så långsam att den inte kan ta emot all data ur bufferten inom 30 sekunder efter det att utskriftsmjukvaran stängt porten kommer det sista av din utskrift att gå förlorad. Om kommandot <tt>cat file > /dev/ttyS2</tt> producerar kompletta utskrifter för korta filer och trunkerade för längre kan du ha detta problem. <p> 30 sekundersintervallet kan justeras genom "closing_wait" kommandorads argumentet till setserial (version 2.12 and later). En maskins serieportar initieras vanligtvis genom ett anrop till setserial i startfilen rc.serial. Anropet till skrivarserieporten kan modifieras så att det sätter closing_wait på samma gång som det sätter den portens andra parametrar. <sect>Skrivare som stöds <p> Linux kärnan stöder i stort sätt alla skrivare du kan ansluta till en seriell eller parallell port, men det finns saker att se upp med, och skrivare som ej går att använda även om de (elektroniskt sätt) kan kommunicera med Linux. Främst bland dessa inkompatibla skrivare är sådana som förlitar sig på "Windows Printing System". (De brukar vara vagt markerade med "for Windows", eller kallas "GDI"-skrivare.) Dessa skrivare <em>funkar inte</em> med Linux. De har inte någon som helst intelligens och förlitar sig på att datorns CPU skall göra mycket av det arbete som traditionellt sköts av skrivarens processor. Olyckligtvis kan dessa uppgifter bara utföras av tillverkarspecifika drivrutiner som bara fungerar under Windows. Så köp inte en sådan för att använda med Linux. (Obsevera, om du redan har en så finns det sätt att få Lunux att skriva till en, men de är ganska krångliga och jag har aldrig provat själv. Se avsnitt 12 i detta dokument för ytterligare behandling av Windows-only skrivare.) <p> Vad gäller skrivare som <em>fungerar</em> under Linux är det bästa en skrivare med PostScript stöd. Nästan all Unix mjukvara som skapar utskrifter, skapar dessa i PostScript format, så uppenbart är det lämpligt att ha en skrivare som stöder PostScript direkt. Olyckligtvis är PostScript stöd ovanligt på andra skrivare än laserskrivare, och är ibland ett kostsamt tillbehör. <p> Om du inte har den (större) budget som behövs för att skaffa en PostScript skrivare kan du skaffa en skrivare som stöds av Ghostscript, en fri PostScript tolk som används i stället för äkta PostScript stöd i skrivaren. På <url url="http://www.cs.wisc.edu/~ghost/" name="Ghostscript Home Page"> finns en lista över skrivare som stöds och information om nya och experimentella drivrutiner. Bidrag till att förbättra sidan med skrivare som stöder Ghostscript genom att rapportera dina (miss)lyckanden med denna mjukvara. <p> Adobe har nu ett nytt skrivarspråk som heter "PrintGear" Jag tror att det är ett kraftigt förenklat binärformatspråk med en del arv från PostScript men ingen PostScript kompabilitet. Jag har inte hört något om att Ghostscript skulle stöda det. Men en del av dessa skrivare stöder andra språk som PCL, och dessa fungerar under Linux. <sect1>Skrivar-specifika noteringar <p> Detta avsnitt är, och kommer alltid att vara inkomplett. Men det jag skriver här bör alltid vara korrekt. Så här kommer det: <descrip> <tag/Canon BJ-10ex/ En rapport föreslår att Canonskrivaren fungerar mycket bättre i Epson LQ läget (som sätts med en dip-switch). Tydligen blev utskriften avbruten eller felaktig i Canon läge. Å andra sidan, är det mycket tydligt Canonstöd i Ghostscript, så det kan ha varit en lyckoträff. <tag/Lexmark/Lexmark (en gång en del av IBM, tror jag) gör många skrivare, många av dem är skrivare enbart för Windows: <itemize> <item>Color Jetprinter 1000 <item>Color Jetprinter 1020 (non Business Edition) <item>Color Jetprinter 2030 <item>Color Jetprinter 2050 <item>Color Jetprinter 2070 <item>Color Jetprinter 7000 <item>Color Jetprinter 7200 <item>Winwriter 100 <item>Winwriter 150c <item>Winwriter 200 </itemize> </descrip> <sect>Vilken spooling mjukvara? <p> Tills nyligen var valet för Linuxanvändare enkelt - alla körde samma gamla lpd som nästan ordagrant kom från BSD's Net-2 kod. Även idag har de flesta distributörer med denna mjukvara. Men det börjar på att ändras. SVR4-liknande system inkluderande Sun's Solaris har ett helt annat utskrifts spooling paket, centrerat kring lpsched. Och vissa tecken tyder på att Linuxdistributörer kommer att byta till LPRng, en inte alls lika föråldrad skrivar spooling mjukvara som är tillgänglig fritt. LPRng är mycket lättare att adminitrera för större installationer och har en mindre skrämmande slumpvis kodbas som lpd är full av. Det kan till och med ärligt hävda sig som säkert - det finns inga SUID binärer, och det stöder autenticering via PGP eller Kerberos. <p> För tillfällert, trots belysningen av nya alternativ, är lpd troligtvis utmärkt för de flesta Linuxanvändare. Trots att det inte är det stiligaste systemet, fungerar det utmärkt då det väl är konfigurerat och det är väl förstått och rikligt dokumenterat i tredje-part böcker om Unix. <p> Om du vill ha ytterligare information om LPRng, kolla <url name="LPRng Web Page" url="http://www.astart.com/lprng/LPRng.html">. Framtida versioner av denna HOWTO kommer att inkludera både hur man använder LPRng och vanlig lpd. <sect>Hur det fungerar, grunderna <p> För att få utskrivning att fungera bra måste du förstå hur lpd systemet fungerar. <p> Lpd står för Line Printer Daemon, och refererar i en del texter till både daemonen och hela samlingen av program som hanterar utskriftsspoolingen. Dessa är: <p> <descrip> <tag><tt><htmlurl name="lpd" url="http://www.picante.com/~gtaylor/pht/man/lpd.8.html"></tt></tag> Spooling daemon. En av dessa kör för att kontrollera allt på en maskin, OCH en körs per skrivare medan skrivaren skriver ut. <tag><tt><htmlurl name="lpr" url="http://www.picante.com/~gtaylor/pht/man/lpr.1.html"></tt></tag> Användares spooling kommando. Lpr kontaktar lpd och stoppar in ett nytt skrivarjobb i kön <tag><tt><htmlurl name="lpq" url="http://www.picante.com/~gtaylor/pht/man/lpq.1.html"></tt></tag>Listar jobben i en skrivarkö. <tag><tt><htmlurl name="lpc" url="http://www.picante.com/~gtaylor/pht/man/lpc.8.html"></tt></tag> Lpd system kontroll kommando. Med lpc kan du stoppa, starta, omorganisera, etc skrivarköerna. <tag><tt><htmlurl name="lprm" url="http://www.picante.com/~gtaylor/pht/man/lprm.1.html"></tt></tag><tt/lprm/ tar bort et jobb ur skrivarkön. </descrip> <p> Så hur sitter det ihop? Jo, när systemet startar upp, startas lpd. Den skannar igenom filen <em>/etc/printcap</em> för att få reda på vilka skrivare som den skall hantera köer för. Var gång någon kör lpr så kontaktar lpr lpd genom <em>/dev/printer</em>, och matar lpd med både filen som skall skrivas ut och information om vem som skriver och hur den skall skrivas ut. lpd skriver så ut filen på den passande skrivare som står på tur. <p> lp systemet var från början konstruerat när de flesta skrivare var radskrivare - dvs, folk skrev mest vanlig ascii. Men det visar sig att bara lite scriptjob behövs för att lpd skall fungera för dagens utskriftsjob, som oftast är i PostScript, eller text, eller dvi, eller... <sect>Konfigurering, grunderna <sect1>Traditionell lpd konfiguration <p> Den minimala konfigureringen för lpd resulterar i ett system som kan köa filer och skriva ut dem. Det tar ingen hänsyn till om skrivaren förstår dem eller inte, och kommer förmodligen inte att leda till attraktiva utskrifter. Men det är ett första steg mot att förstå hur det funkar, så läs vidare! <p> För att lägga en skrivarkö till lpd måste du lägga till en post (entry) i <em>/etc/printcap</em>, och skapa en ny katalog för skrivarkön (spool directory) under <em>/var/spool/lpd</em>. <p> En post i <em>/etc/printcap</em> ser ut så här: <tscreen><verb> # LOCAL djet500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :sh: </verb></tscreen> Detta definierar en skrivarkö som kallas <em/lp/, <em/dj/, eller <em/deskjet/, köade (spoolade) i katalogen <em>/var/spool/lpd/dj</em>, utan begränsning på utskriftsjobbens storlek om skriver till enheten <em>/dev/lp0</em> och som inte lägger ett försättsblad (med namnet på den person som skriver ut, m.m.) till utskriften. <p> Läs nu manualsidan (man-page) för <em><htmlurl name="printcap" url="http://www.picante.com/~gtaylor/pht/man/printcap.5.html"></em>. <p> Ovanstående ser väldigt enkelt ut, men det finns en hake - såvida inte jag sänder filer som som en desjet 500 förstår kommer denna deskjet att skriva konstiga saker. Till exempel om vi skickar en vanlig Unix text fil till en deskjet får vi en utskrift enligt följande: <tscreen><verb> This is line one. This is line two. This is line three. </verb></tscreen> osv. En PostScript fil som skrivs till denna kö resulterar i en vacker listning av PostScript kommandon, utskrivna med denna trappstegseffekt (staircase effect), men ingen användbar utskrift. <p> Tydligen behövs något mer, och detta är syftet med filtrering (filtering). De mer observanta av er som läste manualsidan till printcap kanske uppmärksammade spool-attributen <em/if/ och <em/of/. Just <em/if/, eller 'input-filter' är precis vad vi behöver här. <p> Om vi skriver ett litet script som lägger till vagnretur före radbyten och kallar det <em/filter/ kan trappstegseffekten elemineras. Vi måste också lägga in en <em/if/ rad i vår printcap-post här ovan: <tscreen><verb> lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :if=/var/spool/lpd/dj/filter:\ :sh: </verb></tscreen> Ett enkelt filterscript skulle kunna vara: <tscreen><verb> #!perl # Raden ovan skall ha hela sökvägen till perl # Scriptet måste vara körbart: chmod 755 filter while(<STDIN>){chop $_; print "$_\r\n";}; # Eventuellt behöver du avsluta med att mata ut papperet: print "\f"; </verb></tscreen> Om vi gjorde som ovan skulle vi få en skrivarkö till vilken vi kunde skriva ut vanliga Unix textfiler och få ett meningsfullt resultat. (Ja, det finns fyra miljoner bättre sätt att skriva detta filter men få som är så illustrativa. Du uppmuntras att göra detta mer effektivt.) <p> Det enda kvarvarande problemet är det att det inte är alltför 'hett' att skriva ut vanlig text - visst skulle det vara bättre att kunna skriva ut PostScript och annan formaterad eller grafisk typ av utskrift. Jo det är klart att det vore bättre, och det är inte svårt att fixa till. Metoden är helt enkelt ett tillägg till ovanstående radmatnings-fixar filter. Om du kan skriva ett filter som kan acceptera godtyckliga filformat som input och producera DeskJet-kosher output för var och en av dessa har du verkligen ett smart utskrifts system. <p> Ett sådant filter kallas ett <em/magic/ filter. Bry dig inte om att skriva ett sådant själv såvida du inte skriver mycket underliga saker - Det finns många redan skrivna åt dig på nätet. APS Filter är bland de bästa, eller din Linuxdistribution kan ha ett skrivarkonfigureringsprogram som gör detta väldigt enkelt. <sect1>Filrättigheter <p> På allmän begäran lägger jag in en lista på filrättigheterna på intressanta filer i mitt system. Det finns flera bättre sätt att lösa detta, idealiskt genom att använda bara SGID binärfiler och inte göra allt SUID root, men så här var mitt system från början och det funkar bra för mig. (Uppriktigt sagt, om din leverantör inte ens kan leverera ett fungerande lpd så är du ute på djupt vatten). <tscreen><verb> -r-sr-sr-x 1 root lp /usr/bin/lpr* -r-sr-sr-x 1 root lp /usr/bin/lprm* -rwxr--r-- 1 root root /usr/sbin/lpd* -r-xr-sr-x 1 root lp /usr/sbin/lpc* drwxrwxr-x 4 root lp /var/spool/lpd/ drwxr-xr-x 2 root lp /var/spool/lpd/lp/ </verb></tscreen> <p> Lpd måste för närvarande köras som root så att den kan ansluta till `low-numbered lp service port'. Den borde bli UID lp.lp eller något sådant efter anslutning, men jag tror inte att den blir det. Det är inte bra. <sect>Skaffa utskriftsmjukvara <p> Många färdigskrivna filterpaket (och annan utskriftsrelaterad mjukvara) finns tillgängliga från <tt><url name="SunSite" url="ftp://sunsite.unc.edu/pub/Linux/system/printing/"></tt>. Program som psutils, a2ps, mpage, dvitodvi, flpr, etc kan alla hittas där. <p> Ett tag fanns det flera olika mjukvarupaket ute som försökte göra skrivarkonfigureringen enklare. De finns troligen kvar, men en av de bästa och aktuellaste är Andreas Klemm's APS Filter paket, som har menystyrd printcap konfigurerare och hanterar praktiskt taget alla tänkbara typer av indata. Om din distributör inte skickar med ett trevligt konfigureringsprogram, är APS Filter rätt väg. <sect>Distributioners lösningar <p> Detta avsnitt är, per definition, inte komplett. Skicka gärna in detaljer om din favoritdistribution. <sect1>Red Hat <p> Red Hat har ett grafiskt verktyg för skrivaradministration (i kontrollpanelen) som kan lägga till nätverksskrivare och lokala skrivare. Det låter dig välja en skrivartyp stödd av ghostscript och en Unixenhetsfil att skriva till, och installerar en post i <em>/etc/printcap</em> och skriver ett kort PostScript-och-ascii magic filter baserat på <tt/gs/ och <tt><htmlurl name="nenscript" url="http://www.picante.com/~gtaylor/pht/man/nenscript.1.html"></tt>. Denna lösning fungerar ganska bra och är enkel att konfigurera för vanligt förekommande fall. <sect1>Andra Distributioner <p> Snälla, skicka mig info om vad andra distributioner gör! <sect>Ghostscript. <p> <htmlurl name="Ghostscript" url="http://www.cs.wisc.edu/~ghost/"> är ett otroligt betydelsefullt program för utskrifter under Linux. De flesta unixprogram som genererar utskrifter genererar PostScript, vilket oftast är ett $100 tillbehör till en skrivare. Ghostscript, å andra sidan, är gratis, och genererar din skrivares språk från PostScript. Kombinerat med ditt <tt/lpd/ input filter, får du en virtuell PostScript skrivare och förenklar livet avsevärt. <p> Ghostscript finns i två versioner. Den kommersiella versionen av Ghostscript, kallad Aladdin Ghostscript, får användas fritt för personligt bruk men får inte distribueras med kommersiella Linuxdistributioner. Den är generellt sätt ett år före den fria versionen. Just nu till exempel så stöder den kommersiella Adobe Acrobat's Portable Document Format, medan den äldre inte gör det. <p> Den fria versionen av Ghostscript är GNU Ghostscript, och är helt enkelt en äldre version av Aladdin ghostscript som vänligt skänkts till GNU. (Heder till Aladdin för detta arrangemang; flera mjukvaruföretag borde stöda free software på detta sätt). <p> Vad du än gör med <tt><htmlurl name="gs" url="http://www.picante.com/~gtaylor/pht/man/gs.1.html"></tt>, var riktigt säker på att det körs med argumentet för att omöjliggöra filaccess (<tt/-dSAFER/). PostScript är ett komplett programspråk, och ett dåligt PostScript program skulle kunna ge dig en rejäl huvudvärk. <p> På tal om PDF, Adobe's Portable Document Format är faktiskt inte mycket mer än organiserad PostScript i en komprimerad fil. Ghostscript kan hantera PDF precis som PostScript. Så du kan bli den första i ditt kvarter med en PDF kapabel skrivare. <sect1>Anropa Ghostscript <p> Vanligtvis körs ghostscript av vilket magic filter du än använder, men i debuggingsyfte är det ofta lämpligt att köra det direkt. <p> <tt>gs -help</tt> ger dig en kort informativ lista på argument och tillgängliga drivrutiner (observera att listan med drivrutiner är inkompilerad, och inte huvudlistan på alla tillgängliga drivrutiner). <p> Du kan köra gs i testsyfte som: <tt>gs <em>options</em> -q -dSAFER -sOutputFile=/dev/lp1 test.ps</tt>. <sect1>Ghostscript output justering <p> Det finns flera saker du kan göra om inte gs´s output blir till belåtenhet (faktisk, kan du göra vad f..n som helst eftersom du har källkoden). <sect2>Output placering och storlek <p> Placering, storlek och utseende av en bild på en sida kontrolleras av de skrivarspecifika drivrutinen i ghostscript. Om utskriften på dina sidor blir för hoptryckt och kort, eller utdragen och lång, eller för stor med en faktor två, bör du titta i din drivrutins källkod och justera vilka parametrar du än hittar. Olyckligtvis är alla drivrutiner olika, så jag kan inte berätta vad du skall justera, men de flesta är skapligt kommenterade. <sect2>Gamma, punktstorlekar, etc. <p> De flesta icke-laser skrivare lider av det faktum att deras punkter är relativt stora. Detta resulterar i att bilder blir för mörka. Om du upplever detta problem skall du använda din egen överföringsfunktion. Skapa följande fil i ghostscripts lib-katalog och lägg dess namn till gs anropet före själva filen. Du måste kanske finjustera värdena för att passa din skrivare. Lägre värden resulterar i ljusare utskrift. Framför allt om din skrivare använder en Floyd-Steinberg algoritm för att rastera färger är troligen lägre värden ( 0.2 - 0.15 ) ett bra val. <tscreen><verb> ---8<---- gamma.ps ----8<--- %! %transfer functions for cyan magenta yellow black {0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer ---8<------------------8<--- </verb></tscreen> <p> Det är också möjligt att fixa skrivare som har något typ av färgfel genom att justera dessa värden. Om du gör något sådant rekommenderar jag att du använder filen colorcir.ps, som finns med ghostscript (i examples/ katalogen), som en provsida.. <sect>Hur man skriver ut på en skrivare över nätverket <p> En av finesserna med lpd är att den stöder utskrift över nätverket till skrivare fysiskt anslutna till en annan maskin. Med en noggran kombination av filter scripts och tillhörande program kan du använda lpd till att på ett raktframt sätt skriva ut på skrivare anslutna till alla sorters nätverk. <sect1>Till en Unix/lpd värd <p> För att låta andra maskiner skriva till din skrivare måste du lista dem i <em>/etc/hosts.equiv</em> eller <em>/etc/hosts.lpd</em>. (Observera att <em/hosts.equiv/ medför andra effekter, var säker på att du vet vad du gör innan du listar någon maskin där). Du kan tillåta bara vissa anvndare på andra maskiner att skriva till din skrivare genom att använda <em/rs/ attributet; läs <tt><htmlurl name="lpd" url="http://www.picante.com/~gtaylor/pht/man/lpd.8.html"></tt> manualsidan för information om detta. <sect2>Med <tt>lpd</tt> <p> För att skriva ut till en annan maskin skapar du en <em>/etc/printcap</em> post som denna: <tscreen><verb> # REMOTE djet500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :rm=machine.out.there.com:\ :rp=printername:\ :lp=/dev/null:\ :sh: </verb></tscreen> Observera att det fortfarande finns en spoolkatalog på den lokala maskinen som hanteras av <tt/lpd/. Om den andra maskinen är upptagen eller offline kommer utskriftsjobben att vänta i spoolkatalogen tills de kan sändas. <sect2>Med <tt>rlpr</tt> <p> Du kan också använda <em>rlpr</em> för att skicka ett utskriftsjob direkt till en kö på en annan maskin utan att behöva gå igenom krånglet med att konfigurera lpd för att fixa det. Detta är användbart framför allt då du skriver till olika skrivare bara någon enstaka gång. Från introduktionen av <em>rlpr</em>: <p> Rlpr använder TCP/IP för att skicka utskriftsjobb till lpd servrar var som helst i ett nätverk. <p> Till skillnad från lpr kräver rlpr *inte* att den andra skrivaren är känd för maskinen som du vill skriva från (t.ex. genom <em>/etc/printcap</em>) och kan därför anses vara mer flexibel och kräver mindre administration. <p> rlpr kan användas överallt där traditionell lpr kan användas och är bakåtkompatibel med traditionell BSD lpr. <p> Den största styrkan med rlpr är förmågan att skriva ut på fjärrenheter *från var-som-helst till var-som-helst* utan att bry sig om hur det andra systemet du vill skriva ut från är konfigurerat. Kan användas som ett filter precis som traditionell lpr så att klienter som körs på en avlägsen maskin som netscape, xemacs, etc, etc kan skriva ut till din maskin med små ansträngningar. <p> Rlpr finns tillgängligt från <tt><url name="SunSite" url="ftp://sunsite.unc.edu/pub/Linux/system/printing/"></tt>. <sect1>Till en Win95, WinNT, LanManager, eller Samba skrivare <p> Det finns en Print to Windows mini-HOWTO där ute som innehåller mer info om detta än vad som finns här. <p> Det är möjligt att leda en lpd kö genom <tt><htmlurl name="smbclient" url="http://www.picante.com/~gtaylor/pht/man/smbclient.1.html"></tt> programmet (en del av samba-sviten) till en TCP/IP baserad SMB print service. Samba inkluderar ett script för detta som kallas <tt/smbprint/. Kortfattat går det till så att du lägger en konfigurationsfil för skrivaren i fråga i spool katalogen och installerar <tt/smbprint/ scriptet som <em/if/. <p> <em>/etc/printcap</em> posten ser ut så här: <tscreen><verb> lp|remote-smbprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lp:\ :if=/usr/local/sbin/smbprint: </verb></tscreen> <p> Du skall läsa dokumentationen i <tt/smbprint/ scriptet för ytterligare information om hur du konfigurerar detta. <p> Du kan också använda <tt>smbclient</tt> för att sända en fil direkt till ett SMB printing system utan att blanda in <tt>lpd</tt>. Se manualsidan. <sect1>Till en NetWare Printer <p> ncpfs sviten inkluderar en funktion som kallas <tt/nprint/ som tillhandahåller samma funktion som <tt/smbprint/ fast for NetWare. Du kan skaffa ncpfs från <htmlurl name="SunSite" url="ftp://sunsite.unc.edu/pub/Linux/system/filesystems/ncpfs/">. Utdrag ur LSM posten för version 0.16: <quote> With ncpfs you can mount volumes of your netware server under Linux. You can also print to netware print queues and spool netware print queues to the Linux printing system. You need kernel 1.2.x or 1.3.54 and above. ncpfs does NOT work with any 1.3.x kernel below 1.3.54. </quote> <p> För att få <tt/nprint/ att fungera via lpd måste du skriva ett litet script som skriver stdin på NetWare skrivaren och installera detta som <em/if/ till en lpd skrivarkö. Du får något som liknar: <tscreen><verb> sub2|remote-NWprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/sub2:\ :if=/var/spool/lpd/nprint-script: </verb></tscreen> <tt>nprint-scriptet</tt> borde se ut ungefär så här: <tscreen><verb> #! /bin/sh # You should try the guest account with no password first! /usr/local/bin/nprint -S net -U name -P passwd -q printq-name - </verb></tscreen> <sect1>Till en EtherTalk (Apple) skrivare <p> Netatalk paketet innehåller någonting som liknar <tt/nprint/ och <tt/smbclient/. Andra har dokumenterat proceduren för att skriva till och från ett Apple nätverk mycket bättre än vad jag någonsin kommer att göra, se <url name="Linux Netatalk-HOWTO" url="http://thehamptons.com/anders/netatalk/">. <sect1>Till en HP eller annan ethernet skrivare <p> HP och några andra skrivare levereras med ett ethernet interface som du kan skriva till direkt med lpd. Du skall följa instruktionerna som följer skrivaren eller dess nätverskadapter. Generellt sett "kör" dessa skrivare lpd och har en eller flera köer till vilka du kan skriva. En HP, till exempel, borde fungera med en printcap post som: <tscreen><verb> lj-5|remote-hplj:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :rm=printer.name.com:rp=raw: </verb></tscreen> <p> HP Laserjet skrivare med Jet Direct interfaces har vanligtvis två stycken inbyggda lpd köer - "raw" som accepterar PCL (och möjligtvis PostScript) och "text" som accepterar ren ascii (och hanterar automatiskt trappstegseffekten). Om du har en JetDirect Plus3 tre-portsburk, heter köerna "raw1", "text2", o.s.v. <p> I en storskalig miljö, framför allt där inte alla skrivare stöder PostScript, kan det vara lämpligt att utse en speciell skrivarserver till vilken alla maskiner skriver och på vilken alla ghostscript jobb körs. <p> Detta låter också din Linuxburk att agera som en spool server till skrivaren så att dina nätverksanvändare snabbt kan avsluta sina utskriftsjobb och forsätta med annat utan att vänta på att skrivaren skall skriva ut något som någon annan har skickat. <p> För att åstadkomma detta, sätt upp en kö på din Linuxburk som pekar på den ethernetutrustade HP LJ (som ovan). Sen konfigurerar du alla klienter på ditt LAN att skriva till denna kö (ex. lj-5 i exemplet ovan). <p> Till en del HP nätverksskrivare behöver troligen inte försättsbladsinställningen skickas av klienterna, du kan stänga av deras internt genererade försättsblad genom att 'telnetta' till printern, trycka retur två gånger, skriva "banner: 0" följt av "quit". Det finns flera inställningar som du kan ändra på detta vis, skriv "?" för att se en lista. <sect2>Till äldre HPs <p> En del skrivare (och skrivarrutiner i nätverk som "black boxes") stöder bara ett dåligt litet icke-protokoll med rena TCP anslutningar. Att märka i denna kategori är tidiga JetDirect (inkluderande en del JetDirectEx) kort. Kortfattat, för att skriva till skrivaren måste du öppna en TCP anslutning till skrivaren på en speciell port (vanligtvis 9100 eller 9100, 9101, 9102 för tre-ports) och stoppa in ditt utskriftsjobb i skrivaren. Detta kan, bland annat, implementeras med Perl: <tscreen><verb> #!/usr/bin/perl # Thanks to Dan McLaughlin for writing the original version of this # script (And to Jim W. Jones for sitting next to Dan when writing me # for help ;) $fileName = @ARGV[0]; open(IN,"$fileName") || die "Can't open file $fileName"; $dpi300 = "\x1B*t300R"; $dosCr = "\x1B&ero;k3G"; $ends = "\x0A"; $port = 9100 unless $port; $them = "bach.sr.hp.com" unless $them; $AF_INET = 2; $SOCK_STREAM = 1; $SIG{'INT'} = 'dokill'; $sockaddr = 'S n a4 x8'; chop($hostname = `hostname`); ($name,$aliases,$proto) = getprotobyname('tcp'); ($name,$aliases,$port) = getservbyname($port,'tcp') unless $port =~ /^\d+$/;; ($name,$aliases,$type,$len,$thisaddr) = gethostbyname($hostname); ($name,$aliases,$type,$len,$thataddr) = gethostbyname($them); $this = pack($sockaddr, $AF_INET, 0, $thisaddr); $that = pack($sockaddr, $AF_INET, $port, $thataddr); if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) { # print "socket ok\n"; } else { die $!; } # Give the socket an address. if (bind(S, $this)) { # print "bind ok\n"; } else { die $!; } # Call up the server. if (connect(S,$that)) { # print "connect ok\n"; } else { die $!; } # Set socket to be command buffered. select(S); $| = 1; select(STDOUT); # print S "@PJL ECHO Hi $hostname! $ends"; # print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends"; # print S $dpi300; # Avoid deadlock by forking. if($child = fork) { print S $dosCr; print S $TimesNewR; while (<IN>) { print S; } sleep 3; do dokill(); } else { while(<S>) { print; } } sub dokill { kill 9,$child if $child; } </verb></tscreen> <sect1>Köra ett <em/if/ för fjärrskrivare <p> En underlighet men lpd är att <em/if/ inte körs för fjärranslutna skrivare. Om du finner att du behöver köra ett <em/if/, så kan du göra detta genom att konfigurera en dubbel kö och köa om jobbet. Som ett exempel studera följande <em/printcap/: <tscreen><verb> lj-5:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :if=/usr/lib/lpd/filter-lj-5: lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\ :rp=raw:sd=/var/spool/lpd/lj-5-raw: </verb></tscreen> belyst av detta <tt/filter-lj-5/ script: <tscreen><verb> #!/bin/sh gs <options> -q -dSAFER -sOutputFile=- - | \ lpr -Plj-5-remote -U$5 </verb></tscreen> <p> Argumentet <em/-U/ till lpr fungerar bara om lpr körs som en daemon och sätter begärarens namn för jobbet i den andra kön på rätt sätt. Du bör använda en mer rubust metod för att få användarnamnet eftersom det i vissa fall inte är argument 5. Se manualsidan för <em><htmlurl name="printcap" url="http://www.picante.com/~gtaylor/pht/man/printcap.5.html"></em>. <sect1>Från Windows. <p> Att skriva från en Windows (eller förmodligen OS/2) klient till en Linuxserver är direkt stödd över SMB genom användande av SAMBA paketet, som dessutom stöder fildening av ditt Linux filsystem till Windowsklienter. <p> Samba inkluderar en ganska komplett dokumentation, och det finns en bra Samba FAQ som också täcker det. Du kan antingen konfigurera ett magic filter på Linuxburken och skriva PostScript till detta eller springa runt och installera skrivarspecifica drivrutiner på alla Windowmaskiner och ha en kö för dem utan något filter. Att förlita sig på Windows drivrutiner kan i en del fall leda till bättre utskrifter, men ar mer administrativt krävande om det är många Windowsmaskiner. Du bör testa PostScript först. <sect1>Från en Apple. <p> Netatalk stöder utskrift från Apple klienter över EtherTalk. Se <url name="Netatalk HOWTO Page" url="http://thehamptons.com/anders/netatalk/"> för mer information. <sect1>Från Netware. <p> ncpfs paketet inkluderar en daemon som heter pserver som kan användas till att serva en NetWare skrivarkö. Vad jag har förstått kräver ett sådant system "Bindery-Based NetWare" d.v.s. 2.x, 3.x eller 4,x med "bindery access" aktiverad. <p> För ytterligare information om ncpfs och dess pserver progam, se <url url="ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/" name="the ncpfs FTP site">. <sect>Windows-only skrivare <p> Som jag tidigare nämnt är en del skrivare i sig inte stödda i Linux eftersom de inte talar normalt skrivarspråk utan istället använder datorns CPU för att skapa bitmappar som sedan skickas till skrivare i en bestämd hastighet. I några få fall talar dessa skrivare också något normalt, som PCL, men oftast inte. I en del (verkligt lågklass) fall använder inte skrivaren ens en normal parallellanslutning utan förlitar sig på att tillverkarens drivrutin skall emulera hur hårdvaran skall uppföra sig (det viktigaste är handskakningen `handshaking'). <p> I alla fall, det finns några få trix att komma runt problemet om du har fastnat med en sådan otrevlighet. <sect1>Ghostscripts Windowsbaserade omdirigerare <p> Det finns nu en Windows skrivardrivrutin tillgänglig (heter mswinpr2) som kör ett skrivarjobb genom Ghostscript innan det slutligen skriver ut det. (Istället för ett if filter i Unix's LPD). Det finns också en ny Ghostscript drivrutin som skriver genom att använda Windows GDI anrop. Tillsammans, bör detta tillåta en Windows maskin att skriva PostScript till en Windows-only skrivare genom tillverkarens drivrutin. <p> Om du får det att funka, kan du följa instruktionerna ovan för att skriva till en Windows skrivare över nätverket från Linux för att låta Unix (och andra Windows, Mac, etc) värdar att skriva till din otrevliga skrivare. <p> Det skall sägas att jag aldrig testat detta eftersom jag inte har någon Windowsskrivare, så du får testa själv. All inblandad mjukvara skall gå att hitta på Ghostscript's hemsida (se länkarna i Ghostscriptavsnittet i detta dokument). <sect1>Programmet pbm2ppa <p> En del HP skrivare använder "Printing Performance Architecture" (marknadsföringsspråk för "vi är för billiga för att implementera PCL"). Detta stöds via en omväg över pbm2ppa översättaren, skriven av Tim Norman. Vanligtvis använder du Ghostscript för att översätta PostScript till en bitmappad bild i pbm format och sedan använder pbm2ppa för att översätta denna till ett skrivarspecifikt ppa format klart för att dumpas till skrivaren. Detta program kan också ha kommit i en Ghostscript drivare vid det här laget. <p> ppa mjukvaran kan hämtas från <url url="http://www.rpi.edu/~normat/technical/ppa/" name="the ppa home page">. pbm2ppa stöder en del modellar av HP 720, 820, och 1000; läs dokumentationen som följer med paketet för detaljer om ppa skrivarstöd. <sect>Hur skriver man ut till en fax. <sect1>Med ett faxmodem <p> Det finns ett flertal faxprogram där ute som låter dig faxa och ta emot dokument. Ett av de mest komplexa är Sam Leffler's <em/HylaFax/, tillgängligt från <tt/ftp.sgi.com/. Det stöder allt från flera modem till broadcasting (=sända till flera samtidigt). <p> SuSE levererar en Java HylaFax klient som påstås fungera på vilken Java plattform som helst (inkluderande Windows och Linux). Det finns också icke-Java fax klienter till de flesta plattformar, Linux kan med största sannolikhet hantera dina nätverks fax behov. <p> Dessutom finns, och ett bättre val för de flesta Linuxburkar, <tt><htmlurl name="efax" url="http://www.picante.com/~gtaylor/pht/man/efax.1.html"></tt>, ett enkelt program som skickar fax. Getty-programmet <tt/mgetty/ kan ta emot fax (och till och med voicemail på en del modem!). <sect1>Använda Remote Printing Service <p> Det finns en experimentell service som låter dig sända ett e-postmeddelande som innehåller det du vill skriva ut på en fax någonstans. Trevliga format som postscript stöds, så även om global täckning är gles kan detta vara en användbar service. För ytterligare information om att skriva ut till en fax via remote printing service, se <url url="http://www.tpc.int/" name="Remote Printing WWW Site">. <sect>Hur generar jag något värt att skriva ut. <p> Här går vi in i ett riktigt råttbo av mjukvara. Normalt kan Linux köra flera typer av binärfiler med varierande grad av framgång: Linux/x86, Linux/Alpha, Linux/Sparc, Linux/foo, iBCS, Win16/Win32s (med dosemu och, någon dag, med Wine), Mac/68k (med Executor), och Java. Jag kommer bara att ta upp rena Linux och vanliga Unix program. <p> Till Linux självt faller valet oftast begränsat till de program som normalt finns till Unix: <sect1>Markeringsspråk (Markup languages) <p> De flesta markeringsspråk passar bäst till stora eller repetitiva projekt där du vill att datorn skall ta hand om layouten av texten för att göra den enhetlig. Att försöka göra ett snyggt tecken i ett markeringspråk kommer förmodligen att göra ont... <p> <descrip> <tag><tt>nroff</tt></tag>Detta var ett av de första markeringsspråken till Unix. Manualsidorna är de vanligaste exemplen på jobb som formaterats med *roff macros; många älskar dem, men nroff har, åtminstone för mig, en krångligare syntax än nödvändigt, och är förmodligen ett dåligt val för nya arbeten. Det är dock värt att veta att du kan typsätta en manualsida direkt till postscript med groff. De flesta man kommandon gör det åt dig med <tt/man -t foo | lpr/. <tag/TeX/TeX, och macropaketet LaTeX, är en av de mest använda markeringsspråken använda i Unix. Tekniska arbeten skrivs ofta i LaTeX eftersom det verkligen underlättar layoutproblem och är <em/forfarande/ ett av de få ordbehandlar system som stöder matematik både komplett och bra. TeX's output format är <tt/dvi/, som konvereras till PostScript eller Hewlett Packard's PCL med <tt/dvips/ eller <tt/dvilj/. <tag/SGML/Det finns åtminstone en fri sgml analyserare för Unix och Linux; den formar grunden för Linuxdoc-SGML's egna dokumentsystem. Det kan stödja andra DTD´s (dokument-typ-deklarationer) också. <tag/HTML/Någon föreslog att man för enkla projekt kan skriva i HTML och sedan skriva ut med Netscape. Jag håller inte med, men det står för mig. </descrip> <sect1>WYSIWYG Ordbehandlare <p> Det är inte längre någon brist på WYSIWYG ordbehandlings mjukvara. Flera kompletta Office paket finns tillgängliga. Ett av dem är gratis för personligt bruk (StarOffice). <descrip> <tag/StarOffice/ Ett tyskt företag distribuerar StarOffice på Internet gratis för Linux. Detta fullfjädrade office paket har allt du kan förvänta dig, och du slår inte priset. Det finns en mini-HOWTO där ute som beskriver hur du skaffar och installerar det. Det generear PostScript eller PCL så det fungerar med i stort sätt alla skrivare som normalt fungerar med Linux. <tag/LyX/ LyX är ett skal till LaTeX som verkar mycket lovande. Se the <url name="LyX Homepage" url="http://www.lyx.org/"> för mer information. Det finns en KDE version av LyX som heter KLyX. Författaren till Lyx och upphovsmannen till KDE är samma person. <tag/The Andrew User Interface System/ AUIS inkluderar <tt/ez/, en WYSIWYG-liknande editor med de vanligaste ordbehandlings tillbehören, HTML kapabilitet coh full MIME e-post och newsgroup stöd. Tyvärr underhålls inte AUIS längre. <tag/Koffice/The KDE project arbetar på en hel office svit. Jag tror inte att den är redo för att presenteras ännu. <tag/GNOME/The GNOME project arbetar också på några GNU-licensierade office-verktyg. Inget finns tillgängligt ännu, dock. <tag/Kommersiella alternativ/ Åtminstone Caldera och Red Hat säljer programpaket innehållande de vanliga office applikationerna som en WYSIWYG ordbehandlare och ett kalkylprogram. Jag antar att de gör ett snyggt jobb, men jag har aldrig testat dem. Jag tror att Caldera säljer Sun's WABI också, så du kan förmodligen köra någonting som MS Office under det om du måste integrera med andras filer. <p> Jeff Phillips <tt/<jeff@I_RATUS.org>/ använder Caldera's WordPerfect för Linux (på Slackware, av alla) och säger att det fungerar bra. Det inkluderar tydligen inbyggt skrivarstöd, som man borde förvänta sig. Caldera borde ha mer information på <url url="http://www.caldera.com/">. Du kan också köpa en nyare version av WordPerfect direkt från en av Corels utvalda Unix återförsäljare. <p> RedHat och SuSE levererar ett paket som heter <em/Applixware/; du hittar deras hemsida på <url url="http://www.redhat.com/">. Applix finns tillgänglig till många plattformar och inkluderar, kalkylprogram, ordbehandlingsprogram, presentationspaket, osv. Det finns en separat version av Applix tillgänglig i Java som heter ApplixAnyWhere, jag antar att den är ganska lika som den andra men långsammare och med mindre finesser. <p> Andra handlare kan gärna skicka mig en rad med deras erbjudanden. </descrip> <sect>Förhandsgranskning av utskrivbara saker på skärmen. <p> Nästan allt du kan skriva ut kan också förhandsgranskas på skärmen. <sect1>PostScript <p> Ghostscript har en X11 drivrutin som fungerar bäst under kontroll av PostScript förhandsgranskaren <htmlurl name="Ghostview" url="http://www.picante.com/~gtaylor/pht/man/gv.1x.html">. De senaste versionerna av dessa program borde kunna visa PDF filer också. Märk att gv har bytt ut den gamla förhandsgranskaren "Ghostview", det nya användargränssnittet är mycket snyggare och har mer finesser än det enkla gamla Athena gränssnittet. <sect1>TeX dvi <p> TeX DeVice Independant filer kan förhandsgranskas under X11 med <htmlurl name="xdvi" url="http://www.picante.com/~gtaylor/pht/man/xdvi.1.html">. Moderna versioner av xdvi anropar ghostscript för att rendera PostScript specialare. <p> En VT100 drivrutin finns också. Den heter <tt/dgvt/. <tt/Tmview/ fungerar med Linux och svgalib, om det är allt du kan åstadkomma. <sect1>Adobe PDF <p> Adobe's Acrobat Reader finns till Linux; ladda bara hem den från deras hemsida <url url="http://www.adobe.com/">. <p> Du kan även använda xpdf, som är freeware och levereas med källkod, och jag tror att Ghostview stöder visning av PDF filer med gs under X11 vid den här tiden. <sect>Seriella skrivare under lpd <sect1>Konfigurera i printcap <p> Lpd tillhandahåller fem attribut vilka du kan sätta i <em>/etc/printcap</em> för att styra inställningarna av den seriella port som skrivaren sitter på. Läs <em><htmlurl name="printcap" url="http://www.picante.com/~gtaylor/pht/man/printcap.5.html"></em> manualsidan och notera betydelsen av <em/br#/, <em/fc#/, <em/xc#/, <em/fs#/ och <em/xs#/. De siste fyra av dessa attribut är bitmaps som indikerar inställningarna för att använda porten. Till exempel <em/br#/ atrributet är helt enkelt baudtalet t.ex. `<tt/br#9600/'. <p> Det är väldigt enkelt att översätta från <htmlurl name="stty" url="http://www.picante.com/~gtaylor/pht/man/stty.1.html"> inställningar till printcap argumentinställningar. Om du behöver, titta i manualsidan för stty nu. <p> Använd stty för att konfigurera skrivarporten så att du kan `cat' en fil till den och den skrivs ut korrekt. Då här ser `<em/stty -a/' ut för min skrivarport: <tscreen><verb> dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2 speed 9600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke </verb></tscreen> De enda skillnaderna mellan denna och det sätt porten initieras vid systemstarten är <tt/-clocal/, <tt/-crtscts/, och <tt/ixon/. Din port kan vara annorlunda beroende på hur din skrivare gör flödeskontroll. <p> Du använder faktiskt stty på ett på någotvis udda sätt. Eftersom stty kör mot terminalen som är kopplad till dess standard input, använder du det till manipulera en given serieport genom att använda tecknet `<tt/</' enligt ovan. <p> När du väl fått stty inställningarna rätt, så att `<em>cat fil > /dev/ttyS2</em>' (i mitt fall) sänder filen till skrivaren, tittar du i filen /usr/src/linux/include/asm-i386/termbits.h. Denna innehåller en en hel del #defines och några structs. (Du kanske vill `cat'a denna fil till skrivaren (det funkar ju nu, eller hur?) och använda den som ett kladdpapper) Gå till sektionen som börjar med <tscreen><verb> /* c_cflag bit meaning */ #define CBAUD 0000017 </verb></tscreen> Denna sektion listar betydelsen av <em/fc#/ och <em/fs#/ bitarna. Du kommer att märka att namnen där (efter baudtalen) matchar en av raderna av stty output. Sa jag inte att detta skulle bli enkelt? <p> Notera vilken av inställningarna som inleds med ett - i din stty output. Summera ihop alla dessa siffror (de är oktala). Detta representerar de bitar som du vill "clear"a, så resultatet är din <em/fc#/ möjlighet. Naturligvis, kom ihåg att du kommer att sätta dessa bitar direkt efter du har "clear"at, så du kan använda `<tt/fc#0177777/' (Det gör jag). <p> Nu gör du detsamma för inställningarna (listade i denna sektion) som inte har ett - före dem i din stty output. I mitt exempel är de viktiga CS8 (0000060), HUPCL (0002000), och CREAD (0000200). Notera också argumenten för ditt baudtal (mitt är 0000015). Lägg ihop dessa, och i mitt exempel får du 0002275. Det skall in i din <em/fs#/ möjlighet (`<tt/fs#02275/' funkar bra i mitt exempel). <p> Gör samma sak med set och clear för nästa sektion av include filen, "c_lflag bits". I mitt fall behövde jag inte "set"a något så jag använde bara `<tt/xc#0157777/' och `<tt/xs#0/'. <sect1>Äldre seriella skrivare som tappar tecken <p> Jon Luckey pekar ut att några äldre seriella skrivare med billiga seriella interface och små buffers <em/verkligen/ menar stopp när de säger så med flödeskontrollen. Han kom på att stänga av FIFO'n på hans Linuxburks 16550 serieportar med <tt><htmlurl name="setserial" url="http://www.picante.com/~gtaylor/pht/man/setserial.8.html"></tt> fixade problemet med tappade tecken (du till synes bara specificerar uart typen till 8250 för åstadkomma detta). <sect>Tack till <p> <tt/smbprint/ informationen är från en artikel av Marcel Roelofs <tt/<marcel@paragon.nl>/. <p> <tt/nprint/ informationen för att använda Netware skrivare tillhandahölls av Michael Smith <tt/<mikes@bioch.ox.ac.uk>/. <p> Seriella skrivare under lpd sektionen är från Andrew Tefft <tt/<teffta@engr.dnet.ge.com>/. <p> Stoffet om gammas och sådant för gs skickades in av Andreas <tt/<quasi@hub-fue.franken.de>/. <p> De två paragraferna om 30 sekunders closing_wait för den seriella drivrutinen tillhandahölls av Cris Johnson <tt/<cdj@netcom.com>/. <p> Robert Hart skickade in några utmärkta paragrafer om konfigureringen av en utskriftsserver till nätverks HPs som jag använde ordagrant. <p> Och speciellt tack till er dussin på dussin som påpekat stavfel, brustna URL:er och fel i dokumentet över åren. </article>