Welcome!

Eclipse Authors: Pat Romanski, Elizabeth White, Liz McMillan, David H Deans, JP Morgenthal

Related Topics: Open Source Cloud

Open Source Cloud: Article

Linux System Administration: A User's Guide Part 2 of 3

Linux System Administration: A User's Guide Part 2 of 3

This is an excerpt from Chapter 13 of Linux System Administration: A User's Guide written by Marcel Gagne, published by Addison-Wesley. ISBN 0201719347. No part of this excerpt may be reproduced, in any form or by any means without the prior written permission of the publisher. (c) 2002 Addison-Wesley

Printing Anything to Any Printer
I'd like to talk a little bit more about filters. In my office I have a small HP LaserJet 5L. It's the one I've been using for all the examples in this chapter. If you've spent any time whatsoever with Linux (or other UNICes/UNIXes), you know that most applications print using the PostScript format. Unfortunately, my printer doesn't print PostScript. Luckily, Linux is distributed with a little package called ghostscript.

I won't spend much time on ghostscript except to tell you that it's a powerful tool that also makes a great print filter. If I try to print a PostScript file to my printer, it comes out as strange text, which just happens to be a kind of code - code written in the PostScript language. Looking at the first 10 lines of a PostScript file on my system, I see this:

# head contact.ps
%!PS-Adobe-PS
%%BoundingBox: 54 72 558 720
%%Creator: Mozilla (NetScape) HTML->PS
%%DocumentData: Clean7Bit
%%Orientation: Portrait
%%Pages: 1
%%PageOrder: Ascend
%%Title: Registrant Name Change Agreement
%%EndComments
%%BeginProlog

This is also what it looks like if I just send it to my printer without a filter of some kind that can interpret PostScript. Different Linux distributions offer different alternative filters, but all should have ghostscript in common.

Here's an example: I'll send my contact.ps file to the printer but pass it through a ghostscript filter beforehand. (Note that the following line wraps. It's just one line.)

# cat contactm.ps | gs -q -dNOPAUSE -sDEVICE=ljet4 -r300
-sPAPERSIZE=letter -sOutputFile=- - | lpr

I know it looks like a lot to take in, but it's pretty simple. The -q means that ghostscript should perform its work quietly. Normally, ghostscript would put out a lot of "this is what I am currently doing" information, not what I want for a print job. The-dNOPAUSE tells ghostscript to process all pages without pausing to ask for directions. The first -s flag that you see specifies the printer type. The ljet4 definition covers a whole range of LaserJet printers that can do 600 dpi resolution.

This brings me to the -r flag, where I define a 300 dpi resolution. This Netscape Navigator-generated page (remember, you can print to a file when using Netscape Navigator) doesn't need a 600 dpi resolution. ghostscript also enables me to specify paper size, important for those of us in North America who hold firmly (if not wisely) to the 81/2x11-inch letter-size format. Finally, I specify standard out as my output file. Notice the last hyphen in that line. It means that ghostscript is taking the input through its standard in. The last thing I do is fire it to the printer.

The great thing about ghostscript is its extensive printer support. Visit the ghostscript printer support page (www.cs.wisc.edu/~ghost/) to see the latest and greatest list of support. When you visit the site, scroll down the list and click the "printer compatibility" link.

Armed with this, I could use essentially the same line to create an output filter for printing. Remember the dosfilter example earlier? There was only one real active line in the filter script (other than the staircase effect change) and that was a simple cat. That line would now be the ghostscript line from the previous code minus the | lpr at the end of it.

gs -q -dNOPAUSE -sDEVICE=ljet4 -r300 -sPAPERSIZE=letter -sOutputFile=- -

You can even use ghostscript as a desktop X viewer for PostScript files and documents by simply typing gv followed by the name of the file you want to see. gv, as you might have guessed, stands for "ghostscript viewer" (see Figure 1).

gv netscape_out.ps

Tying It Up: Advanced Filters with Ghostscript
All right, let's put some of the ideas from Parts 1 and 2 together. As I mentioned, a number of programs generate PostScript only rather than trying to create output for different printer types and languages. In the Linux world, that accounts for a lot of programs. Netscape Navigator is one such program, as is StarOffice from Sun Microsystems. So how do you deal with this?

Let's start with a quick reminder of the ghostscript output filter to convert PostScript to my LaserJet 5L printer. I've saved this file as /usr/local/ bin/psfilter and made it executable with chmod 755 /usr/local/ bin/psfilter.

#!/bin/bash
#
# Ghostscript filter so that my HP LJ5 will print PostScript files
#
echo -ne \\033\&k2G
gs -q -dNOPAUSE -sDEVICE=ljet4 -r300 -sPAPERSIZE=letter
-sOutputFile=- -

Now I also have a definition for the printer that uses that output filter.

pshpljet:\
:sd=/var/spool/lpd/pshpljet:\
:mx#0:\
:sh:\
:lp=/dev/lp0:\
:of=/usr/local/bin/psfilter:

Why PostScript?
The simple answer is that PostScript is close to a standard for defining objects (whether text or graphics) to printers, plotters, and even video screens. PostScript was designed to be completely device independent. Consequently, it provides a virtually universal print file format. PostScript (a trademark of Adobe Systems) was developed in the mid-'80s and is actually a programming language. Because PostScript files are plain text, you can use a text editor to modify the source - even that of an image.

PostScript has been used in the UNIX world for many, many years. Because a number of the programs that come with your Linux system were originally designed in the UNIX world, it's not surprising that they work with PostScript. This is a plus, not a minus. As a result, you'll find many great tools specifically for working with PostScript. Furthermore, because you can print any PostScript file to any printer, everyone can do this.

A Few PostScript Tricks
Say you've got a two-page document (a program listing or a collection of bad, but funny, one-liners) and you want it to take up only one page (they're not that good). That's where the mpage command comes into play. You're now going to print this document so that two pages fit onto one. The output will be rotated, so this will actually come out as portrait orientation.

mpage -2 funnyjokes.txt | lpr -Ppshpljet

The two pages appear on one page with a nice thin line around both pages. Let's make this just a little fancier, shall we? Try out the next command and see what kind of output it generates.

mpage -2 -B-5r-5l-3t-3b3 -M50l50r50t50b -H prog_specs.txt | lpr -Plptest

What does this all mean? The -2, by the way, could be a -4 to fit four logical pages per physical page. Just so you're clear on my hastily chosen terminology, I'm using the terms logical and physical to differentiate the printer output from the physical, "hold it in your hand" page. You can even do a -8, but that might be getting a tad silly. The -B-5r-5l-3t-3b3 part means that a bold line (3 point) should be drawn around the box. That's actually the last 3 at the end of that line. The -5r-5l-3t-3b part means that you want a three-line margin at the top and bottom and a five-character margin at the left and right. The -M line uses a similar format and gives you a 50-point margin all around your virtual page. Remember that you have two logical pages on one physical page in this example. Finally, -H means you want a header on each page. The header has the date on the right, the filename in the center, and a page number on the right.

Where would you use this? One place that comes immediately to mind (after the one-liners, that is) is source code for your programs. This is a great way to generate compact program listings without having to import them into a word processor. I should point out that there is a non-PostScript way to create simple, numbered pages. All you have to do is use the pr command. Try this with a text-only printer definition:

pr +2 -h "Secret Kernel Enhancements" -o 5 ftl_travel.c | lpr -Ptextonly

pr is a command designed to format text for printing. The preceding line says to take the file ftl_travel.c, start printing at page 2 (+2), add a left-hand indent of 5 spaces (-o 5), and print the header "Secret Kernel Enhancements" on each page (-h followed by a string). If you do not specify a different header name, you'll get the filename itself, in this case ftl_travel.c. Oh, yes…it will actually start numbering the pages at page 2.

End Part 2

More Stories By Maureen O'Gara

Maureen O'Gara the most read technology reporter for the past 20 years, is the Cloud Computing and Virtualization News Desk editor of SYS-CON Media. She is the publisher of famous "Billygrams" and the editor-in-chief of "Client/Server News" for more than a decade. One of the most respected technology reporters in the business, Maureen can be reached by email at maureen(at)sys-con.com or paperboy(at)g2news.com, and by phone at 516 759-7025. Twitter: @MaureenOGara

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


IoT & Smart Cities Stories
CloudEXPO New York 2018, colocated with DXWorldEXPO New York 2018 will be held November 11-13, 2018, in New York City and will bring together Cloud Computing, FinTech and Blockchain, Digital Transformation, Big Data, Internet of Things, DevOps, AI, Machine Learning and WebRTC to one location.
Andrew Keys is Co-Founder of ConsenSys Enterprise. He comes to ConsenSys Enterprise with capital markets, technology and entrepreneurial experience. Previously, he worked for UBS investment bank in equities analysis. Later, he was responsible for the creation and distribution of life settlement products to hedge funds and investment banks. After, he co-founded a revenue cycle management company where he learned about Bitcoin and eventually Ethereal. Andrew's role at ConsenSys Enterprise is a mul...
DXWorldEXPO | CloudEXPO are the world's most influential, independent events where Cloud Computing was coined and where technology buyers and vendors meet to experience and discuss the big picture of Digital Transformation and all of the strategies, tactics, and tools they need to realize their goals. Sponsors of DXWorldEXPO | CloudEXPO benefit from unmatched branding, profile building and lead generation opportunities.
Disruption, Innovation, Artificial Intelligence and Machine Learning, Leadership and Management hear these words all day every day... lofty goals but how do we make it real? Add to that, that simply put, people don't like change. But what if we could implement and utilize these enterprise tools in a fast and "Non-Disruptive" way, enabling us to glean insights about our business, identify and reduce exposure, risk and liability, and secure business continuity?
The deluge of IoT sensor data collected from connected devices and the powerful AI required to make that data actionable are giving rise to a hybrid ecosystem in which cloud, on-prem and edge processes become interweaved. Attendees will learn how emerging composable infrastructure solutions deliver the adaptive architecture needed to manage this new data reality. Machine learning algorithms can better anticipate data storms and automate resources to support surges, including fully scalable GPU-c...
DXWorldEXPO LLC announced today that Telecom Reseller has been named "Media Sponsor" of CloudEXPO | DXWorldEXPO 2018 New York, which will take place on November 11-13, 2018 in New York City, NY. Telecom Reseller reports on Unified Communications, UCaaS, BPaaS for enterprise and SMBs. They report extensively on both customer premises based solutions such as IP-PBX as well as cloud based and hosted platforms.
Digital Transformation: Preparing Cloud & IoT Security for the Age of Artificial Intelligence. As automation and artificial intelligence (AI) power solution development and delivery, many businesses need to build backend cloud capabilities. Well-poised organizations, marketing smart devices with AI and BlockChain capabilities prepare to refine compliance and regulatory capabilities in 2018. Volumes of health, financial, technical and privacy data, along with tightening compliance requirements by...
@DevOpsSummit at Cloud Expo, taking place November 12-13 in New York City, NY, is co-located with 22nd international CloudEXPO | first international DXWorldEXPO and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The widespread success of cloud computing is driving the DevOps revolution in enterprise IT. Now as never before, development teams must communicate and collaborate in a dynamic, 24/7/365 environment. There is no time t...
DXWorldEXPO LLC announced today that "IoT Now" was named media sponsor of CloudEXPO | DXWorldEXPO 2018 New York, which will take place on November 11-13, 2018 in New York City, NY. IoT Now explores the evolving opportunities and challenges facing CSPs, and it passes on some lessons learned from those who have taken the first steps in next-gen IoT services.
SYS-CON Events announced today that Silicon India has been named “Media Sponsor” of SYS-CON's 21st International Cloud Expo, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Published in Silicon Valley, Silicon India magazine is the premiere platform for CIOs to discuss their innovative enterprise solutions and allows IT vendors to learn about new solutions that can help grow their business.