cups-lpd(8)

๐Ÿ“ฆ
version 2.4.19 ยท 4 versions
, in alpine 3.22, alpine 3.23, alpine 3.24, centos-stream 10, debian trixie, fedora 43, fedora 44, nixpkgs unstable, opensuse-leap 16.0, ubuntu questing, ubuntu resolute, ubuntu stonking

๐Ÿ’– cups-lpd โ€” the manual page, but make it cute ๐Ÿ’–

okay bestie, so this is cups-lpd(8) from the OpenPrinting gang, and it's the little LPD mini-server. yes she's deprecated. yes we're still gonna read the whole thing together. sit down, grab a boba ๐Ÿง‹


โœจ NAME โœจ

cups-lpd โ€” receive print jobs and report printer status to lpd clients (deprecated)

like. that's the whole job description. she receives print jobs and tells lpd clients what's up with the printer. but also she's deprecated so. ๐Ÿซ 


๐ŸŽ€ SYNOPSIS ๐ŸŽ€

cups-lpd [ -h hostname[:port] ] [ -n ] [ -o option=value ]

three little optional flags, that's it, she's low-maintenance ๐Ÿ’…


๐ŸŒธ DESCRIPTION ๐ŸŒธ

So cups-lpd is the CUPS Line Printer Daemon โ€” the "LPD" mini-server โ€” and her whole personality is supporting legacy client systems that still speak the LPD protocol. old-school besties, we see you ๐Ÿซถ

here's the thing tho: cups-lpd does not act as a standalone network daemon. she does not stand alone. she does not do the solo main character thing. instead she operates through any of the Internet "super-servers" like inetd(8), launchd(8), and systemd(8). she needs a friend to hold the door open for her. iconic behavior honestly ๐Ÿšชโœจ


โœจ OPTIONS โœจ

  • -h hostname[:port] โ€” sets the CUPS server (and port) to use. you're telling her where to go, and optionally which door to knock on.
  • -n โ€” disables reverse address lookups. normally cups-lpd will try to discover the hostname of the client via a reverse DNS lookup, but with -n she's like "no thank you, I don't need to know who you are" ๐Ÿ™ˆ
  • -o name=value โ€” inserts options for all print queues. most often this is used to disable the "l" filter so that remote print jobs are filtered as needed for printing. the inetd(8) example further down sets the "document-format" option to "application/octet-stream", which forces autodetection of the print file format. so she sniffs the file and figures it out herself. detective energy ๐Ÿ”

๐ŸŒˆ CONFORMING TO ๐ŸŒˆ

okay so this is the part where we get real for a sec:

cups-lpd does not enforce the restricted source port number specified in RFC 1179. why? because using restricted ports does not prevent users from submitting print jobs. so it's pointless, bestie. while this behavior is different than standard Berkeley LPD implementations, it should not affect normal client operations. no cap.

also: the output of the status requests follows RFC 2569, Mapping between LPD and IPP Protocols. BUT โ€” since many LPD implementations stray from this definition, remote status reporting to LPD clients may be unreliable. she's doing her best but the other implementations are not beating the allegations ๐Ÿ˜ญ


๐Ÿ’€ ERRORS ๐Ÿ’€

Errors are sent to the system log.

that's it. that's the section. she's not dramatic about it, she just logs it and moves on. periodt. ๐Ÿ’…


๐Ÿ“ FILES ๐Ÿ“

  • /etc/inetd.conf
  • /etc/xinetd.d/cups-lpd
  • /System/Library/LaunchDaemons/org.cups.cups-lpd.plist

these are the places she hangs out. know them, love them. ๐ŸŽ€


๐Ÿ‘‘ NOTES ๐Ÿ‘‘

so. the tea. โ˜•

The cups-lpd program is deprecated and will no longer be supported in a future feature release of CUPS.

bestie she is literally on the way out. do not build your whole life around her. plan accordingly!! ๐Ÿ˜ญ

๐Ÿ”ฅ PERFORMANCE ๐Ÿ”ฅ

cups-lpd performs well with small numbers of clients and printers. cute, cozy, intimate. ๐Ÿฅฐ

However โ€” since a new process is created for each connection, and since each process must query the printing system before each job submission, it does not scale to larger configurations. she's a small-party girl, not a festival headliner.

We highly recommend that large configurations use the native IPP support provided by CUPS instead. okurrr ๐Ÿ“ข

๐Ÿšจ SECURITY ๐Ÿšจ

okay this one is the serious one, stay with me:

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) files used by TCP wrappers. Therefore, running cups-lpd on your server will allow any computer on your network (and perhaps the entire Internet) to print to your server.

NOT ME LEAVING THE PRINTER DOOR WIDE OPEN ๐Ÿ’€๐Ÿ’€๐Ÿ’€ this is not a vibe check, this is a vibe fail

While xinetd(8) has built-in access control support, you should use the TCP wrappers package with inetd(8) to limit access to only those computers that should be able to print through your server.

Also! cups-lpd is not enabled by the standard CUPS distribution. Please consult with your operating system vendor to determine whether it is enabled by default on your system. don't just assume she's running, go ask somebody ๐Ÿซถ


๐ŸŒŸ EXAMPLE ๐ŸŒŸ

If you are using inetd(8), add the following line to the inetd.conf file to enable the cups-lpd mini-server:

printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd \
    -o document-format=application/octet-stream

copy it exactly bestie, character for character, do not freestyle this one ๐Ÿ’–

CUPS includes configuration files for launchd(8), systemd(8), and xinetd(8). Simply enable the cups-lpd service using the corresponding control program. pick your favorite super-server and let her cook ๐Ÿ“


๐Ÿฆ‹ SEE ALSO ๐Ÿฆ‹

cups(1), cupsd(8), inetd(8), launchd(8), xinetd(8), CUPS Online Help (http://localhost:631/help), RFC 2569

go read those too, iykyk ๐Ÿ“šโœจ


Copyright ยฉ 2020-2024 by OpenPrinting.


and that's the whole page bestie!! ๐ŸŽ€ this was cups-lpd(8) from the CUPS fam, dated 2021-02-28. she's deprecated, she's insecure, she doesn't scale, and honestly? we still love her. go use native IPP. mwah ๐Ÿ’‹โœจ

๐Ÿ“ฆ where this page comes from