387 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			387 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| <!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
 | |
| <!ENTITY % articles.ent PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Articles Entity Set//EN">
 | |
| %articles.ent;
 | |
| <!ENTITY % not.published "IGNORE">
 | |
| ]>
 | |
| 
 | |
| <article>
 | |
|   <articleinfo>
 | |
|     <title>CUPS on FreeBSD</title>
 | |
|     <pubdate>$FreeBSD$</pubdate>
 | |
|     <authorgroup>
 | |
|       <author>
 | |
| 	<firstname>Chess</firstname>
 | |
| 	<surname>Grifin</surname>
 | |
| 	<affiliation>
 | |
| 	  <address><email>chess@chessgriffin.com</email></address>
 | |
| 	</affiliation>
 | |
|       </author>
 | |
|     </authorgroup>
 | |
| 
 | |
|     <legalnotice id="trademarks" role="trademarks">
 | |
|       &tm-attrib.freebsd;
 | |
|       &tm-attrib.general;
 | |
|     </legalnotice>
 | |
| 
 | |
|     <abstract>
 | |
|       <para>An article about configuring CUPS on &os;.</para>
 | |
|     </abstract>
 | |
|   </articleinfo>
 | |
| 
 | |
|   <sect1 id="printing-cups">
 | |
|     <title>An Introduction to the Common Unix Printing System (CUPS)</title>
 | |
| 
 | |
|     <indexterm><primary>printing</primary></indexterm>
 | |
|     <indexterm><primary>CUPS</primary></indexterm>
 | |
| 
 | |
|     <para><application>CUPS</application>, the Common UNIX Printing
 | |
|       System, provides a portable printing layer for &unix;-based
 | |
|       operating systems.  It has been developed by Easy Software
 | |
|       Products to promote a standard printing solution for all &unix;
 | |
|       vendors and users.</para>
 | |
| 
 | |
|     <para><application>CUPS</application> uses the Internet Printing
 | |
|       Protocol (<acronym>IPP</acronym>) as the basis for managing
 | |
|       print jobs and queues.  The Line Printer Daemon
 | |
|       (<acronym>LPD</acronym>), Server Message Block
 | |
|       (<acronym>SMB</acronym>), and AppSocket (a.k.a. JetDirect)
 | |
|       protocols are also supported with reduced functionality.
 | |
|       <application>CUPS</application> adds network printer browsing and
 | |
|       PostScript Printer Description (<acronym>PPD</acronym>) based
 | |
|       printing options to support real-world printing under &unix;.  As
 | |
|       a result, <application>CUPS</application> is ideally-suited for
 | |
|       sharing and accessing printers in mixed environments of &os;,
 | |
|       &linux;, &macos; X, or &windows;.</para>
 | |
| 
 | |
|     <para>The main site for <application>CUPS</application> is <ulink
 | |
| 	url="http://www.cups.org/"></ulink>.</para>
 | |
| 
 | |
|     <sect2 id="printing-cups-install">
 | |
|       <title>Installing the CUPS Print Server</title>
 | |
| 
 | |
|       <para><application>CUPS</application> can be installed from ports
 | |
| 	or by using a precompiled binary package.  To install
 | |
| 	<application>CUPS</application> from ports, issue the following
 | |
| 	command from a root terminal:</para>
 | |
| 
 | |
|       <screen>&prompt.root; <userinput>cd /usr/ports/print/cups && make install clean</userinput></screen>
 | |
| 
 | |
|       <para>To install <application>CUPS</application> using a
 | |
| 	precompiled binary, issue the following command from a root
 | |
| 	terminal:</para>
 | |
| 
 | |
|       <screen>&prompt.root; <userinput>pkg_add -r cups</userinput></screen>
 | |
| 
 | |
|       <para>Other optional, but recommended, ports or packages are
 | |
| 	<application>print/gutenprint-cups</application> and
 | |
| 	<application>print/hplip</application>, both of which add
 | |
| 	drivers and utilities for a variety of printers.  Once
 | |
| 	installed, the <application>CUPS</application> configuration
 | |
| 	files can be found in the directory
 | |
| 	<filename>/usr/local/etc/cups</filename>.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="printing-cups-configuring-server">
 | |
|       <title>Configuring the CUPS Print Server</title>
 | |
| 
 | |
|       <para>After installation, a few files must edited in order to
 | |
| 	configure the <application>CUPS</application> server.  First,
 | |
| 	create or modify, as the case may be, the file
 | |
| 	<filename>/etc/devfs.rules</filename> and add the following
 | |
| 	information to set the proper permissions on all potential
 | |
| 	printer devices and to associate printers with the cups user
 | |
| 	group:</para>
 | |
| 
 | |
|       <programlisting>[system=10]
 | |
| add path 'unlpt*' mode 0660 group cups
 | |
| add path 'ulpt*' mode 0660 group cups
 | |
| add path 'lpt*' mode 0660 group cups</programlisting>
 | |
| 
 | |
|       <para>Next, add two lines to <filename>/etc/rc.conf</filename>
 | |
| 	as follows:</para>
 | |
| 
 | |
|       <programlisting>cupsd_enable="YES"
 | |
| devfs_system_ruleset="system"</programlisting>
 | |
| 
 | |
|       <para>These two entries will start the
 | |
| 	<application>CUPS</application> print server on boot and invoke
 | |
| 	the local devfs rule created above, respectively.</para>
 | |
| 
 | |
|       <para>In order to enable <application>CUPS</application> printing
 | |
| 	under certain µsoft.windows; clients, the line
 | |
| 	<programlisting>application/octet-stream</programlisting> should be
 | |
| 	uncommented in <filename>/usr/local/etc/cups/mime.types</filename>
 | |
| 	and <filename>/usr/local/etc/cups/mime.convs</filename>.</para>
 | |
| 
 | |
|       <para>Once these changes have been made, the &man.devfs.8; and
 | |
| 	<application>CUPS</application> systems must both be restarted,
 | |
| 	either by rebooting the computer or issuing the following two
 | |
| 	commands in a root terminal:</para>
 | |
| 
 | |
|       <screen>&prompt.root; <userinput>/etc/rc.d/devfs restart</userinput>
 | |
| &prompt.root; <userinput>/usr/local/etc/rc.d/cupsd restart</userinput></screen>
 | |
| 
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="printing-cups-configuring-printers">
 | |
|       <title>Configuring Printers on the CUPS Print Server</title>
 | |
| 
 | |
|       <para>After the <application>CUPS</application> system has been
 | |
| 	installed and configured, the administrator can begin configuring
 | |
| 	the local printers attached to the
 | |
| 	<application>CUPS</application> print server.  This part of the
 | |
| 	process is very similar, if not identical, to configuring
 | |
| 	<application>CUPS</application> printers on other &unix;-based
 | |
| 	operating systems, such as a &linux; distribution.</para>
 | |
| 
 | |
|       <para>The primary means for managing and administering the
 | |
| 	<application>CUPS</application> server is through the web-based
 | |
| 	interface, which can be found by launching a web browser and
 | |
| 	entering <filename>http://localhost:631</filename> in the
 | |
| 	browser's URL bar.  If the <application>CUPS</application>
 | |
| 	server is on another machine on the network, substitute the
 | |
| 	server's local <acronym>IP</acronym> addresss for
 | |
| 	<literal>localhost</literal>. The <application>CUPS</application>
 | |
| 	web interface is fairly self-explanatory, as there are sections
 | |
| 	for managing printers and print jobs, authorizing users, and
 | |
| 	more.  Additionally, on the right-hand side of the
 | |
| 	Administration screen are several check-boxes allowing easy
 | |
| 	access to commonly-changed settings, such as whether to share
 | |
| 	published printers connected to the system, whether to allow
 | |
| 	remote administration of the <application>CUPS</application>
 | |
| 	server, and whether to allow users additional access and
 | |
| 	privileges to the printers and print jobs.</para>
 | |
| 
 | |
|       <para>Adding a printer is generally as easy as clicking
 | |
| 	<literal>Add Printer</literal> at the Administration screen of
 | |
| 	the <application>CUPS</application> web interface, or clicking
 | |
| 	one of the <literal>New Printers Found</literal> buttons also
 | |
| 	at the Administration screen.  When presented with the
 | |
| 	<literal>Device</literal> drop-down box, simply select the
 | |
| 	desired locally-attached printer, and then continue through the
 | |
| 	process.  If one has added the
 | |
| 	<application>print/gutenprint-cups</application> or
 | |
| 	<application>print/hplip</application> ports or packages as
 | |
| 	referenced above, then additional print drivers will be available
 | |
| 	in the subsequent screens that might provide more stability or
 | |
| 	features.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="printing-cups-clients">
 | |
|       <title>Configuring CUPS Clients</title>
 | |
| 
 | |
|       <para>Once the <application>CUPS</application> server has been
 | |
| 	configured and printers have been added and published to the
 | |
| 	network, the next step is to configure the clients, or the
 | |
| 	machines that are going to access the
 | |
| 	<application>CUPS</application> server.  If one has a single
 | |
| 	desktop machine that is acting as both server and client, then
 | |
| 	much of this information may not be needed.</para>
 | |
| 
 | |
|       <sect3 id="printing-cups-clients-unix">
 | |
| 	<title>&unix; Clients</title>
 | |
| 
 | |
| 	<para><application>CUPS</application> will also need to be
 | |
| 	  installed on your &unix; clients.  Once
 | |
| 	  <application>CUPS</application> is installed on the clients,
 | |
| 	  then <application>CUPS</application> printers that are
 | |
| 	  shared across the network are often automatically discovered by
 | |
| 	  the printer managers for various desktop environments such as
 | |
| 	  <application>GNOME</application> or
 | |
| 	  <application>KDE</application>.  Alternatively, one can access
 | |
| 	  the local <application>CUPS</application> interface on the
 | |
| 	  client machine at <filename>http://localhost:631</filename> and
 | |
| 	  click on <literal>Add Printer</literal> in the Administration
 | |
| 	  section.  When presented with the <literal>Device</literal>
 | |
| 	  drop-down box, simply select the networked
 | |
| 	  <application>CUPS</application> printer, if it was
 | |
| 	  automatically discovered, or select <literal>ipp</literal> or
 | |
| 	  <literal>http</literal> and enter the <acronym>IPP</acronym> or
 | |
| 	  <acronym>HTTP</acronym> <acronym>URI</acronym> of the networked
 | |
| 	  <application>CUPS</application> printer, usually in one of the
 | |
| 	  two following syntaxes:</para>
 | |
| 
 | |
| 	<programlisting>ipp://server-name-or-ip/printers/printername</programlisting>
 | |
| 
 | |
| 	<programlisting>http://server-name-or-ip:631/printers/printername</programlisting>
 | |
| 
 | |
| 	<para>If the <application>CUPS</application> clients have
 | |
| 	  difficulty finding other <application>CUPS</application>
 | |
| 	  printers shared across the network, sometimes it is helpful to
 | |
| 	  add or create a file
 | |
| 	  <filename>/usr/local/etc/cups/client.conf</filename> with a
 | |
| 	  single entry as follows:</para>
 | |
| 
 | |
| 	<programlisting>ServerName (server-ip)</programlisting>
 | |
| 
 | |
| 	<para>In this case, (server-ip) would be replaced by the local
 | |
| 	  <acronym>IP</acronym> address of the
 | |
| 	  <application>CUPS</application> server on the network.</para>
 | |
|       </sect3>
 | |
| 
 | |
|       <sect3 id="printing-cups-clients-windows">
 | |
| 	<title>&windows; Clients</title>
 | |
| 
 | |
| 	<para>Versions of &windows; prior to XP did not have the
 | |
| 	  capability to natively network with
 | |
| 	  <acronym>IPP</acronym>-based printers.  However, &windowsxp;
 | |
| 	  and later versions do have this capability.  Therefore, to
 | |
| 	  add a <application>CUPS</application> printer in these
 | |
| 	  versions of &windows; is quite easy.  Generally, the &windows;
 | |
| 	  administrator will run the &windows;
 | |
| 	  <literal>Add Printer</literal> wizard, select <literal>Network
 | |
| 	    Printer</literal> and then enter the <acronym>URI</acronym>
 | |
| 	  in the following syntax:</para>
 | |
| 
 | |
| 	<programlisting>http://server-name-or-ip:631/printers/printername</programlisting>
 | |
| 
 | |
| 	<para>If one has an older version of &windows; without native
 | |
| 	  <acronym>IPP</acronym> printing support, then the general
 | |
| 	  means of connecting to a <application>CUPS</application>
 | |
| 	  printer is to use
 | |
| 	  <filename role="package">net/samba3</filename> and
 | |
| 	  <application>CUPS</application> together, which is a topic
 | |
| 	  outside the scope of this chapter.</para>
 | |
|       </sect3>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="printing-cups-troubleshooting">
 | |
|       <title>CUPS Troubleshooting</title>
 | |
| 
 | |
|       <para>Difficulties with <application>CUPS</application> often lies
 | |
| 	in permissions.  First, double check the &man.devfs.8;
 | |
| 	permissions as outlined above.  Next, check the actual
 | |
| 	permissions of the devices created in the filesystem.  It is
 | |
| 	also helpful to make sure your user is a member of the
 | |
| 	<literal>cups</literal> group.  If the permissions check boxes
 | |
| 	in the <literal>Administration</literal> section of the
 | |
| 	<application>CUPS</application> web interface do not seem to be
 | |
| 	working, another fix might be to manually backup the main
 | |
| 	<application>CUPS</application> configuration file located at
 | |
| 	<filename>/usr/local/etc/cups/cupsd.conf</filename> and edit the
 | |
| 	various configuration options and try different combinations of
 | |
| 	configuration options.  One sample
 | |
| 	<filename>/usr/local/etc/cups/cupsd.conf</filename> to test is
 | |
| 	listed below.  Please note that this sample
 | |
| 	<filename>cupsd.conf</filename> file sacrifices security for
 | |
| 	easier configuration; once the administrator successfully
 | |
| 	connnects to the <application>CUPS</application> server and
 | |
| 	configures the clients, it is advisable to revisit this
 | |
| 	configuration file and begin locking down access.</para>
 | |
| 
 | |
|       <programlisting># Log general information in error_log - change "info" to "debug" for
 | |
| # troubleshooting...
 | |
| LogLevel info
 | |
| 
 | |
| # Administrator user group...
 | |
| SystemGroup wheel
 | |
| 
 | |
| # Listen for connections on Port 631.
 | |
| Port 631
 | |
| #Listen localhost:631
 | |
| Listen /var/run/cups.sock
 | |
| 
 | |
| # Show shared printers on the local network.
 | |
| Browsing On
 | |
| BrowseOrder allow,deny
 | |
| #BrowseAllow @LOCAL
 | |
| BrowseAllow 192.168.1.* # change to local LAN settings
 | |
| BrowseAddress 192.168.1.* # change to local LAN settings
 | |
| 
 | |
| # Default authentication type, when authentication is required...
 | |
| DefaultAuthType Basic
 | |
| DefaultEncryption Never # comment this line to allow encryption
 | |
| 
 | |
| # Allow access to the server from any machine on the LAN
 | |
| <Location />
 | |
|   Order allow,deny
 | |
|   #Allow localhost
 | |
|   Allow 192.168.1.* # change to local LAN settings
 | |
| </Location>
 | |
| 
 | |
| # Allow access to the admin pages from any machine on the LAN
 | |
| <Location /admin>
 | |
|   #Encryption Required
 | |
|   Order allow,deny
 | |
|   #Allow localhost
 | |
|   Allow 192.168.1.* # change to local LAN settings
 | |
| </Location>
 | |
| 
 | |
| # Allow access to configuration files from any machine on the LAN
 | |
| <Location /admin/conf>
 | |
|   AuthType Basic
 | |
|   Require user @SYSTEM
 | |
|   Order allow,deny
 | |
|   #Allow localhost
 | |
|   Allow 192.168.1.* # change to local LAN settings
 | |
| </Location>
 | |
| 
 | |
| # Set the default printer/job policies...
 | |
| <Policy default>
 | |
|   # Job-related operations must be done by the owner or an adminstrator...
 | |
|   <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \
 | |
| Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \
 | |
| Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \
 | |
| CUPS-Move-Job>
 | |
|     Require user @OWNER @SYSTEM
 | |
|     Order deny,allow
 | |
|   </Limit>
 | |
| 
 | |
|   # All administration operations require an adminstrator to authenticate...
 | |
|   <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \
 | |
| Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \
 | |
| Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \
 | |
| Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \
 | |
| CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
 | |
|     AuthType Basic
 | |
|     Require user @SYSTEM
 | |
|     Order deny,allow
 | |
|   </Limit>
 | |
| 
 | |
|   # Only the owner or an administrator can cancel or authenticate a job...
 | |
|   <Limit Cancel-Job CUPS-Authenticate-Job>
 | |
|     Require user @OWNER @SYSTEM
 | |
|     Order deny,allow
 | |
|   </Limit>
 | |
| 
 | |
|   <Limit All>
 | |
|     Order deny,allow
 | |
|   </Limit>
 | |
| </Policy></programlisting>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 id="printing-cups-ports-knobs">
 | |
|       <title>Fine Tuning CUPS-Related Ports</title>
 | |
| 
 | |
|       <para>If <application>CUPS</application> is going to serve as the
 | |
| 	primary printing system, then one may choose to optionally add
 | |
| 	certain knobs to <filename>/etc/make.conf</filename> that will
 | |
| 	emphasize <application>CUPS</application> over other printing
 | |
| 	options.  Some of these "knobs" that one may want to add
 | |
| 	are:</para>
 | |
| 
 | |
|       <programlisting>WITH_CUPS=YES
 | |
| CUPS_OVERWRITE_BASE=YES
 | |
| WITHOUT_LPR=YES</programlisting>
 | |
| 
 | |
|       <para>The first knob, WITH_CUPS, adds
 | |
| 	<application>CUPS</application> support to ports where
 | |
| 	applicable.  The second knob, CUPS_OVERWRITE_BASE, will fix
 | |
| 	certain symlinks and paths that would otherwise apply to the
 | |
| 	default &os; printing system, <application>LPR</application>,
 | |
| 	and will prevent these fixes from being reverted upon the next
 | |
| 	"buildworld" system upgrade.  The third knob, WITHOUT_LPR, will
 | |
| 	prevent <application>LPR</application> support from being added
 | |
| 	to ports where applicable.</para>
 | |
|     </sect2>
 | |
|   </sect1>
 | |
| </article>
 | |
| 
 | |
| <!--
 | |
|      Local Variables:
 | |
|      mode: sgml
 | |
|      sgml-indent-data: t
 | |
|      sgml-omittag: nil
 | |
|      sgml-always-quote-attributes: t
 | |
|      End:
 | |
| -->
 |