Servidor de Impressão Linux.

cupsNeste artigo iremos abordado a instalação e configuração de um servidor de impressão no Linux. Utilizaremos o pacote “Cups” como servidor de impressão, e o webservice Jasmine como um sistema de bilhetagem que tem por finalidade contabilizar as páginas impressas em diferentes impressoras, disponibilizando relatórios de impressão integrados com um controlador de Domínio.

CONSIDERAÇÕES.

Iremos utilizar como sistema operacional a distribuição “Debian 8.5 – jessie“. Também vamos considerar que você já esteja com seu Linux instalado e ingressado em um domínio. Se ainda não fez estes passos, sugiro que primeiramente leia nosso artigo “Colocando Linux no Domínio” antes de dar continuidade na implementação do servidor de impressão.

1) INSTALANDO CUPS.

Com a máquina integrada ao domínio, devemos instalar o pacote “Cups” (anteriormente um acrónimo para Common Unix Printing System, mas agora com nenhuma expansão oficial), um sistema de impressão para sistemas operativos de computador tipo unix, que permite que um computador aja como um servidor de impressão. Fonte: https://pt.wikipedia.org/wiki/CUPS. Conforme o seguinte comando ilustrado abaixo.

apt-get install cups

2) INSTALAÇÃO SERVIDOR WEB.

Após a instalação do pacote “Cups” precisamos realizar a instalação do gerenciador de relatórios “Jasmine”. Vamos considerar que você já esteja com um servidor web Linux instalado, neste artigo vamos utilizar o “Apache2”. Se ainda não fez estes passos, sugiro que primeiramente leia nosso artigo “Servidor Web com apache2” antes de dar continuidade na implementação do servidor de impressão.

3) INSTALAÇÃO JASMINE – DOWNLOAD.

Pra instalar o “Jasmine”, precisamos primeiramente baixar seus pacotes. Vamos utilizar o comando “wget” para baixa-los conforme ilustrado abaixo.

Nota: Lembre-se que o comando “wget” baixa as informações solicitadas para a pasta atual. Para melhor organização, crie uma pastas chamada “jasmine” e acesse-a.

mkdir ~/jasmine &&  cd ~/jasmine
wget http://nayco3.free.fr/Jasmine/Releases/0.0.3/JASmine-MySQL-0.0.3.tar.bz2
wget http://nayco3.free.fr/Jasmine/Releases/0.0.3/JASmine-Backend-0.0.3.tar.bz2
wget http://nayco3.free.fr/Jasmine/Releases/0.0.3/JASmine-Web-0.0.3.tar.bz2

Após baixar os arquivos precisamos descompactados, utilizaremos o comando “tar” para realizar este procedimento conforme comando ilustrado abaixo.

tar -xvjf JASmine-Backend-0.0.3.tar.bz2
tar -xvjf JASmine-Web-0.0.3.tar.bz2
tar -xvjf JASmine-MySQL-0.0.3.tar.bz2

4) INSTALAÇÃO JASMINE – BANCO DE DADOS.

Precisamos também criar um banco de dados para a nossa aplicação “Jasmine”. Vamos utilizar os comandos “mysql” conforme ilustrado abaixo.

Acesse o Mysql:

mysql -uusuario -psenha

Cria um banco de dados chamado jasmine:

mysql>CREATE DATABASE jasmine;

Cria um usuário para acessar o banco de dados:

mysql>CREATE USER 'jasmine'@'localhost' IDENTIFIED BY 'senha_usuario_jasmine';

De permissão de acesso total para o usuário criado, somente para o banco “jasmine” especificado:

mysql>GRANT USAGE ON *.* TO 'jasmine'@'localhost' IDENTIFIED BY 'senha_usuario_jasmine' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
mysql>GRANT ALL PRIVILEGES ON `jasmine`.* TO 'jasmine'@'localhost';

Feito isso, precisamos agora rodar um script sql para criar as tabelas que serão utilizadas na nossa aplicação “jasmine”. Acessando o pasta descompactada do JASmine-MySQL-0.0.3.tar.bz2, repare que existe um arquivo chamado “jasmine.sql”. Este arquivo está com erro de sintax devido as novas versões que hoje já estão sendo utilizada pelo MySQL. Versões acima do MySQL 5.5 devem utilizar o script com nova sintax. Crie um novo arquivo chamado “jasmine2.sql” e adicione o código abaixo, salve e saia do arquivo.

CREATE TABLE IF NOT EXISTS `jobs_log` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`job_id` tinytext NOT NULL,
`printer` tinytext NOT NULL,
`user` tinytext NOT NULL,
`server` tinytext NOT NULL,
`title` tinytext NOT NULL,
`copies` smallint(6) NOT NULL DEFAULT '0',
`pages` smallint(6) NOT NULL DEFAULT '0',
`options` tinytext NOT NULL,
`doc` tinytext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=24;

Agora vamos rodar o script em nosso banco de dados conforme comando ilustrado abaixo.

mysql -uroot -psenha jasmine < jasmine2.sql

5) INSTALAÇÃO JASMINE – BACKEND.

Precisamos instalar o backend de nossa aplicação “jasmine” para isso vamos acessar a pasta descompactada do JASmine-Backend-0.0.3.tar.gz, e realizar a instalação conforme comando ilustrado abaixo.

cd ~/jasmine/JASmine-Backend-0.0.3
tar zxvf pkpgcounter-2.10.tar.gz
cd pkpgcounter-2.10
./setup.py install
cd ..

Agora precisamos mover os arquivos “jasmine” e “dummy” para o diretório “/usr/lib/cups/backend” de nossa máquina e dar permissão de leitura, escrita e execução.

cp jasmine /usr/lib/cups/backend
chmod 755 /usr/lib/cups/backend/jasmine
cp dummy /usr/lib/cups/backend
chmod 755 /usr/lib/cups/backend/dummy

Precisamos modificar algumas linhas do arquivo “/usr/lib/cups/backend/jasmine”, de forma que nosso backend identifique o banco de dados criado. Realize as alterações conforme ilustrado abaixo.

my $DBhost="localhost";
my $DBlogin="jasmine";
my $DBpassword="senha_do_usuario_jasmine";
my $DBdatabase="jasmine";
my $Want_Sys_Syslog=1;
my $Debug_Mode=0;
my $path_to_pkpgcounter="/usr/local/bin/pkpgcounter";
my $path_to_python="/usr/bin/python";

Nota: Após instalação do “Jasmine” observar que o mesmo não esta contabilizando as páginas impressas. Verifique as linhas “$path_to_python” e “$path_to_pkpgcounter”. Provavelmente uma delas ou ambas, estão apontamento para o caminho errado.

6) INSTALAÇÃO JASMINE – FRONTEND

Vamos então realizar também a instalação do frontend de nossa aplicação “jasmine”. Para isto, será necessário criarmos uma pasta chamada “jasmine” dentro de nosso diretório web do apache2, conforme comando ilustrado abaixo.

mkdir /var/www/html/jasmine

Copie todo o conteúdo da pasta descompactada do arquivo JASmine-Web-0.0.3.tar.gz, para a nova pasta criada.

cp -R ~/jasmine/JASmine-Web-0.0.3/* /var/www/html/jasmine

Renomeie o arquivo “config.php.dist” para config.php.

cp /var/www/html/jasmine/config.php.dist /var/www/html/jasmine/config.php

Também precisamos modificar algumas linhas do arquivo “/var/www/html/jasmine/conf.php”, de forma que nosso frontend identifique o banco de dados criado. Realize as alterações conforme ilustrado abaixo.

$DB_host="localhost";
$DB_login="jasmine";
$DB_pass="senha_do_usuario_jasmine";
$DB_db="jasmine"

7) EDITANDO O ARQUIVO “/etc/cups/cupsd.conf”

Com o jasmine praticamente configurado, precisamos agora configurar nosso servidor “Cups”. Para isto, edite o arquivo “/etc/cups/cupsd.conf” conforme informações ilustrada abaixo.

Dica: Sempre faça uma copia de backup do arquivo a ser alterado.

cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.bkp

Substitua as informações contidas no arquivo pelas ilustradas abaixo, lembre-se de alterar para mascara de sua rede. Em nosso exemplo estamos usando 192.168.*. Você também pode alterar a porta do “cups” se desejar, em nosso exemplo utilizaremos a porta padrão.

LogLevel warning
SystemGroup lpadmin
Port 631
Listen /var/run/cups/cups.sock
MaxCopies 100
Browsing On
BrowseOrder allow,deny
BrowseAddress @LOCAL
DefaultAuthType Basic
<Location />
Allow From 127.0.0.1
Allow From 192.168.*
Order allow,deny
Allow @LOCAL
</Location>
<Location /admin>
Allow From 127.0.0.1
Allow From 192.168.*
Order allow,deny
Allow @LOCAL
</Location>
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Allow From 127.0.0.1
Allow From 192.168.*
Order allow,deny
Allow @LOCAL
</Location>
<Policy default>
<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>
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit Resume-Printer 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-Accept-Jobs CUPS-Reject-Jobs>
AuthType Default
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit CUPS-Authenticate-Job>
Require user @SYSTEM
Order deny,allow
</Limit>
<Limit All>
Order deny,allow
</Limit>
</Policy>
DefaultEncryption Never

Reinicie o serviço cups, conforme comando ilustrado abaixo.

systemctl restart cups.service

ou

/etc/init.d/cups restart

Agora você já deve acessar seu servidor de impressão pelo navegador de internet. Para isso utilize o endereço conforme ilustrado abaixo.

http://nomeservidor:631/

Exemplo:

http://serverprinter:631/

ou (Acesso pelo IP)

http://192.168.2.5:631/

8) CONFIGURAÇÃO DO SAMBA “/etc/samba/smb.conf”.

Para que possamos enxergar as impressoras, que por ventura vierem a ser instaladas no servidor pela rede, precisamos realizar algumas configurações no samba, em especial o arquivo “/etc/samba/smb.conf”. E necessário disponibilizar através do samba o acesso as impressoras e drivers.

Dica: Sempre faça uma copia de backup do arquivo a ser alterado.

cp /etc/samba/smb.conf /etc/samba/smb.conf.bkp

No exemplo a seguir estamos levando em consideração que as configurações do samba já estão corretas, faltando somente acrescentar as informações referente ao serviço “Cups”. Caso tenha dúvidas e deseja confirmar as configurações do samba leia nosso artigo “Colocando Linux no domínio“. Insira as configurações conforme ilustrado abaixo.

#=============================Configuração de impressão==============+======.
printing = cups
load printers = yes
#=========================Compartilhamentos=================================.
[printers]
comment = Impressoras do Servidor
path = /var/spool/samba
printable = Yes
printing = cups
public = yes
writable = yes
load printers = yes
print ok = yes
guest ok = yes
browseable = yes

[print$]
comment = Drivers Impressora.
path = /var/lib/samba/printers
writable = no
#read only = yes
valid users = @dl_t_driversimpressao, @dl_p_driversimpressao
write list = @dl_t_driversimpressao
browseable = no
create mask = 0660
directory mask = 0770
force group = @dl_t_driversimpressao

Nota: Repare que em “valid users“, “writer list” e “force group“, estamos utilizando grupos de domínio. Uma maneira correta da aplicação de grupos é utilizando uma técnica chamada “AGDLP”. Esta técnica nos da a liberdade de trabalharmos com permissões diretamente do controlador de domínio, não tendo necessidade de alteração do arquivo “/etc/samba/smb.conf” toda vez que for necessário dar ou retirar permissão de grupos e usuários.

Precisamos também dar permissão as pastas informadas em nosso mapeamento Samba. Para a pasta “/var/lib/samba/printers” vamos adicionar o grupo “dl_t_driversimpressao” como grupo dono da pasta, conforme comando ilustrado abaixo.

chgrp -R dl_t_driversimpressao /var/lib/samba/printers

Agora vamos dar permissão de “rwx” (Leitura, Escrita e Execução) para o “u = Dono da Pasta” e “g = Grupo Dono da Pasta”, já o “o = Grupo Outros” vamos deixar com permissão “r-x” (Leitura e Execução), conforme comando ilustrado abaixo.

chmod -R 775 /var/lib/samba/printers

Com isso somente o “Dono” e o “Grupo Dono” da pasta poderão adicionar drivers de impressora, enquanto o grupo “dl_p_driversimpressao” informado no arquivo de configuração Samba, se enquadra nas permissões do grupo “Outros”, tendo somente permissão de utilização de leitura e execução.

Reinicie o serviço Samba conforme comando ilustrado abaixo.

systemctl restart smbd.service

ou

/etc/init.d/smbd restart

Pronto! Nosso servidor de impressão está configurado.

ADENDO: Também é necessário realizar a liberação do grupo de operações de impressão para o grupo dl_t_driversimpressao que utilizamos na configuração do Samba. Este passo e importante pq evita que os usuários que estejam dentro deste grupo recebam a msn de acesso negado ao administrar o servidor de impressão remotamente através da ferramenta RSAT. Como por exemplo realizar a adição de drivers adicionais.

Acesse seu servidor de impressão via Shell com a senha root e execute o seguinte comando:

net -S localhost rpc rights grant 'SEUDOMINIO\dl_t_driversimpressao' SePrintOperatorPrivilege -U'SEUDOMINIO\administrador'

CONCLUSÃO

Neste artigo foi abordado a instalação do servidor de impressão “Cups” + “Jasmine” utilizando uma distribuição Linux. Agora precisamos realizar as instalações de impressoras em nosso servidor, mas isso fica para um próximo post.

Se você gostou deste post e através dele pude lhe ajudar, o que acha de aproximarmos nosso contato? Siga meu blog e me adicione no Linkedin, aproveite para classificar algumas das minhas competências/recomendações, este simples gesto faz toda a diferença.

Att,
Rafael Oliveira
SysAdmin

FONTE: https://itbr.org/phpbb3/viewtopic.php?t=835

Continuação: “Instalando Impressoras no Cups“.

Você pode compartilhar esse artigo.

Siga o Blog Via E-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 47 outros assinantes

Sobre o Autor

Rafael Oliveira Maria - Linux

Rafael Oliveira

Bacharel em Sistemas de Informação, SysAdmin, Professor, Blogueiro e Entusiasta Linux.

Certificados:

LPIC-1-Large
LPIC-2
LinuxPlus Logo Certified
itil-foundation-digital-badge

Gostou do conteúdo? Ajude-me a manter o blog.

PicPay - Linux

Aceitamos pagamentos e doações via PicPay link picpay.me/rafaeloliveimar

28 respostas

  1. Ronie,
    Bom Dia
    Rafael excelente post, uma duvida encontrei na minha base teste, não sei porque alguns usuários que fazem a impressão de arquivos não saem com a identificação (nome do arquivo) e outros usuários fazem a impressão e apresentam o nome do arquivo. teria alguma ajuda a me oferecer ?

    1. Boa dia Ronie blz? que bom que gostou, o intuito e ajudar mesmo!

      Cara com relação a sua dúvida, e estranho uns conseguirem e outros não, infelizmente vou ficar ti devendo, não consegui simular o erro. 🙁

  2. Boa Tarde, Primeiramente parabéns pelo excelente trabalho, em segundo, o CUPS + o Jasmine estão funcionando dentro do esperado, porém estou tendo problemas nas cópias, elas não estão sendo contabilizadas, imprimo várias cópias do mesmo arquivo e ainda sim só consta uma página impressa no Jasmine.

    Sabe o que está provocando isso?

    1. Boa Noite Eldher, obrigado que bom que de alguma forma posso ser útil! Este problema creio que esteja relacionado ao driver da impressora, vou deixar seu post aqui se caso alguém tenha o mesmo problema e puder compartilhar a solução conosco. Não consegui simular o erro no momento, mas já vi isso acontecer.

  3. Boa tarde. Consegui realizar todos os passos, Rafael. Muito didático seu tutorial.
    Estou apanhando um pouco para adicionar os drivers windows dentro do servidor linux apenas.

    E me ocorre um erro, gostaria de saber se já passou pelo mesmo: Pausada – “jasmine: Couldn’t connect to the MySQL server !”

    Saberia me dizer como solucionar?

    Att,

Ficou com dúvida? Alguma Sugestão ou Elogio? Deixe seu comentário!