Em uma pequena rede, instalar os drivers manualmente ao configurar a impressora nos clientes não seria um grande problema, já que você poderia simplesmente carregar o CD de instalação, ou mesmo criar um compartilhamento de rede contendo os arquivos e fazer a instalação manualmente em cada um. Entretanto, em uma grande rede isso pode ser bastante tedioso.
Chegamos então ao recurso de upload de drivers de impressão que, naturalmente, também é suportado pelo Samba. Ele consiste em um compartilhamento oculto, chamado “print$”, que contém os drivers que serão fornecidos aos clientes.
Depois de configurar o recurso, o uso das impressoras nos clientes torna-se muito mais simples, pois você precisa apenas clicar sobre o ícone da impressora no “Meus locais de rede” para instalá-la, recurso chamado de “point and print” ou “p-n-p” (diferente do PnP, de “plug-and-play”). O Windows exibe um aviso, confirmando a instalação do driver e em seguida, a impressora é instalada automaticamente:
Configurar este recurso é um pouco trabalhoso, mas não chega a ser difícil. Vamos lá :).
O primeiro passo é criar um usuário administrativo, que você usará para acessar o servidor a partir dos clientes Windows e assim poder dar o upload dos drivers. Comece criando o usuário no servidor e cadastrando-o no Samba da forma tradicional:
# smbpasswd -a gdh
O próximo passo é ativar o uso de privilégios (que vamos usar mais adiante) no Samba e criar um compartilhamento chamado “print$”, o compartilhamento oculto onde irão os drivers de impressão. Para isso, precisaremos fazer duas alterações no arquivo “/etc/samba/smb.conf”.
A primeira é adicionar a linha “enable privileges = yes” no final da seção “[global]”, sem alterar as demais, como em:
workgroup = GRUPO
netbios name = Asus
server string = Servidor
encrypt passwords = true
wins support = yes
preferred master = yes
# invalid users = root
os level = 100
enable privileges = yes
Se você usou o Swat para configurar o arquivo, muito provavelmente ele conterá a linha “invalid users = root”. É importante que esta linha seja removida ou comentada (como no meu exemplo), caso contrário você não conseguirá atribuir os privilégios para o usuário, como faremos em seguida.
O próximo passo é incluir as linhas referentes ao compartilhamento “[printer$]”, que é um pouco diferente de um compartilhamento normal:
comment = Drivers de impressão para os clientes Windows
path = /var/smb/printers
read only = yes
write list = gdh
inherit permissions = yes
A opção “path” diz qual a pasta do servidor onde serão colocados os drivers. Aqui estou usando a pasta “/var/smb/printers”, mas você pode usar outra pasta se quiser.
Em seguida, usamos a opção “read only = yes” para que o compartilhamento seja somente-leitura e usamos a opção “write list” para criar uma exceção, permitindo que o usuário administrativo que criamos na etapa anterior possa gravar no compartilhamento. A segurança é importante, pois os drivers são baixados automaticamente para os clientes Windows, de forma que alguém mal intencionado que pudesse alterar o conteúdo da pasta poderia muito bem usar o serviço como um vetor para transmitir vírus e spywares para os clientes Windows da rede.
Você pode também usar um grupo, como em “write list = +ntadmin” ou uma lista de usuários, como em “write list = gdh, admin”; o importante é limitar o acesso apenas às pessoas autorizadas. Não se esqueça de reiniciar o Samba ou aguardar alguns minutos para que as alterações entrem em vigor.
O próximo passo é criar a pasta onde ficarão os drivers de impressão, criar as subpastas WIN40 (drivers para estações 95/98/ME) e W32X86 (estações com o NT/2000/XP) dentro dela e ajustar as permissões, de forma que o usuário criado tenha permissão para alterar o conteúdo da pasta e os demais possam apenas ler:
# cd /var/smb/printers
# mkdir WIN40 W32X86
# chown gdh WIN40 W32X86
# chmod 2775 WIN40 W32X86
Falta agora uma etapa importante, que é transformar o usuário em um administrador de impressão no Samba, pois, sem isso, ele terá acesso ao compartilhamento mas não conseguirá dar upload dos drivers a partir dos clientes, usando o procedimento que veremos a seguir.
Isso é feito usando o comando “net“, usado para ajustar os privilégios dos usuários do Samba, que deve ser executado no servidor, como root. Se o servidor se chama “asus” e o usuário se chama “gdh”, o comando seria:
A opção “-S localhost -U root” diz que o comando net deve se conectar ao servidor Samba rodando na máquina local, usando a conta de root. A opção “-W ASUS” especifica o nome do servidor (como definido na configuração do Samba) e o “grant ‘ASUSgdh’ SePrintOperatorPrivilege” adiciona os privilégios para o usuário “gdh” do servidor “asus”.
Ele vai pedir a senha de root e, em seguida, exibir uma mensagem de confirmação:
Successfully granted rights.
Se nesse ponto você receber uma mensagem de erro, dizendo que não é possível se logar no servidor, muito provavelmente você esqueceu de comentar a linha “invalid users = root”, esqueceu de adicionar a linha “enable privileges = yes” ou as alterações no arquivo ainda não entraram em vigor (nesse caso, experimente reiniciar o Samba manualmente, usando o “/etc/init.d/samba restart” ou o “service smb restart”).
Com isso, concluímos a configuração no servidor. Os passos seguintes são feitos a partir de um cliente Windows da rede.
O primeiro passo é se logar no cliente usando o mesmo login (gdh no exemplo) que foi criado no servidor, já que apenas ele possui as permissões necessárias para atualizar os drivers. Caso necessário, adicione o usuário na estação usando o “Painel de Controle > Contas de usuário”.
Acesse o servidor através do “Meus locais de rede”, acesse a pasta “Impressoras e aparelhos de fax” e clique na opção “Arquivo > Propriedades do servidor” na janela principal do Explorer:
Na janela de propriedades, acesse a aba “drivers”, que mostra os drivers disponíveis no servidor. Originalmente ela estará vazia; use o botão “Adicionar” para instalar os drivers de impressão desejados:
Se nesse ponto as opções não estiverem disponíveis, provavelmente você não adicionou o privilégio “SePrintOperatorPrivilege” para o usuário administrativo, ou não se logou usando o login correto na estação Windows.
Clicando no “adicionar” é aberta a tela padrão de seleção do driver, onde você pode usar um dos drivers do Windows ou especificar a localização de um driver. Entretanto, diferente do que teríamos normalmente, os drivers não são propriamente instalados, mas apenas copiados para o compartilhamento “print$” do servidor.
A idéia da ferramenta é justamente permitir que você adicione vários drivers diferentes, que atendam clientes rodando diferentes versões do Windows, por isso, a cada driver, é aberta uma nova janela de seleção, que pergunta a que versões do Windows o driver é destinado. Na lista, “Intel” corresponde a máquinas rodando as versões de 32 bits do Windows, enquanto “x64” corresponde a máquinas rodando as versões de 64 bits do sistema:
Dessa forma, você pode cadastrar um driver para máquinas com o Windows XP ou 2000, outra para os clientes com o 98/ME, outro para os com o XP de 64 bits e assim por diante. Se o servidor tiver mais de uma impressora instalada, você pode aproveitar para carregar os drivers das outras impressoras:
Nesse ponto, você verá que foram criadas subpastas dentro das pastas “/var/smb/printers/W32X86” e “/var/smb/printers/WIN40” do servidor, referentes aos drivers carregados.
Por enquanto, os drivers foram apenas copiados para o servidor. É preciso ainda associar a impressora com o driver correspondente, para que o servidor passe a fornecê-lo para os clientes. Ainda logado com o usuário administrativo, clique com o botão direito sobre a impressora e acesse as propriedades:
Você receberá a mesma mensagem exibida ao instalar a impressora nos clientes, dizendo que o servidor não possui o driver de impressão (é justamente isso que estamos corrigindo, afinal :).
Nesse ponto, a resposta natural seria clicar no “OK”, mas, se você fizer isso, vai abrir a tela de seleção do driver e acabar fazendo uma instalação local dos drivers da impressora que não é o que queremos. Por estranho que possa parecer, a resposta correta aqui é o botão “Cancelar“, o que o levará às propriedades da impressora:
Dentro do menu de propriedades, acesse aba “Avançado” e especifique o driver que será usado na opção “Driver”, que originalmente estará em branco. Com isso, o driver é associado com a impressora, fazendo com que o servidor passe a fornecê-lo para os clientes que se conectarem a ela, concluindo a configuração. Se o servidor tiver outras impressoras compartilhadas, faça o mesmo para as demais.
Estes passos parecem estranhos e pouco intuitivos, mas são os mesmos passos que você usaria para instalar os drivers em um servidor de impressão Windows. O Samba simplesmente implementa as mesmas funções.
Uma observação é que ativar o upload de drivers faz com que as impressoras compartilhadas, disponíveis na pasta “Impressoras e aparelhos de fax” sejam renomeadas para o nome “oficial” fornecido pelo driver. É por isso que a minha “E230” foi renomeada para “Lexmark Optra E+ (MS)”. Se você não quiser que isso aconteça, adicione a opção “force printername = yes” na seção referente à impressora (ou na seção [printers]) do smb.conf, como em:
print ok = yes
guest ok = yes
path = /var/spool/samba
force printername = yes
Depois que a alteração é aplicada, a impressora volta a ser compartilhada com o nome definido por você.
Vamos então a mais um exemplo de configuração, desta vez bem mais incrementado, incluindo o compartilhamento de impressoras, o compartilhamento para os drivers Windows, lixeira e outros recursos que vimos até aqui:
netbios name = Cartago
server string = Servidor
workgroup = Grupo
local master = yes
os level = 100
preferred master = yes
wins support = yes
map to guest = bad user
guest account = guest
vfs objects = recycle
recycle:keeptree = yes
recycle:versions = yes
recycle:repository = /mnt/sda2/trash/%U
recycle:exclude = *.tmp, *.log, *.obj, ~*.*, *.bak, *.iso
recycle:exclude_dir = tmp, cache
printing = cups
load printers = yes
enable privileges = yes
[lixeira]
path = /mnt/sda2/trash/%U
writable = yes
[printers]
path = /var/spool/samba
print ok = yes
guest ok = yes
browseable = yes
[print$]
path = /var/smb/printers
read only = yes
write list = gdh
inherit permissions = yes
[arquivos]
path = /mnt/hda2
writable = no
write list = +arquivos
[engenharia]
path = /mnt/sda1/engenharia
writable = yes
valid users = +engenheiros
browseable = no
[gerencia]
path = /mnt/sda1/gerencia
writable = yes
valid users = joao, maria
hosts allow = 192.168.1.2, 192.168.1.32
browseable = no
[publico]
path = /mnt/sda2/publico
writable = yes
guest ok = yes
[backup]
path = /mnt/sda2/backup/%U
writable = yes
valid users = %U
writable = yes
guest ok = no
Este exemplo de configuração exige alguns passos adicionais para ser usado, incluindo a configuração das impressoras e a instalação dos drivers de impressão a partir dos clientes Windows, como vimos até aqui; ele não poderia ser usado diretamente em um servidor que você acabou de instalar.
Ele inclui também o uso da lixeira para todos os compartilhamentos e o uso de 5 compartilhamentos de arquivos. Um deles é o compartilhamento “arquivos”, que já utilizei em exemplos anteriores, onde os arquivos ficam disponíveis para todos os usuários, mas apenas os usuários cadastrados no grupo “arquivos” podem fazer alterações.
Continuando, temos os compartilhamentos “engenharia” e “gerencia”, que são um pouco mais seguros, acessíveis apenas para alguns usuários. Eles são também protegidos pela opção “browseable = no”, que, como vimos, faz com que eles não sejam listados no ambiente de redes. Os três são complementados pelo compartilhamento “publico”, que fica acessível para todos os usuários através do uso da conta “guest”.
Este exemplo não inclui o [homes], que substituí por um compartilhamento para armazenamento de backups. Ele utiliza a variável “%U” (nome do usuário) para criar pastas particulares, onde cada usuário pode armazenar seus backups. Para usá-lo, seria necessário criar diversas subpastas dentro da pasta “/mnt/sda2/backup”, uma com o nome de cada usuário, e ajustar as permissões para que o usuário tenha acesso apenas à sua própria pasta, como em:
# chown joao:joao /mnt/sda2/backup/joao
Todos os usuários verão o compartilhamento “backup” ao acessarem o servidor, mas devido ao uso da variável, cada um verá apenas sua própria pasta ao acessá-lo.
Deixe seu comentário