Tải bản đầy đủ (.pdf) (64 trang)

Common UNIX Printing System Sweet phần 1 pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.32 MB, 64 trang )

cover next page >
Cover
title : Common UNIX Printing System
author : Sweet, Michael.
publisher : Pearson Education, Inc.
isbn10 | asin : 0672321963
print isbn13 : 9780672321962
ebook isbn13 : 9780768658026
language : English
subject UNIX (Computer file) , Client/server computing, Printing.
publication date : 2002
lcc : QA76.76.O63S943 2002eb
ddc : 005.432
subject : UNIX (Computer file) , Client/server computing, Printing.
cover next page >
< previous page page_i next page >
Page i
Common UNIX Printing System
MICHAEL R. SWEET
< previous page page_i next page >
< previous page page_ii next page >
Page ii
Common UNIX Printing System
Copyright © 2002 by Sams Publishing
All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted
by any means, electronic, mechanical, photocopying, recording, or otherwise, without written permission
from the publisher. No patent liability is assumed with respect to the use of the information contained
herein. Although every precaution has been taken in the preparation of this book, the publisher and
author assume no responsibility for errors or omissions. Nor is any liability assumed for damages resulting
from the use of the information contained herein.
International Standard Book Number: 0-672-32196-3


Library of Congress Catalog Card Number: 2001089505

Printed in the United States of America

First Printing: August 2001

04 03 02 01 4 3 2 1
Trademarks
The UNIX trademark is also shown as Unix; both are registered trademarks of the X Open Group, Inc. All
other terms mentioned in this book that are known to be trademarks or service marks have been
appropriately capitalized. Sams Publishing cannot attest to the accuracy of this information. Use of a term
in this book should not be regarded as affecting the validity of any trademark or service mark.
Warning and Disclaimer
Every effort has been made to make this book as complete and as accurate as possible, but no warranty
or fitness is implied. The information provided is on an ''as is" basis.
Associate Publisher
Jeff Koch
Acquisitions Editor
Kathryn Purdum
Development Editor
Mark Renfrow
Managing Editor
Matt Purcell
Project Editor
George E. Nedeff
Copy Editors
Cynthia Fields
Margo Catts
Karen A. Gill
Indexer

Larry Sweazy
Proofreader
Teresa Stephens
Technical Editor
Tim Hicks
Team Coordinator
Vicki Harding
Interior Designer
Gary Adair
Cover Designer
Alan Clements
Page Layout
Lizbeth Patterson
< previous page page_ii next page >
< previous page page_iii next page >
Page iii
Contents at a Glance
Introduction 1
Part I Using CUPS
1 Introduction to CUPS 9
2 Compiling and Installing CUPS 23
3 Setting Up Printers and Classes 37
4 Printing with CUPS 69
5 Server Configuration 91
6 Client Configuration 109
Part II The Internet Printing Protocol
7 Overview of IPP 121
8 Anatomy of an IPP Request 127
9 Printer Objects 141
10 Job Objects 167

11 Subscription Objects 189
12 CUPS Extensions to IPP 205
Part III Programming with CUPS
13 Overview of CUPS Programming 219
14 Using CUPS API Functions 231
15 Sending IPP Requests Using CUPS 267
16 Writing File Filters for CUPS 303
17 Writing Printer Drivers for CUPS 333
18 Writing Backends for CUPS 363
19 Writing Notifiers for CUPS 373
< previous page page_iii next page >
< previous page page_iv next page >
Page iv
Part IV Appendices
A Configuration File Directives 383
B IPP Reference 427
C CUPS Constants 435
D CUPS Structures 453
E CUPS Functions 463
F Common UNIX Printing System License Agreement 575
Index 591
< previous page page_iv next page >
< previous page page_v next page >
Page v
Contents
Introduction 1
The History of Printing in Unix 1
Printing from Personal Computers 2
The Evolution of CUPS 2
About This Book 5

Part 1 Using CUPS
1 Introduction to CUPS 9
The Printing Problem 10
The Technology 10
Client and Server 11
Jobs 12
Classes 12
Filters 13
Printer Drivers 14
Backends 15
Networking 15
Graphical Interfaces 16
ESP Print Pro 17
GtkLP 17
KUPS 17
QtCUPS 19
XPP 19
Resources 20
The CUPS Mailing List 20
CUPS Newsgroups 21
Web Sites 22
Summary 22
2 Building and Installing CUPS 23
Installing a Source Distribution 24
Getting the CUPS Source Code 24
Requirements 24
Configuring the CUPS Sources 25
Compiling CUPS 29
Testing the Software 30
Installing the Software 30

Upgrading the Software 31
Running the Software 31
< previous page page_v next page >
< previous page page_vi next page >
Page vi
Installing a Binary Distribution 31
Getting a CUPS Binary Distribution 31
Installing or Upgrading a Portable Distribution 32
Installing an RPM Distribution 33
Installing a Debian Distribution 34
Summary 35
3 Setting Up Printers and Classes 37
Basics of Printers 38
Printer Devices 38
Printer Drivers 45
Adding Your First Printer 47
Adding Your First Printer from the Command-Line 47
Configuring Your Printer from the Command-Line 48
Adding Your First Printer from the Web 49
Configuring Your Printer from the Web Interface 51
Printing a Test Page 54
Managing Printers from the Command-Line 55
Setting the Printer Description 56
Setting the Printer Location 56
Changing the Printer Device 56
Changing the Printer Driver 57
Changing the Printer Configuration 57
Setting Quotas on a Printer 58
Restricting Access to a Printer 58
Deleting Printers 59

Setting the Default Printer 59
Starting and Stopping Printers 59
Accepting and Rejecting Print Jobs 60
Managing Printers from the Web Interface 60
Configuring Printers from the Web Interface 61
Modifying Printers 61
Deleting Printers 61
Starting Printers 62
Stopping Printers 62
Accepting Print Jobs 62
Rejecting Print Jobs 62
Printing a Test Page 62
Basics of Classes 62
Managing Printer Classes from the Command-Line 63
Removing Printers from a Class 63
Removing a Class Completely 63
< previous page page_vi next page >
< previous page page_vii next page >
Page vii
Adding Classes from the Web Interface 64
Managing Classes from the Web Interface 65
Modifying Classes 65
Deleting Classes 66
Starting Classes 66
Stopping Classes 67
Accepting Print Jobs 67
Rejecting Print Jobs 68
Printing a Test Page 68
Implicit Classes 68
Summary 68

4 Printing with CUPS 69
Printing Files 70
Choosing a Printer 70
Printing Multiple Copies 70
Encrypting Your Print Jobs 71
Setting Printer Options 71
Printing Collated Copies 71
Printer-Specific Options 71
Standard Printer Options 73
General Options 73
Banner Options 75
Document Options 75
Text Options 77
Image Options 78
HP-GL/2 Options 80
Raw or Unfiltered Output 81
Saving Printer Options 82
Setting Options for a Specific Printer 82
Viewing the Current Saved Options 82
Setting the Default Printer 82
Printer Instances 83
Checking the Printer Status from the Command Line 83
Checking the Printer Status from the Web 84
Canceling a Print Job from the Command-Line 84
Canceling a Print Job from the Web Interface 84
Configuring Applications for CUPS 84
GIMP 85
Netscape 86
Star Office 86
Summary 90

< previous page page_vii next page >
< previous page page_viii next page >
Page viii
5 Server Configuration 91
The Basics 92
Configuration Files 92
Changing the Server Configuration 92
Server Directives 93
Restarting the CUPS Server 93
Basic Configuration Options 93
Configuring CUPS as a Server 93
Easy Web Browsing 94
Enhanced Security 95
Encryption 95
Enabling Encryption in Your Server 98
Advanced Access Control 100
Basics of Access Control 101
Authentication of Users 101
Authentication of Groups 103
Address-Based Access Control 104
Name-Based Access Control 104
Log Files 105
The Access Log File 105
The Error Log File 106
The Page Log File 107
Summary 107
6 Client Configuration 109
The Basics 110
Manual Configuration of Print Queues 110
Specifying a Single Server for Printing 111

Automatic Configuration of Print Queues 111
Specifying Multiple Servers for Printing 112
Relaying Printers to Other Clients 112
Load Balancing and Failsafe Operation 113
Printing from LPD Clients 114
Printing from Mac OS Clients 115
Columbia Appletalk Package (CAP) 115
XINET KA/Spool 115
NetATalk 116
Printing from Windows Clients 116
Configuring SAMBA 2.0.x 116
Configuring SAMBA 2.2.x 116
Configuring Windows Clients with IPP 117
Summary 117
< previous page page_viii next page >
< previous page page_ix next page >
Page ix
Part II The Internet Printing Protocol
7 Introduction to the Internet Printing Protocol 121
History of IPP 122
The Line Printer Daemon Protocol 122
Making a New Protocol 123
Object Model 124
Extensions 125
References 125
Summary 126
8 Anatomy of an IPP Request 127
Dissecting an IPP Request 128
The HTTP Request 128
The Request Header 129

Groups and Attributes 131
Groups 132
Attributes 133
Array (1setof) Values 134
The Response 134
Status Codes 135
Value Tags 137
Responses Containing Multiple Objects 137
Summary 139
9 Printer Objects 141
What Is a Printer Object? 142
Required Attributes 142
The document-format-supported Attribute 146
Optional Attributes 155
The color-supported Attribute 156
The job-impression-supported Attribute 156
The job-k-octets-supported Attribute 156
The job-media-sheets-supported Attribute 156
The multiple-document-jobs-supported Attribute 157
The multiple-operation-time-out-Attribute 157
The pages-per-minute Attribute 157
The pages-per-minute-color Attribute 157
The print-quality-default Attribute 157
The print-quality-supported Attribute 157
The printer-current-time Attribute 158
The printer-driver-installer Attribute 158
< previous page page_ix next page >
< previous page page_x next page >
Page x
The printer-info Attribute 158

The printer-location Attribute 158
The printer-make-and-model Attribute 158
The printer-message-from-operator Attribute 158
The printer-more-info Attribute 158
The printer-more-info-manufacturer Attribute 158
The printer-resolution-default Attribute 159
The printer-resolution-supported Attribute 159
The printer-state-message Attribute 159
The reference-uri-schemes-supported Attribute 159
CUPS Attributes 159
The device-uri Attribute 160
The job-k-limit Attribute 160
The job-page-limit Attribute 160
The job-quota-period Attribute 160
The member-names Attribute 160
The member-uris Attribute 160
The printer-type Attribute 161
The requesting-user-name-allowed Attribute 161
The requesting-user-name-denied Attribute 161
Printer Operations 162
The Get-Jobs Operation 162
The Get-Printer-Attributes Operation 163
The Pause-Printer Operation 163
The Resume-Printer Operation 163
The Purge-Jobs Operation 163
The Set-Printer-Attributes Operation 164
The Get-Printer-Supported-Values Operation 164
The Enable-Printer Operation 164
The Disable-Printer Operation 165
Summary 165

10 Job Objects 167
What Is a Job Object? 168
Required Attributes 168
The attributes-charset Attribute 169
The attributes-natural-language Attribute 169
The job-id Attribute 169
The job-name Attribute 169
The job-originating-user-name Attribute 169
The job-printer-up-time Attribute 169
< previous page page_x next page >
< previous page page_xi next page >
Page xi
The job-printer-uri Attribute 170
The job-state Attribute 170
The job-state-reasons Attribute 170
The job-uri Attribute 171
The time-at-completed Attribute 171
The time-at-creation Attribute 171
The time-at-processing Attribute 172
Optional Attributes 172
The copies Attribute 173
The date-time-at-completed Attribute 173
The date-time-at-creation Attribute 173
The date-time-at-processing Attribute 174
The finishings Attribute 174
The job-detailed-status-messages Attribute 174
The job-document-access-errors Attribute 174
The job-hold-until Attribute 174
The job-impressions Attribute 174
The job-impression-completed Attribute 174

The job-k-octets Attribute 175
The job-k-octets-processed Attribute 175
The job-media-sheets Attribute 175
The job-media-sheets-completed Attribute 175
The job-message-from-operator Attribute 175
The job-more-info Attribute 175
The job-priority Attribute 176
The job-sheets Attribute 176
The job-state-message Attribute 176
The media Attribute 176
The multiple-document-handling Attribute 176
The number-of-documents Attribute 176
The number-of-intervening-jobs Attribute 177
The number-up Attribute 177
The orientation-requested Attribute 177
The output-device-assigned Attribute 177
The page-ranges Attribute 177
The print-quality Attribute 177
The printer-resolution Attribute 178
The sides Attribute 178
CUPS Attributes 178
The blackplot Attribute 179
The brightness Attribute 179
< previous page page_xi next page >
< previous page page_xii next page >
Page xii
The columns Attribute 179
The cpi Attribute 179
The fitplot Attribute 180
The gamma Attribute 180

The hue Attribute 180
The job-billing Attribute 180
The job-originating-host-name Attribute 180
The lpi Attribute 181
The page-bottom Attribute 181
The page-label Attribute 181
The page-left Attribute 181
The page-right Attribute 181
The page-set Attribute 181
The page-top Attribute 182
The penwidth Attribute 182
The position Attribute 182
The ppi Attribute 182
The prettyprint Attribute 182
The saturation Attribute 183
The scaling Attribute 183
The wrap Attribute 183
Job Operations 183
The Print-Job Operation 184
The Print-URI Operation 184
The Validate-Job Operation 184
The Create-Job Operation 185
The Send-Document Operation 185
The Send-URI Operation 185
The Cancel-Job Operation 186
The Get-Job-Attributes Operation 186
The Hold-Job Operation 186
The Release-Job Operation 187
The Restart-Job Operation 187
The Set-Job-Attributes Operation 187

Summary 188
11 IPP Subscription Objects 189
What Is a Subscription Object? 190
Standard Notification Attributes 190
notify-attributes 192
notify-attributes-supported 192
< previous page page_xii next page >
< previous page page_xiii next page >
Page xiii
notify-charset 192
notify-events 192
notify-events-default 192
notify-events-supported 192
notify-job-id 194
notify-lease-duration 194
notify-lease-duration-default 194
notify-lease-duration-supported 194
notify-lease-expiration-time 194
notify-max-events-supported 194
notify-natural-language 194
notify-printer-up-time 195
notify-printer-uri 195
notify-recipient-uri 195
notify-schemes-supported 195
notify-sequence-number 195
notify-subscribed-event 196
notify-subscriber-user-name 196
notify-subscription-id 196
notify-text 196
notify-time-interval 196

notify-user-data 196
printer-state-change-date-time 196
printer-state-change-time 196
Subscription Operations 197
Create-Printer-Subscription 197
Create-Job-Subscription 198
Get-Subscription-Attributes 198
Get-Subscriptions 198
Renew-Subscription 199
Cancel-Subscription 199
Get-Notifications 200
Send-Notifications 200
Creating Subscriptions in Print Jobs 201
Notification Schemes 202
The mailto Notification Scheme 203
The ippget Notification Scheme 203
The indp Notification Scheme 204
Summary 204
< previous page page_xiii next page >
< previous page page_xiv next page >
Page xiv
12 CUPS Extensions to IPP 205
CUPS Attributes 206
device-class 206
device-info 207
device-make-and-model 207
ppd-natural-language 207
ppd-make 207
ppd-make-and-model 207
ppd-name 207

printer-type-mask 207
CUPS Operations 207
CUPS-Get-Default 208
CUPS-Get-Printers 208
CUPS-Add-Printer 209
CUPS-Delete-Printer 209
CUPS-Get-Classes 210
CUPS-Add-Class 210
CUPS-Delete-Class 211
CUPS-Accept-Jobs 211
CUPS-Reject-Jobs 211
CUPS-Set-Default 212
CUPS-Get-Devices 212
CUPS-Get-PPDs 212
CUPS-Move-Job 213
CUPS-Add-Device 213
CUPS-Delete-Device 214
CUPS Browsing Protocol 214
Summary 215
Part III Programming With CUPS
13 Overview of CUPS Programming 219
The Basics 220
Header Files 220
Libraries 221
Your First CUPS Program 221
Detecting the CUPS API Library with GNU Autoconf 224
Autoconf Basics 224
The config.h Header File 227
The Makefile 227
Putting It All Together 228

< previous page page_xiv next page >
< previous page page_xv next page >
Page xv
Licensing Issues 229
Summary 229
14 Using CUPS API Functions 231
Printing Services 232
Managing Printers and Classes 232
Printing Files 235
Managing Print Jobs 236
Exploring Printer Options 239
Managing Destinations 241
Printing with Options 243
PPD Files 248
Getting a PPD File for a Printer 248
Loading a PPD File 249
Releasing the Memory Used by a PPD File 249
Examining the PPD File Structures 249
Options and Groups 251
Conflicts 259
Page Sizes 259
Custom Page Sizes 260
Temporary Files 260
Encryption Support 261
Users, Servers, and Ports 262
Getting and Setting the Current Username 262
Getting and Setting the Current Server 262
Getting and Setting the IPP Port 263
Callback Functions 263
Error Handling 264

Summary 264
15 Sending IPP Requests Using CUPS 267
The CUPS Low-Level APIs 268
HTTP Functions 269
Creating an HTTP Object 270
Destroying a HTTP Object 271
Sending an HTTP Request 271
Obtaining the Server Response 272
Reading Data from the Server 272
Setting HTTP Request Fields 273
Obtaining HTTP Request Fields 274
Writing Data to the Server 275
< previous page page_xv next page >
< previous page page_xvi next page >
Page xvi
Handling Errors 276
Handling Authentication 276
Upgrading to Encryption 279
Handling Proxy Servers 279
Other Useful Functions 280
Implementing a Simple Web Browser 281
IPP Functions 285
The IPP Object Structure 285
Creating an IPP Object 292
Deleting an IPP Object 292
Adding a Value to an IPP Object 292
Determining the Size of an IPP Object 295
Finding an Attribute in an IPP Object 295
Sending an IPP Request 296
Reading the IPP Response 298

Automating IPP Request 298
Building a Real IPP Request 299
Optimizing Your Requests 301
Summary 302
16 Writing File Filters for CUPS 303
What Are File Filters? 304
The hpgltops Filter 305
The imagetops Filter 305
The imagetoraster Filter 306
The pdftops Filter 306
The pstops Filter 307
The pstoraster Filter 308
The texttops Filter 309
The CUPS Filter Architecture 309
Command-Line Arguments 310
Environment Variables 311
Security Considerations 312
Users and Groups 312
Temporary Files 313
Sending Message to the User 313
Page Accounting 314
Copy Generation 314
Configuration and Data Files 315
MIME Types and Filters 315
The MIME Type File Format 316
The MIME Filter File Format 318
< previous page page_xvi next page >
< previous page page_xvii next page >
Page xvii
Writing a Script-Based TeX DVI Filter 319

PostScript Output 321
Raster Output 322
Opening and Closing Raster Streams 324
Writing the Page Header 324
Writing the Page Data 328
Dissecting the HP-GL/2 Filter 328
Initializing the Filter 328
Summary 332
17 Writing Printer Drivers for CUPS 333
Overview 334
Understanding PostScript Printer Description (PPD) Files 334
The Printer Identification Section 335
Constraints 337
Options 338
Page Sizes 339
Fonts 340
Writing a Text Driver for HP Printers 341
The WriteEpilogue() Function 341
The WriteProlog() Function 341
The WritePage() Function 344
Using the texttohp Filter 344
Reading Raster Data 355
Opening a Raster Stream 355
Closing a Raster Stream 355
Reading the Page Header 355
Reading Pixel Data 356
Adding Dithering to the HP-PCL Driver 356
Basics of Error-Diffusion Dithering Algorithms 357
Implementing the Floyds-Steinberg Algorithm 358
Updating the PPD Files 361

Installing the New HP-PCL Raster Driver 362
Summary 362
18 Writing Backends for CUPS 363
Overview 364
Security Considerations 364
Command-Line Arguments 364
Page Accounting 365
Exclusive Access 365
< previous page page_xvii next page >
< previous page page_xviii next page >
Page xviii
Retries 365
Dissecting the Serial Port Backend 366
Supporting Device Discovery 366
Opening the Serial Port 367
Writing Data to the Port 368
Finishing Up 368
Writing a Script-Based Backend 368
Summary 371
19 Writing Notifiers for CUPS 373
What Are Notifiers? 374
The CUPS Notifier Architecture 374
Command-Line Arguments 375
Environment Variables 375
Reading Event Data 376
Sending Messages to the Scheduler 376
Return Values 376
Security Considerations 377
Users and Groups 377
Temporary Files 377

Configuration and Data Files 377
Retries 378
Dissecting the mailto Notifier 378
Summary 379
Part IV Appendices
A Configuration File Directives 383
classes.conf 384
Accepting 384
AllowUser 384
Class 385
DefaultClass 385
DenyUser 385
Info 386
JobSheets 386
KLimit 386
Location 387
PageLimit 387
Printer 387
QuotaPeriod 388
< previous page page_xviii next page >
< previous page page_xix next page >
Page xix
State 388
StateMessage 388
client.conf 389
Encryption 389
ServerName 389
cupsd.conf 389
AccessLog 390
Allow 390

AuthClass 391
AuthGroupName 392
AuthType 392
AutoPurgeJobs 393
BrowseAddress 393
BrowseAllow 393
BrowseDeny 394
BrowseOrder 394
BrowseInterval 395
BrowsePoll 395
BrowsePort 396
BrowseRelay 396
BrowseShortNames 397
BrowseTimeout 397
Browsing 397
Classification 398
DataDir 398
DefaultCharset 399
DefaultLanguage 399
Deny 399
DocumentRoot 400
Encryption 400
ErrorLog 401
FilterLimit 401
FontPath 402
Group 402
HostNameLookups 402
ImplicitClasses 403
KeepAlive 403
KeepAliveTimeout 404

Limit 404
LimitExcept 404
< previous page page_xix next page >
< previous page page_xx next page >
Page xx
LimitRequestBody 405
Listen 405
Location 405
LogLevel 406
MaxClients 407
MaxJobs 407
MaxJobsPerPrinter 407
MaxJobsPerUser 408
MaxLogSize 408
MaxRequestSize 409
Order 409
PageLog 409
Port 410
PreserveJobHistory 410
PreserveJobFiles 411
Printcap 411
PrintcapFormat 411
RemoteRoot 412
RequestRoot 412
RIPCache 412
RunAsUser 413
Satisfy 413
ServerAdmin 414
ServerBin 414
ServerCertificate 414

ServerKey 415
ServerName 415
ServerRoot 415
SSLListen 416
SSLPort 416
SystemGroup 416
TempDir 417
Timeout 417
User 417
mailto.conf 418
Cc 418
From 418
MailCommand 419
ReplyTo 419
SMTPServer 419
< previous page page_xx next page >
< previous page page_xxi next page >
Page xxi
pdftops.conf 419
fontmap 420
fontpath 420
printers.conf 420
Accepting 420
AllowUser 421
DefaultPrinter 421
DenyUser 421
DeviceURI 422
Info 422
JobSheets 422
KLimit 423

Location 423
PageLimit 423
Printer 424
QuotaPeriod 424
State 424
StateMessage 425
B IPP Reference 427
IPP Finishings 428
IPP Job States 429
IPP Operations 429
IPP Orientations 431
IPP Printer States 431
IPP Qualities 431
IPP Resolution Units 432
IPP Status Codes 432
IPP Tags 433
C CUPS Constants 435
Character Encoding Constants 436
CUPS API Version 437
HTTP Constants 437
Authentication 437
Encodings 437
Encryption 438
Field Names 438
Keep-Alive Values 439
Limits 439
States 440
< previous page page_xxi next page >
< previous page page_xxii next page >
Page xxii

Status Codes 440
Version Numbers 442
IPP Constants 442
Printer Types 442
States 443
Message Constants 443
PPD Constants 447
Colorspaces 447
Limits 447
Order Dependency Values 448
User-Interface Types 448
Version 448
Raster Constants 449
Boolean Values 449
Color Order Values 449
Colorspaces 449
Sync Words 450
Open Modes 450
Jog Values 450
Orientation Values 451
Cutter Values 451
Advance Values 451
Leading Edge Values 452
D CUPS Structures 453
CUPS API Structures 454
cups_dest_t 454
cups_job_t 454
cups_lang_t 454
cups_option_t 455
HTTP Structures 455

http_t 455
IPP Structures 456
ipp_t 456
ipp_attribute_t 456
ipp_request_t 457
ipp_uchar_t 457
ipp_value_t 457
PPD Structures 458
ppd_choice_t 458
ppd_const_t 459
< previous page page_xxii next page >
< previous page page_xxiii next page >
Page xxiii
ppd_emul_t 459
ppd_file_t 459
ppd_group_t 460
ppd_option_t 461
ppd_profile_t 461
ppd_size_t 461
E CUPS Functions 463
cupsAddDest() 464
ippAddBolean() 538
ppdClose() 559
F Common UNIX Printing System License Agreement 575
Introduction 576
Trademarks 576
Binary Distribution Rights 577
Support 577
GNU GENERAL PUBLIC LICENSE 577
Preamble 578

GNU GENERAL PUBLIC LICENSE—TERMS AND CONDITIONS FOR COPYING,
DISTRIBUTION, AND MODIFICATION
578
NO WARRANTY 582
END OF TERMS AND CONDITIONS 582
GNU LIBRARY GENERAL PUBLIC LICENSE 583
Preamble 583
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 585
NO WARRANTY 590
END OF TERMS AND CONDITIONS 590
Index 591
< previous page page_xxiii next page >
< previous page page_xxiv next page >
Page xxiv
About the Author
Michael Sweet is co-owner of Easy Software Products, a small software firm specializing in Internet and
printing technologies. He first started using a computer terminal at the age of 6 and sold his first program
at age 12. Michael's obsession with printing and graphics led him to develop image-printing software for
dot-matrix and later inkjet printers. After graduating with a bachelor's degree in computer science from
the SUNY Institute of Technology in Utica/Rome, he moved to Maryland to pursue a career in real-time
computer graphics for the Navy.
The draw of printing was too much. After a few years working for the Navy, Michael again began writing
printer drivers. After releasing a freeware program called ''topcl," he went on to found Easy Software
Products and develop the highly successful ESP Print software. In 1997, Michael began work on the
Common UNIX Printing System, and in 1999, his company released CUPS under the GNU GPL license and
ESP Print Pro as a commercial product.
Aside from writing printer drivers, Michael is also author or co-author of several books, including the
Serial
Programming Guide for POSIX Operating Systems
and the

OpenGL Superbible.
When he has free time, he
enjoys cycling, photography, playing the trumpet, and travelling with his wife, Sandra.
About the Technical Editor
Tim Hicks is a Senior Unix Engineer for HomeSide Lending, Inc. He is an HP Certified IT Professional in
HP-UX Systems Administration and has been working extensively with HP-UX 10.10-11.00 as well as some
work with Solaris 8, AIX 4.1, FreeBSD, and RedHat 6.2. He has an in-depth knowledge and experience
with Highly Available Clusters using HP' MC/ServiceGuard, HP-UX 11.00, and Oracle 8.05, as well as
Sybase 11. He is currently implementing Storage Area Networks with EMC Fabric Directors and Switches.
Tim graduated from Florida State University with a B.S. in both Management Information Systems and
Finance.
< previous page page_xxiv next page >

×