Submitted by: claudiu vasadi <claudiu.vasadi@gmail.com> Patch by: Glen Barber <glen.j.barber@gmail.com>
		
			
				
	
	
		
			399 lines
		
	
	
	
		
			17 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			399 lines
		
	
	
	
		
			17 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>Griffin</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>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1 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
 | |
|       <filename role="package">print/gutenprint-cups</filename> and
 | |
|       <filename role="package">print/hplip</filename>, 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>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1 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
 | |
|       <groupname>cups</groupname> 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
 | |
| add path 'usb/<replaceable>X</replaceable>.<replaceable>Y</replaceable>.<replaceable>Z</replaceable>' mode 0660 group cups</programlisting>
 | |
| 
 | |
|     <note>
 | |
|       <para>Note that <replaceable>X</replaceable>,
 | |
| 	<replaceable>Y</replaceable>, and <replaceable>Z</replaceable>
 | |
| 	should be replaced with the target USB device listed in the
 | |
| 	<filename class="directory">/dev/usb</filename> directory that
 | |
| 	corresponds to the printer.  To find the correct device, examine
 | |
| 	the output of &man.dmesg.8;, where
 | |
| 	<filename>ugen<replaceable>X</replaceable>.<replaceable>Y</replaceable></filename>
 | |
| 	lists the printer device, which is a symbolic link to a USB
 | |
| 	device in <filename
 | |
| 	  class="directory">/dev/usb</filename>.</para>
 | |
|     </note>
 | |
| 
 | |
|     <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 below should
 | |
|       be uncommented in
 | |
|       <filename>/usr/local/etc/cups/mime.types</filename> and
 | |
|       <filename>/usr/local/etc/cups/mime.convs</filename>:</para>
 | |
| 
 | |
|     <programlisting>application/octet-stream</programlisting>
 | |
| 
 | |
|     <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>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1 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 <ulink url="http://localhost:631"></ulink> 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> address for
 | |
|       <hostid>localhost</hostid>.  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 <quote>Add
 | |
|       Printer</quote> at the Administration screen of the
 | |
|       <application>CUPS</application> web interface, or clicking one of
 | |
|       the <quote>New Printers Found</quote> buttons also at the
 | |
|       Administration screen.  When presented with the
 | |
|       <quote>Device</quote> drop-down box, simply select the desired
 | |
|       locally-attached printer, and then continue through the process.
 | |
|       If one has added the <filename
 | |
|       role="package">print/gutenprint-cups</filename> or <filename
 | |
|       role="package">print/hplip</filename> 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>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1 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>
 | |
| 
 | |
|     <sect2 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 <ulink url="http://localhost:631"></ulink> and
 | |
| 	click on <quote>Add Printer</quote> in the Administration
 | |
| 	section.  When presented with the <quote>Device</quote>
 | |
| 	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://<replaceable>server-name-or-ip</replaceable>/printers/<replaceable>printername</replaceable></programlisting>
 | |
| 
 | |
| 	<programlisting>http://<replaceable>server-name-or-ip</replaceable>:631/printers/<replaceable>printername</replaceable></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 <replaceable>server-ip</replaceable></programlisting>
 | |
| 
 | |
|       <para>In this case, <replaceable>server-ip</replaceable> would be
 | |
| 	replaced by the local <acronym>IP</acronym> address of the
 | |
| 	<application>CUPS</application> server on the network.</para>
 | |
|     </sect2>
 | |
| 
 | |
|     <sect2 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://<replaceable>server-name-or-ip</replaceable>:631/printers/<replaceable>printername</replaceable></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>
 | |
|     </sect2>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1 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 file system.  It is also helpful to make
 | |
|       sure your user is a member of the <groupname>cups</groupname>
 | |
|       group.  If the permissions check boxes in the Administration
 | |
|       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
 | |
|       connects 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>
 | |
|   </sect1>
 | |
| 
 | |
|   <sect1 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 <quote>knobs</quote> that one may want to
 | |
|       add are:</para>
 | |
| 
 | |
|     <programlisting>WITH_CUPS=YES
 | |
| CUPS_OVERWRITE_BASE=YES
 | |
| WITHOUT_LPR=YES</programlisting>
 | |
| 
 | |
|     <para>The first knob, <makevar>WITH_CUPS</makevar>, adds
 | |
|       <application>CUPS</application> support to ports where applicable.
 | |
|       The second knob, <makevar>CUPS_OVERWRITE_BASE</makevar>, 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
 | |
|       <maketarget>buildworld</maketarget> system upgrade.  The third
 | |
|       knob, <makevar>WITHOUT_LPR</makevar>, will prevent
 | |
|       <application>LPR</application> support from being added to ports
 | |
|       where applicable.</para>
 | |
|   </sect1>
 | |
| </article>
 | |
| 
 | |
| <!--
 | |
|      Local Variables:
 | |
|      mode: sgml
 | |
|      sgml-indent-data: t
 | |
|      sgml-omittag: nil
 | |
|      sgml-always-quote-attributes: t
 | |
|      End:
 | |
| -->
 |