20 de jul. de 2010

Problemas de impressão em sessões Terminal Services (WTS)

Os administradores de rede, geralmente, saem ilesos com tarefas como a instalação e compartilhamento de dispositivos de impressão homologados pela Microsoft, seja ligando o dispositivo diretamente ao computador (USB, cabo paralelo), seja através da rede (Servidor de impressão, dispositivos como o JetDirect®, impressoras fabricadas com interface de rede nativa, etc). Quase sempre, ao final dessas tarefas, a impressora está disponível aos usuários e tudo acaba bem.Neste post, abordaremos um cenário de impressão através de uma sessão de Terminal Services 2008 (poucas mudancas) que, se mal planejado, é comumente um gerador de diversos problemas de impressão, dada a complexidade e o envolvimento de diferentes componentes e softwares.

O cenário

Em nosso cenário, temos um servidor Terminal Services baseado em Microsoft Windows Server 2008 Enterprise Service Pack 2. O cliente é um Microsoft Windows XP Professional Service Pack 3. Ambos são 32 bits. A fila de impressão foi instalada com um driver “inbox”.

O problema

  1. Você conecta-se ao Windows 2008, a partir de seu Windows XP, utilizando o Remote Desktop Client. Nesse ponto, se você não leu a documentação em “O que você deve saber, antes de começar”, vale comentar alguns fatos: Para que a tecnologia Easy Print funcione corretamente, precisamos que o cliente de Terminal Services atenda a estes requisitos: - Remote Desktop Protocol - versão 6.1 - .Net Framework 3.0 Service Pack 1 (ou superior) O Microsoft Windows XP com Service Pack 3, já inclui o suporte ao RDP 6.1, no entanto, a instalação do .Net Framework deve ser feita manualmente. Você pode usar este link: http://go.microsoft.com/fwlink/?LinkId=109422
  2. A impressora, que está instalada em seu Windows XP, é mapeada na sessão de Terminal Services através do serviço redirecionamento do Terminal Services.
  3. Ao tentar imprimir um documento, que está aberto na sessão de Terminal Services, você verifica duas situações comuns: a. A fila de impressão na sessão de TS exibe o trabalho de impressão, e aparentemente ele é processado com sucesso, no entanto, nenhum documento é impresso, ou a impressora apenas imprime folhas em branco ou ainda, com caracteres inválidos. b. A fila de impressão (no servidor ou cliente) exibe o trabalho de impressão com o status de erro. Através do Event Viewer, você consegue ver um evento com ID 6161, em seus eventos de sistema.

Nota: Se você não consegue sequer ver a fila de impressão redirecionada através da sessão de Terminal Services, é extremamente provável que voce esteja enfrentando problemas de rede/conexão. Neste ponto, o “troubleshooting” deve ser feito para entender se a conexão entre estação + impressora, está normal para o servidor TS utilizado. O documento Terminal Services Printer Redirection pode mostrar erros comuns vistos em seu Event Viewer, e a explicação para eles. O evento mais comum é o event ID: 1111, que diz respeito a falta de drivers para a fila que está sendo redirecionada pela sessão de TS. Neste caso, instale os drivers da impressora, tanto na estação quanto no servidor TS e reinicie sua sessão. Sem isso, o Terminal Services não consegue fazer o “match” entre o driver de sua fila de impressão na estação, e o que está disponível no servidor, não concluindo o redirecionamento com sucesso.

Além disso, comumente ouvimos os administradores se referirem a impressão em Terminal Services como o diagrama abaixo descreve:

Apesar de parecer correto, esse tipo de entendimento pode levar a erros de raciocínio durante a tentativa de solucionar um problema. Este cenário só seria verdadeiro, se a impressora estivesse instalada localmente no servidor de Terminal Services.

O melhor diagrama para representar a impressão em Terminal Services é este:

Ao percebermos que o spool de impressão é devolvido ao computador que possui a impressora instalada, nosso modo de lidar com os problemas de impressão se torna mais coerente.

Possíveis soluções

O teste nº 1 deve ser – por mais óbvio que isso pareça – a impressão local. Se o computador consegue imprimir localmente (para a fila que está configurada nele), então podemos prosseguir com o testes no ambiente de TS.

  • Caso você tenha encontrado problemas aqui, procure suporte com o fornecedor de seu equipamento, e verifique o básico: cabos, versão de driver, mensagens no console do equipamento e suprimentos para impressão.
  • O event viewer do computador cliente também pode ajudar muito.

Ao acessar a sessão de Terminal Services, verifique se a impressora foi mapeada corretamente, e caso positivo, tente imprimir uma página de testes, através das propriedades da impressora.

  • Se a fila não foi mapeada, verifique o documento Terminal Services Printer Redirection. Neste post, não veremos problemas de redirecionamento de dispositivo.
  • É importante que seus testes sejam conduzidos em software Microsoft. Ao tentar imprimir, utilize a função “página de teste”, ou crie um documento no Notepad, ou qualquer outro aplicativo Microsoft. Isso porque, se a única aplicação a não imprimir for a sua aplicação (própria ou de terceiros), a Microsoft não tem como lhe fornecer suporte, e você terá que revisar a aplicação para entender o que está acontecendo, já que os produtos nativos do sistema operacional, imprimem.

1ª Abordagem: Verifique as permissões da pasta “Printers”

A Pasta “Printers” (em %systemroot%\system32\Spool) pode perder as permissões, ou por manipulação do administrador, ou por ação de programas (Ex: vírus, programas de “hardering”).

Neste caso, é comum (porém, não obrigatório) encontrarmos um evento com a descrição abaixo:

Event ID

6161

Source

Print

Type

Error

Description

The document “xyz” owned by user-ts failed to print on queue_printer. Data type: NT EMF 1.008. Size of the spool file in bytes: 0. Number of bytes printed: 0. Total number of pages in the document: 0. Number of pages printed: 0. Client machine: W2K8-TS. Win32 error code returned by the print processor: 5 (Access Denied).

Solução: Nesses casos, a solução é – normalmente – acrescentar/corrigir as permissões para as contas “system”, “administrators” e “domain users” (caso tenhamos um Active Directory para o ambiente), conforme abaixo:

  • System: full control
  • Administrators: full control
  • Domain users: Read/Write

Motivo: A geração dos arquivos *.SPL e *.SPH dependem dessas permissões para serem escritos nesta pasta. Esses dois arquivos são responsáveis pelo Spool de impressão para cada trabalho de impressão.

2ª Abordagem: Com ou sem Easy Print?

Easy Print é a nova tecnologia, desenvolvida pela Microsoft, para facilitar os cenários de impressão através de sessões de Terminal Services. Para saber mais sobre isto, consulte: Terminal Services Printing. Apesar disso, como toda nova tecnologia, nem todos os dispositivos de sua rede estão prontos para funcionar com ela. Para começar, se você utiliza Windows XP, o pré-requisito para que o Easy Print funcione, é que você esteja com o Remote Desktop Protocol deve estar na versão 6.1 e o .NET Framework deve estar na versão 3.0 Service Pack 1. Versões superiores são igualmente aceitas. O Service Pack 3 do Windows XP, e o Service Pack 1 do Windows Vista já incluem o RDP 6.1, já a instalação do .NET Framework 3.5 Service Pack 1 pode ser obtida aqui. Você também pode obter a mais nova versão do RDP (versão 7) aqui, para os seus sistemas operacionais Microsoft.

Mesmo com todos esses requisitos atendidos, existem diversos outros fatores que podem impedir que seu dispositivo de impressão funcione bem com o Easy Print:

  • Driver disponibilizado pelo fabricante (Tente atualizar, mas nem sempre isto basta).
  • O modelo de impressora não consegue imprimir arquivos XPS, localmente. (O spool, gerado pelo Easy Print, trafega os dados em formato XPS, e esse é um bom teste).
  • Seu ambiente não possui os Service Packs mais recentes para seu Windows (incluindo as versões 2008, Vista e XP).

Solução: Este caso é sempre complexo – e às vezes, polêmico – pois a solução nem sempre inclui imprimir e manter o Easy Print ativo – como cenários com impressoras matriciais, algumas com drivers com tecnologia proprietária, ou aplicações que geram arquivos de spool com formato muito específico. Para todos os efeitos, o time de suporte Microsoft é capaz de trazer a melhor solução possível, com a análise de seu cenário específico, e a garantia de que todos os requisitos necessários estão sendo atendidos. Acesse o Suporte Microsoft para maiores informações.

Outra solução – ainda que você não queira utilizá-la definitivamente – é testar como seu servidor Microsoft Windows Server 2008 se comporta com e sem o Easy Print ativo.

Para isto, acesse o servidor e:

  1. Execute a ferramenta “gpedit.msc”. Com o console do Group Policy Editor aberto, navegue por: Computer configuration >> Administrative templates >> Windows Components >> Terminal Services >> Terminal Server >> Printer Redirection
  2. Localize a política chamada: “Use Terminal Services Easy Print driver first” e dê um duplo clique.
  3. Na tela que se abre, configure a política como “Disabled”.
  4. Para concluir, em um prompt de comando, execute o comando gpupdate /force.
  5. Isto desativará o Easy Print para as novas conexões de Terminal Services.

Se isto resolver o problema com sua impressora redirecionada, você pode considerar atualizar o driver da impressora, ou trocar o modelo de dispositivo, para fins de teste. Como sempre, você pode contatar o suporte Microsoft e pedir uma segunda opnião.

Motivo: Como dito antes, muitas vezes, os dispositivos podem não estar prontos para a tecnologia Easy Print, seu ambiente pode não conter todas as atualizações/correções disponíveis, e você pode ter requisitos muito específicos para impressão, que dificultam a utilização dessa tecnologia.

3ª Abordagem: Terminal Services, Anti-Vírus, Redirecionamento de recursos e confusão

Todo dispositivo redirecionado por uma sessão de Terminal Services, depende do protocolo de Remote Desktop. O protocolo que dá suporte ao redirecionamento de impressoras escreve informações no registro do Windows, que são utilizadas durante a sessão de Terminal Services, e trabalham no mapeamento desses dispositivos.

Os softwares Anti-Vírus, no estrito cumprimento de seu dever, muitas vezes causam alguns efeitos colaterais indesejados, assim como técnicas e produtos de “hardering”, mal-utilizados ou mal-interpretados. Entre estes efeitos, temos a negação de permissões (visto na 1ª abordagem) e em alguns casos mais severos temos problemas com a escrita em registro, vital para o funcionamento do Windows e seus serviços.

As portas utilizadas no redirecionamento de impressoras, em sessões de Terminal Services, ficam na chave de registro:

“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{28d78fad-5a12-11d1-ae5b-0000f803a8c2}\##?#Root#RDPDR#0000#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}”

Teoricamente, durante sessões de Terminal Services que utilizam redirecionamento de dispositivos, você verá entradas com o formato “TSXXX” (onde XXX representa um número seqüencial para as portas em uso) abaixo dessa chave. Ainda, na teoria, é comum que estas entradas se renovem automaticamente, conforme a necessidade de redirecionamento de recursos.

O problema começa quando, por razões desconhecidas, a escrita para esta chave é negada ao sistema de impressão do Windows, e as entradas “TSXXX” começam a se acumular, sem renovação.

Solução: Se você estiver enfrentando esse cenário, a solução ocorre com os passos a seguir:

  1. Finalize todas as sessões de Terminal Services. Você pode, no entanto, utilizar uma sessão de Terminal Services para executar os passos abaixo.
  2. Acesse o console do Windows com um usuário administrativo, e, na janela “run” (executar), digite o comando regedit.exe.
  3. Abra um novo “run” e execute o comando services.msc. Pare o serviço de impressão chamado “Print Spooler” (Spooler de impressão).
  4. De volta ao editor de Registro do Windows, navegue até a chave: “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{28d78fad-5a12-11d1-ae5b-0000f803a8c2}\##?#Root#RDPDR#0000#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}”
  5. Faça um back-up desta chave e apague todas as entradas iniciadas em “TS”.
  6. Adicionalmente, faça uma busca por arquivos com a extensão *.BUD (exemplo: TTY.bud) na partição do sistema operacional. Acrescente a extensão “.OLD” a eles.
  7. Volte aos “Serviços” (services.msc) do Windows, e reinicie o serviço de impressão (Print Spooler).

Nesse ponto, a impressão deve voltar a funcionar para as novas sessões de Terminal Services, caso o problema esteja ligado a portas de redirecionamento bloqueadas em registro.

Motivo: Como vimos, alguns softwares e ações dos administradores podem bloquear porções do registro do Windows e arquivos de sistema, o que gera diversos problemas para o sistema operacional. Outras situações que podem levar a esse problema são desligamentos inesperados, vírus, atualizações e instalações de software malsucedidas, entre outras ocorrências, impossíveis de serem listas por completo, aqui.

Conclusão

Quando tratamos de ambiente de impressão sob Terminal Services, o cenário é, por vezes, mais importante que o erro explicito, gerado durante o processo de impressão.

Aqui, abordamos uma pequena porção do sistema de impressão em Terminal Services, e excluímos cenários onde a fila não é redirecionada, ou outros problemas acontecem.

O assunto é extenso e um pouco complicado também, mas com estudo, você vai conseguir resolver grande parte dos problemas corriqueiros, ligados a impressão em um ambiente de Terminal Services.

Umas das grandes experiencias ja convividas em diversos clientes seria o grande conflito de drivers prejudicando o correto funcionamento das impressoes.

Espero Ter Ajudado.

Obrigado.

3 comentários:

  1. tenho um problema parecido com esse. mas é o seguinte eu consigo emitir relatório comum, quando o relatorio tem um logotipo uma figura não consigo emitir. e o pior uns trinta dias atras funcionava normalmente emitindo todos os tipos de raltório. mas nesse meio ai teve uma atualização da aplicação. o que pode ser?

    ResponderExcluir
  2. Ola amigo, estou entendo que as atualizacoes foram do windows 2003 e realmente a microsoft fez diversas atualizacoes no RDP do windows 2003, uma das dicas que posso te passar seria a seguinte.
    1 - Faça um clone do servidor.
    2 - Instale o NetFramework 4 nas estacoes de trabalho e no servidor ele emula drivers das impressoras.
    3 - Verifique o uso de hardware as vezes por falta de memoria o spooler de impressao trava e com isso algumas imagens nao sao impressas.
    4 - Nas configuracoes do RDP reformule-as (marca e desmarca) e salva as configuracoes (por incrivel que parece as vezes resolve).
    5 - Se nada funcionar tente reainstalar as configuracoes terminal.
    Q.Q.novidade poste mais.

    ResponderExcluir
  3. ola, antonio estou com um problema com a impressora Laserjet HP 1132, esta dando a seguinte mensagem quando imprimo uma pagina de teste da impressora direcionada no servidor via TS.. conflito de driver .. usando ou não o direcionamento easyprint, outras impressoras funcionam normalmente...voce tem como me ajudar ? grato

    ResponderExcluir