cupsd

最後更新: 2016-03-12

 

介紹

CUPS - Common UNIX Print System

Port

The print spooler running on the print server box can be reached over the LPD protocol on port 515.

The print spooler running on the print server box can also be reached over the IPP protocol on port 631.

The printer connected to the print server box can be accessed directly via TCP sockets on port 9100.

 


查看 samba 是否 support cups

 

ldd /usr/sbin/smbd | grep cups

libcups.so.2 => /usr/lib/libcups.so.2 (0xf7650000)

OR

smbd -b | grep CUPS

HAVE_CUPS

 


RAW printer

 

content is sent unmodified to the device

=> don't use filters or drivers on the backend

clients were expected to prepare the print job file that is ready to be sent to the printing device.

In this case, a native (vendor-supplied) Windows printer driver needs to be installed on each and every client for the target device.

 


設定

 

Configure: /etc/cups/cupsd.conf

# web panel 的 port
Port 631

Listen /var/run/cups/cups.sock

# Enable printer sharing and shared printers.
# * Browsing will only work if Avahi is running before cupsd is started
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseAddress 192.168.0.*:631

# Disable SSL
DefaultEncryption Never

# ACL

<Location />
  # Allow shared printing and remote administration...
  Allow all
  Order allow,deny
</Location>
<Location /admin>
  # Allow remote administration...
  Allow all
  Order allow,deny
</Location>
<Location /admin/conf>
  #AuthType Default
  #Require user @SYSTEM
  Allow all
  Order allow,deny
</Location>
.................

service cups restart

 


Add Printer

 

/etc/cups/printers.conf   <-   每個 printer 一個 configure file

ie.

# USB

<DefaultPrinter ml1640-raw>
Info ml1640-raw
DeviceURI file:///dev/usb/lp0
State Idle
StateTime 1333959614
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy abort-job
</Printer>

# socket

<Printer Samsung_SCX-3400_Series>
UUID urn:uuid:70af9717-85c8-34c3-5095-76040d935c0c
Info Samsung SCX-3400 Series
Location
MakeModel Samsung SCX-3400 Series
DeviceURI socket://192.168.88.20
PPDTimeStamp *
State Idle
StateTime 1462418620
Type 4164
Accepting Yes
Shared Yes
ColorManaged Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</Printer>

 


User ACL

# None, Basic, BasicDigest, Digest, Negotiate
AuthType None

Require user user-name-list

# Require the Owner of a Job or Subscription    
Require user @OWNER

# Require an Administrative User    
Require user @SYSTEM

# Require Member of Group "foogroup"    
Require user @foogroup

# Require "john" or "mary"    
Require user john mary

 


Client Command

 

apt-get install cups-client

/usr/bin/ippfind
/usr/bin/ipptool
/usr/bin/lppasswd
/usr/bin/lpstat           # show available devices or drivers
/usr/bin/cancel
/usr/bin/lp
/usr/bin/lpoptions
/usr/bin/cupstestdsc
/usr/bin/cupstestppd

/usr/sbin/cupsctl
/usr/sbin/lpmove
/usr/sbin/lpadmin         # configure cups printers and classes
/usr/sbin/lpinfo          # lpinfo - show available devices or drivers
/usr/sbin/cupsaccept      # accept/reject jobs sent to a destination
/usr/sbin/cupsreject
/usr/sbin/cupsenable      # stop/start printers and classes
/usr/sbin/cupsdisable
/usr/sbin/cupsaddsmb

cupstestppd

cupstestppd Samsung_SCX-3400_Series.ppd

Samsung_SCX-3400_Series.ppd: PASS
        WARN    Size "Folio" should be the Adobe standard name "FanFoldGermanLegal".
        WARN    Size "JB5" should be the Adobe standard name "B5".
        WARN    Size "B5-ISO" should be the Adobe standard name "ISOB5".
        WARN    Size "COM10" should be the Adobe standard name "Env10".
        WARN    Size "Monarch" should be the Adobe standard name "EnvMonarch".
        WARN    Size "DL" should be the Adobe standard name "EnvDL".
        WARN    Size "C5" should be the Adobe standard name "EnvC5".
        WARN    Size "Oficio_S" should be "8.5x13.5".
        WARN    Size "PCard4x6" should be the Adobe standard name "4x6".
        WARN    DefaultCompression has no corresponding options.

# lists the available devices or drivers known to the CUPS server.

lpinfo

(-m) lists the available drivers

...
uld-samsung/Samsung_SCX-3400_Series.ppd Samsung SCX-3400 Series
...

(-v) lists the available devices

...
serial serial:/dev/ttyS0?baud=115200
network socket://192.168.88.20
network socket://192.168.88.170
network ipp://192.168.88.20
network ipp://192.168.88.170
...

 

lpstat

-p            # a list of printers

printer Samsung_SCX-3400_Series is idle.  enabled since Thursday, May 05, 2016 AM11:23:40 HKT

-d            # Shows the current default destination

no system default destination

# 當有 print job 時

Samsung_SCX-3400_Series-1 root              1024   Thursday, May 05, 2016 AM11:44:45 HKT

-r     # Shows whether the CUPS server is running.

scheduler is running

-s     # summary

system default destination: Samsung_SCX-3400_Series
device for Samsung_SCX-3400_Series: socket://192.168.88.20

 

Setting the Default Printer

lpoptions -d Samsung_SCX-3400_Series

# check

lpstat -d

system default destination: Samsung_SCX-3400_Series

Turning Off Text Wrapping

lp -o nowrap filename

Raw or Unfiltered Output

lp -o raw filename

 


ppd file

 

/usr/share/ppd

/etc/cups/ppd

 


連 printer 的方法

 

IPP

Sharing via IPP

 

* native protocol for CUPS

* Windows client 連去 Linux print server 的最好方式

* standard printer protocol based on HTTP

IPP uses the traditional client-server model, with clients sending IPP request messages with the MIME media type "application/ipp" in HTTP POST requests to an IPP printer. IPP request messages consist of key/value pairs using a custom binary encoding followed by an "end of attributes" tag and any document data required for the request. The IPP response is sent back to the client in the HTTP POST response, again using the "application/ipp" MIME media type.

IPP is implemented using the Hypertext Transfer Protocol (HTTP) and inherits all of the HTTP streaming and security features.

For example
authorization
SSL/TLS protocol-layer

Among other things, IPP allows a client to:

    query a printer's capabilities
    submit print jobs to a printer
    query the status of a printer
    query the status of one or more print jobs
    cancel previously submitted jobs

IPP uses TCP with port 631 as its well-known port.

IPP implementations such as CUPS also use UDP with port 631 for IPP printer discovery.

CUPS

Browsing On
BrowseOrder allow,deny
BrowseAllow all

Test Service

By default, a CUPS network server broadcasts its queue every thirty seconds via the UDP port 631. Thus, the following command can be used to test if a CUPS network server exists in the network:

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

The following command tests whether cupsd can be reached via TCP on port 631 of host:

netcat -z <host> 631 && echo ok || echo failed

If you have other clients and want to print in PostScript from them, often the printer driver can use a "PPD" (PostScript Printer Description file) for complete support of the printers' features.

You can download the PPD files for any configured printer from the CUPS server:

   http://<host name>:631/printers/<printer queue name>.ppd

or

   https://<host name>:443/printers/<printer queue name>.ppd

Client add printer by (Windows)

An HP JetDirect printer requires

socket://hostname   <--   Default port: 9100

An IPP printer requires

http://host_ip_address:631/printers/printer_name

ipp://hostname/printers/printername

 

Sharing via Samba

[global]
    # 設定 printcap 的位置, Default: "printcap = /etc/printcap"
    # CUPS does not need a printcap file
    # 因為 cupsd.conf 會設定 printer
    # cups => uses the CUPS API to list printers, submit jobs, query queues, and so on.
    printcap = cups

    # how printer status information is interpreted on your system.
    # BSD, AIX, LPRNG, PLP, SYSV, HPUX, QNX, SOFTQ, and CUPS.
    # ** This option can be set on a per printer basis. **
    printing = CUPS

    # automatically share all printers available in the backend
    load printers = yes

[printers]
    comment=All Printers
    path=/var/spool/samba
    browseable=yes
    guest ok=yes
    writable=no
    printable=yes
    create mode=0700
    write list=@adm root ti

/etc/printcap

# '|' separates aliases of a printer

print1|My Printer 1
print2|My Printer 2
print3|My Printer 3

Sharing via LPD

* The software running on the sender(pc) and recipient(printer) must support the respective protocol.

* With this method, no print job is sent to a remote queue

An LPD printer server requires syntax lpd://hostname/queue syntax. <-- lpq 可以看到 Q 名

一定要填 Q 名, 否則會

May  6 11:59:31 ubuntu cups-lpd[10587]: Connection from 192.168.88.25 (IPv4 192.168.88.25)
May  6 11:59:31 ubuntu cups-lpd[10587]: Receive print job for
May  6 11:59:31 ubuntu cups-lpd[10587]: Unable to find "" in list of printers!
May  6 11:59:31 ubuntu cups-lpd[10587]: Unable to get printer information for ""
May  6 11:59:31 ubuntu cups-lpd[10587]: Closing connection

Windows:

Standard TCP/IP Port

Protocol: raw

Port: 9100

Linux:

socket://ip-address:port-number

安裝

# U14

apt-get install cups-bsd

# Centos7

yum install cups cups-client cups-lpd

獲得

/usr/bin/lpq        # show printer queue status
/usr/bin/lpr        # print files
/usr/bin/lprm        # cancel print jobs
/usr/sbin/lpc        # line printer control program
 

lpq

# 在有野 print 時

Samsung_SCX-3400_Series is ready and printing
Rank    Owner   Job     File(s)                         Total Size
active  unknown 4       unknown                         23552 bytes

lpc

lpc status

Samsung_SCX-3400_Series:
        printer is on device 'socket' speed -1
        queuing is enabled
        printing is enabled
        no entries
        daemon present

Daemon: cups-lpd

port: 515

cups-lpd - receive print jobs and report printer status to lpd clients

cups-lpd  is  the  CUPS  Line  Printer  Daemon ("LPD") mini-server that
       supports legacy client systems that use the LPD protocol. cups-lpd does
       not  act  as a standalone network daemon but instead operates using the
       Internet "super-server" inetd(8) or xinetd(8).

Program: /usr/lib/cups/daemon/cups-lpd

/etc/xinetd.d/cups

service printer
{
    socket_type = stream
    protocol = tcp
    wait = no
    user = lp
    group = sys
    passenv =
    server = /usr/lib/cups/daemon/cups-lpd
    server_args = -o document-format=application/octet-stream
}

Remark

* cups-lpd currently does not perform any access control based on the settings in cupsd.conf(5) or in the hosts.allow(5) or hosts.deny(5)

* 要用 xinetd 的 ACL

DOC

https://www.cups.org/documentation.php/doc-2.1/man-cups-lpd.html

 


Printing

 

queue named: color

lp -d color filename

Checking the Status

# shows all active print jobs in the form of a queuename-jobnumber listing

lpstat -o

Removing Jobs from the Queue

lprm -P queuename job_number

 


USB Ports

 

# this printer is able to print ASCII text directly
echo -en "\rHello\r\f" >/dev/usb/lp0

# If this does not display any information
cat /proc/bus/usb/devices

 


Filtering

 

filtering process: the conversion of the original data to printer-specific data

Unix Filter enables you to use image and document manipulation features such as duplexing and finishing in Unix Platform.

print server boxes: only receive printer-specific data and forward it to the printer
(which is equipped with both a TCP/IP network link and a local printer port.)

Workstation -> Print Server -> Print Server Box -> Printer

Print via CUPS Network Server:

    no filtering (as this is usually done on the CUPS network server)

Print directly on a network printer or using a print server box:

    Filtering

 



Window Client

 

Printing

    [1] use a PS driver on Windows and a specific driver in CUPS
    [2] use a specific driver in Windows and the Raw (which actually means transparent) driver in CUPS

[1]

Built-in MS Publisher Imagesetter

"Add Printer"
"Connect to a printer on the Internet..."
URL for your printer queue (e.g. http://rock:631/printers/Epson).  
When prompted for a driver select a Manufacturer of "Generic" and the Printer "MS Publisher Imagesetter".

Adobe Driver

To use the Adobe driver simply run the installer, select "Network Printer", enter the URL of your printer queue (should be of the form http://hostname:631/printers/PrinterName), and then select "yes" when prompted.  You can either use the "Generic PostScript Printer" option, or "Browse" for the printer specific PPD file created by CUPS (located in /etc/cups/ppd/PrinterQueueName.ppd on the Linux machine).

[2]