---
title: CUPS no FreeBSD
authors:
  - author: Chess Griffin
    email: chess@chessgriffin.com
releaseinfo: "$FreeBSD$" 
trademarks: ["freebsd", "general"]
---

= CUPS no FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:toc-title: Índice
:part-signifier: Parte
:chapter-signifier: Capítulo
:appendix-caption: Apêndice
:table-caption: Tabela
:figure-caption: Figura
:example-caption: Exemplo

[.abstract-title]
Resumo

Um artigo sobre como configurar o CUPS no FreeBSD.

'''

toc::[]

[[printing-cups]]
== Uma introdução ao Common Unix Printing System (CUPS)

O CUPS, o Common UNIX Printing System, fornece uma camada de impressão portátil para sistemas operacionais baseados no UNIX(R). Ele foi desenvolvido pela Easy Software Products para prover uma solução de impressão padrão para todos os fornecedores e usuários do UNIX(R).

O CUPS usa o Internet Printing Protocol (IPP) como base para gerenciar trabalhos de impressão e filas. O Line Printer Daemon (LPD), os protocolos Server Message Block (SMB) e AppSocket (também conhecido como JetDirect) também são suportados com funcionalidade reduzida. O CUPS adiciona opções de impressão com base em impressoras de rede e de impressão PostScript (PPD) para oferecer suporte à impressão no mundo UNIX(R). Como resultado, o CUPS é ideal para compartilhar e acessar impressoras em ambientes heterogêneos nos quais coexistem equipamentos rodando FreeBSD, Linux(R), Mac OS(R) X, e Windows(R).

O site do CUPS é http://www.cups.org/[http://www.cups.org/].

[[printing-cups-install]]
== Instalando o CUPS Print Server

Para instalar o CUPS utilizando binários pré compilados, execute o seguinte comando como root a partir de um terminal:

[source,bash]
....
# pkg install cups
....

Outros pacotes opcionais, mas recomendados, são o package:print/gutenprint[] e o package:print/hplip[], ambos adicionam drivers e utilitários para uma variedade de impressoras. Uma vez instalados, os arquivos de configuração do CUPS podem ser encontrados no diretório [.filename]#/usr/local/etc/cups#.

[[printing-cups-configuring-server]]
== Configurando o CUPS Print Server

Após a instalação, alguns arquivos devem ser editados para configurar o servidor CUPS. Primeiro, crie ou modifique, conforme o caso, o arquivo [.filename]#/etc/devfs.rules# e adicione as seguintes informações para definir as permissões adequadas em todos os dispositivos de impressora e para associar impressoras ao grupo de usuários do `cups`:

[.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/X.Y.Z' mode 0660 group cups
....

[NOTE]
====
Observe que _X_, _Y_ e _Z_ devem ser substituídos pelo dispositivo USB de destino listado no diretório [.filename]#/dev/usb# que corresponde à sua impressora. Para encontrar o dispositivo correto, examine a saída do comando man:dmesg[8], onde [.filename]#ugenX.Y# lista o dispositivo de impressora, que é um link simbólico para um dispositivo USB em [.filename]#/dev/usb#.
====

Em seguida, adicione as linhas abaixo no [.filename]#/etc/rc.conf# conforme abaixo:

[.programlisting]
....
cupsd_enable="YES"
devfs_system_ruleset="system"
....

Essas duas entradas iniciarão o servidor de impressão do CUPS após o boot do sistema e carregará a regra do devfs local acima, respectivamente.

Para habilitar a impressão via CUPS em alguns clientes Microsoft(R) Windows(R) você deverá remover o comentário da linha abaixo nos arquivos [.filename]#/usr/local/etc/cups/mime.types# e [.filename]#/usr/local/etc/cups/mime.convs#:

[.programlisting]
....
application/octet-stream
....

Uma vez que estas alterações tenham sido feitas, os sistemas man:devfs[8] e CUPS deverão ser reiniciados, seja reiniciando o computador ou executando os dois comandos a seguir como root em um terminal:

[source,bash]
....
# /etc/rc.d/devfs restart
# /usr/local/etc/rc.d/cupsd restart
....

[[printing-cups-configuring-printers]]
== Configurando Impressoras no CUPS Print Server

Depois que o sistema CUPS tiver sido instalado e configurado, o administrador poderá começar a configurar as impressoras locais conectadas ao servidor de impressão CUPS. Essa parte do processo é muito semelhante, se não idêntica, à configuração de impressoras CUPS em outros sistemas operacionais baseados em UNIX(R), como o Linux(R).

O principal meio para gerenciar e administrar o servidor CUPS é através da sua interface web, que pode ser acessada por meio de um navegador web, para isto execute o navegador e digite a URL http://localhost:631[http://localhost:631] na barra de endereços do navegador. Se o servidor CUPS estiver em outra máquina na rede, substitua o endereço IP local do servidor por `localhost`. A interface Web do CUPS é bastante autoexplicativa, pois há seções para gerenciar impressoras e trabalhos de impressão, autorizar usuários e muito mais. Além disso, no lado direito da tela de administração, existem várias caixas de seleção que permitem acesso fácil a configurações comumente alteradas, como compartilhar impressoras conectadas ao sistema, permitir a administração remota do servidor CUPS, e se deseja permitir aos usuários acesso adicional e privilégios para as impressoras e trabalhos de impressão.

Adicionar uma impressora geralmente é tão fácil quanto clicar em "Adicionar impressora" na tela Administração da interface Web do CUPS ou clicar em um dos botões "Novas impressoras encontradas" também na tela Administração. Quando for apresentada a caixa suspensa "Device", basta selecionar a impressora conectada localmente a qual você deseja utilizar e continuar o processo. Se você adicionou os aplicativos package:print/gutenprint-cups[] e/ou package:print/hplip[] via ports ou pacotes conforme mencionado acima, os drivers de impressão adicionais estarão disponíveis nas telas subsequentes, eles lhe fornecer mais estabilidade ou mais recursos.

[[printing-cups-clients]]
== Configurando clientes CUPS

Depois que o servidor CUPS tiver sido configurado e as impressoras tiverem sido adicionadas e publicadas na rede, a próxima etapa será configurar os clientes ou as máquinas que acessarão o servidor CUPS. Se alguém tiver uma única máquina desktop atuando como servidor e cliente, muitas dessas informações podem não ser necessárias.

[[printing-cups-clients-unix]]
=== Clientes UNIX(R)

O CUPS também precisará ser instalado em seus clientes UNIX(R). Depois que o CUPS é instalado nos clientes, as impressoras CUPS compartilhadas na rede geralmente são descobertas automaticamente pelos gerenciadores de impressoras de vários ambientes de desktop, como GNOME ou KDE. Como alternativa, pode-se acessar a interface local do CUPS na máquina cliente em http://localhost:631[http://localhost:631] e clicar em em "Adicionar impressora" na seção Administração. Quando visualizar a caixa suspensa "Device", simplesmente selecione a impressora CUPS em rede, se ela foi descoberta automaticamente, ou selecione `ipp` ou `http` e digite o IPP ou HTTP URI da impressora CUPS em rede, geralmente em um das duas seguintes sintaxes:

[.programlisting]
....
ipp://server-name-or-ip/printers/printername
....

[.programlisting]
....
http://server-name-or-ip:631/printers/printername
....

Se os clientes CUPS tiverem dificuldade para localizar outras impressoras CUPS compartilhadas na rede, às vezes é útil adicionar ou criar um arquivo [.filename]#/usr/local/etc/cups/client.conf# com uma única entrada da seguinte forma:

[.programlisting]
....
ServerName server-ip
....

Nesse caso, _server-ip_ seria substituído pelo endereço IP local do servidor CUPS na rede.

[[printing-cups-clients-windows]]
=== Clientes Windows(R)

As versões do Windows(R) anteriores ao XP não tinham a capacidade utilizar impressoras em rede baseadas no protocolo IPP. No entanto, o Windows(R) XP e as versões posteriores têm essa capacidade. Portanto, adicionar uma impressora no CUPS nessas versões do Windows(R) é muito fácil. Geralmente, o administrador Windows(R) deverá executar o assistente do Windows(R) `Adicionar impressora`, e selecionar `Impressora de rede` e, em seguida, inserir o URI na seguinte sintaxe:

[.programlisting]
....
http://server-name-or-ip:631/printers/printername
....

Se alguém tiver uma versão mais antiga do Windows(R) sem suporte a impressão nativa IPP, o meio geral de se conectar a uma impressora no CUPS é usar o software package:net/samba410[] e o CUPS juntos, o que é um tópico fora do escopo deste artigo.

[[printing-cups-troubleshooting]]
== Solução de problemas do CUPS

A maior parte dos problemas que ocorrem com o CUPS estão geralmente associados a problemas de permissão. Primeiro, verifique novamente as permissões do man:devfs[8] conforme descrito acima. Em seguida, verifique as permissões reais dos dispositivos criados no sistema de arquivos. Também é útil certificar-se de que seu usuário é membro do grupo `cups`. Se as caixas de seleção de permissões na seção Administração da interface Web do CUPS não estiverem funcionando, outra correção poderá ser o backup manual do arquivo de configuração principal do CUPS localizado em [.filename]#/usr/local/etc/cups/cupsd.conf# e edite as várias opções de configuração e experimente diferentes combinações de opções de configuração. Um exemplo do [.filename]#/usr/local/etc/cups/cupsd.conf# para testar está listado abaixo. Por favor note que este exemplo de arquivo [.filename]#cupsd.conf# sacrifica a segurança para facilitar a configuração; Depois que o administrador se conectar com êxito ao servidor do CUPS e configurar os clientes, é aconselhável revisitar esse arquivo de configuração para começar a fechar o acesso.

[.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 administrator...
  <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 administrator 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>
....
