| <html> |
| <!-- SECTION: Getting Started --> |
| <head> |
| <title>Printer Sharing</title> |
| <LINK REL="STYLESHEET" TYPE="text/css" HREF="../cups-printable.css"> |
| </HEAD> |
| <BODY> |
| |
| <H1 CLASS="title">Printer Sharing</H1> |
| |
| <p>This document discusses several ways to configure printer sharing.</p> |
| |
| <h2><a name="BASICS">The Basics</h2> |
| |
| <p>A "server" is any machine that communicates directly to a printer. A "client" is any machine that sends print jobs to a server for final printing. Clients can also be servers if they communicate directly with any printers of their own.</p> |
| |
| <p>By default, CUPS uses the Internet Printing Protocol (IPP) to send jobs from a client to a server. When printing to legacy print servers you may also use the Line Printer Daemon (LPD) protocol when printing to older UNIX-based servers or Server Message Block (SMB) when printing to Windows<sup>®</sup> servers.</p> |
| |
| <p>Clients can automatically discover and access shared printers via DNS Service Discovery (DNS-SD a.k.a. Bonjour<sup>®</sup>). SMB browsing can also be used to manually discover and access shared printers when <a href="http://www.samba.org/">Samba</a> is installed.</p> |
| |
| |
| <h2><a name="SERVER_CONFIG">Configuring the Server</a></h2> |
| |
| <p>You must enable printer sharing on the server before clients can print through it. The simplest way to do this is to use the <a href="man-cupsctl.html">cupsctl(8)</a> command on the server:</p> |
| |
| <pre class="command"> |
| cupsctl --share-printers |
| </pre> |
| |
| <p>By default, the above command will allow printing from other clients on the same subnet as your server. To allow printing from any subnet, use the following command instead:</p> |
| |
| <pre class="command"> |
| cupsctl --share-printers --remote-any |
| </pre> |
| |
| <p>Next, tag each printer that you want to share using the <a href="man-lpadmin.html">lpadmin(8)</a> command on the server, for example:</p> |
| |
| <pre class="command"> |
| lpadmin -p printer -o printer-is-shared=true |
| </pre> |
| |
| <p>You can require authentication for shared printing by setting the policy on each printer, for example:</p> |
| |
| <pre class="command"> |
| lpadmin -p printer -o printer-op-policy=authenticated |
| </pre> |
| |
| |
| <h2><a name="AUTO_IPP">Automatic Configuration using IPP</a></h2> |
| |
| <blockquote><b>Note:</b> |
| <p>This method of configuration does not work on macOS 10.7 or later because sandboxed applications do not always have direct network access.</p> |
| </blockquote> |
| |
| <p>CUPS can be configured to run without a local spooler and send all jobs to a |
| single server. However, if that server goes down then all printing will be |
| disabled. Use this configuration only as absolutely necessary.</p> |
| |
| <p>The default server is normally the local system ("localhost"). To override |
| the default server create a file named <var>/etc/cups/client.conf</var> with a |
| line as follows:</p> |
| |
| <pre class='example'> |
| ServerName <em>server</em> |
| </pre> |
| |
| <p>The <var>server</var> name can be the hostname or IP address of the default |
| server. If the server is not using the default IPP port (631), you can add the |
| port number at the end like this:</p> |
| |
| <pre class='example'> |
| ServerName <em>server:port</em> |
| </pre> |
| |
| <p>The default server can also be customized on a per-user basis. To set a |
| user-specific server create a file named <var>~/.cups/client.conf</var> instead. |
| The user <var>client.conf</var> file takes precedence over the system one.</p> |
| |
| <p>Finally, you can set the <code>CUPS_SERVER</code> environment variable to |
| override the default server for a single process, for example:</p> |
| |
| <pre class='command'> |
| CUPS_SERVER=server:port firefox http://www.cups.org |
| </pre> |
| |
| <p>will run the Firefox web browser pointed to the specified server and |
| port. The environment variable overrides both the user and system |
| <var>client.conf</var> files, if any.</p> |
| |
| |
| <h2><a name="MANUAL">Manual Configuration of Print Queues</a></h2> |
| |
| <blockquote><b>Note:</b> |
| <p>This method of configuration does not work on macOS 10.7 or later because sandboxed applications do not always have direct network access.</p> |
| </blockquote> |
| |
| <p>The most tedious method of configuring client machines is to configure |
| each remote queue by hand using the <a href="man-lpadmin.html">lpadmin(8)</a> |
| command:</p> |
| |
| <pre class='command'> |
| lpadmin -p <em>printer</em> -E -v ipp://<em>server</em>/printers/<em>printer</em> -m everywhere |
| </pre> |
| |
| <p>The <var>printer</var> name is the name of the printer on the server machine. |
| The <var>server</var> name is the hostname or IP address of the server machine. |
| Repeat the <b>lpadmin</b> command for each remote printer you wish to use.</p> |
| |
| |
| </body> |
| </html> |