Processar trabalhos de impressão em computadores clientes (Client-Side Rendering)

Índice

  1. Introdução
  2. Como a Client-Side Rendering funciona
  3. Vantagens da Client-Side Rendering
  4. Desvantagens da Client-Side Rendering
  5. Problemas conhecidos da Client-Side Rendering
  6. Como habilitar a Client-Side Rendering
  7. Diretiva de grupo: Sempre renderizar trabalhos de impressão no servidor

1. Introdução

Em versões anteriores do Windows, assumia-se que o servidor de impressão possuía maior poder de processamento que os clientes. Por este motivo, trabalhos de impressão eram processados no servidor de impressão [10]. Agora que nós temos processadores de múltiplos núcleos, os clientes tornaram-se tão poderosos quanto a maioria dos servidores de impressão [1] e servidores de impressão frequentemente realizam múltiplas funções, como hospedar servidores FTP, servidores Web, e outras funções [2]. [10]

Por padrão, quando um aplicativo executando no Windows Vista/Server 2008 ou posterior envia um trabalho para a impressora hospedada no servidor de impressão, o trabalho é renderizado no computador do cliente antes de enviá-lo ao servidor de impressão [1][6][9], reduzindo a sobrecarga de servidores de impressão e prevenindo que o tráfego de impressão desnecessário atravesse a WAN [5]. Esta solução ás vezes é chamada de Direct IP printing ou Serverless Printing [5].

2. Como a Client-Side Rendering funciona

A funcionalidade Client-Side Rendering (CSR) é implementada na win32spl.dll, que é o provedor de impressão de rede. A funcionalidade de impressão off-line é implementada na printcom.dll, que provê notificações on-line/off-line para a win32spl.dll. Os componentes da Client-Side Rendering, printcom.dll e win32spl.dll, são carregados no serviço Spooler de impressão, spoolsv.exe, quando ele é iniciado. [10]

Há algumas valores de registro a serem considerados em relação ao CSR. Quando uma conexão a uma impressora compartilhada é criada em um “cliente” Windows Vista ou Windows Server 2008, a conexão é criada na mesma localização de registro, usando a mesma convenção de nome usada no Windows Server 2003: HKEY_CURRENT_USER\Printers\Connections\<connection>. A sub chave <connection> no registro é o nome do servidor de impressão e impressora, no seguinte formato: ,,<servername>,<printersharename>. Há alguns valores adicionais na sub chave <connection> que merecem ser citados:

  • DefaultDevMode: Contém informações sobre a inicialização do dispositivo e ambiente da impressora.
  • GuidPrinter: Esse é um Globally Unique Identifier (GUID) atribuído a uma conexão de impressora remota no cliente. Cada conexão a uma impressora de rede compartilhada cria um GuidPrinter que é usado para identificar a impressora como uma impressora remota. Trabalhos de impressão enviados para uma GuidPrinter são renderizados como sendo impressos em uma impressora local mas eles são enviados para um servidor de impressão usando o monitor Client Side Port (veja abaixo) ao invés de escritos em uma porta local.
  • LocalConnection: Esse valor é definido como 1 se for uma impressora criada localmente, ao contrário de uma impressora “puxada”.
  • Provider: O Provedor de Impressão para esta conexão de impressora. Normalmente será win32spl.dll
  • RemotePrinterCache: Este é o binário que contém a configuração do driver de impressão no servidor de impressão da última vez que o cliente imprimiu nesta conexão de impressora
  • Server: Nome do servidor hospedando a impressora compartilhada

Quando um cliente com Windows Vista ou Windows Server 2008 conecta-se a uma impressora compartilhada, uma nova sub chave com o nome do servidor de impressão será criada na seguinte chave de registro: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\Servers. [4][10]

Para cada servidor de impressão que um cliente se conectar, um novo diretório será criado em %systemroot%\System32\spool\SERVERS com o nome do servidor de impressão. Este novo diretório é usado pelo cliente para realizar spool (fila) de trabalhos de impressão destinados para aquele servidor de impressão. [4][10]

O caminho para o diretório de spool é especificado no valor DefaultSpoolDirectory na seguinte chave de registro para cada servidor de impressão que o cliente conectou-se: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\Servers\<nomedoservidordeimpressão>\Providers. A Client Side Rendering define um “monitor de porta” virtual único para cada conexão de impressora compartilhada no computador cliente. [4][10]

3. Vantagens da Client-Side Rendering

  • Libera recursos disponíveis e valiosos de servidores de impressão. [2]
  • Devido ao mesmo computador que realizou o spool do trabalho de impressão também renderizar os dados de impressão, não há diferenças ou inconsistências entre os drivers de impressão do cliente e servidor. [2][5][10]
  • A impressão offline será possível devido ao spool e renderização dos dados de impressão serem realizados localmente. [6] Então, quando a conexão ao spooler de impressão for restabelecida, trabalhos de impressão poderão ser transmitidos automaticamente para o servidor de impressão para impressão. [5][10]

4. Desvantagens da Client Side Rendering

  • Suporte do sistema operacional cliente. É obrigatório que os processadores de impressão e drivers de impressão estejam disponíveis no servidor de impressão e no cliente de impressão. O Windows usa um mecanismo chamado Point-and-Print, que permite ao cliente de impressão baixar o processador de impressão e driver da impressora diretamente do servidor de impressão. [6][7]
  • Com esta arquitetura, todos as estações clientes serão transformadas em servidores de impressão. [5]

5. Problemas conhecidos da Client Side Rendering

A maioria dos drivers de impressão não experimentarão problemas com este recurso habilitado. Porém, se o driver da impressora encontrar um problema, você poderá desabilitar este recurso e o driver da impressora renderizará o trabalho de impressão no servidor de impressão como as versões anteriores do Windows. [6]

A lista a seguir descreve alguns dos problemas relacionados a Client-Side Rendering:

  • Client-side rendering será desabilitada automaticamente se o driver da impressora usa um processador de impressão customizado mas o processador de impressão não está instalado no computador cliente.

    Na maioria dos casos, o processador de impressão de um driver da impressora que não for configurado como um pacote de driver não será instalado no computador cliente durante o Point and Print. Se o spooler de impressão detectar um problema, ele desabilitará a Client-side rendering para aquela fila de impressão [6], independente das políticas ou configurações [10]. Para evitar este problema, drivers de impressora que usem um processador de impressão customizado deverão incluir o processador no pacote de driver. [6]

  • Client-side rendering será desabilitada automaticamente se o processador de impressão retornar um erro.

    Após desabilitar a Client-side rendering para a fila de impressão, o spooler de impressão reenvia o trabalho de impressão usando Server-side rendering. Note que após desabilitar a Client-side rendering for desabilitada para a fila de impressão, a fila de impressão não terá nenhum benefício da Client-side rendering, como impressão off-line. [6]

  • As informações de configuração da impressora poderão estar incompletas para drivers de impressora que usam informações de configuração não-padrões.

    Point and Print poderá não transmitir a configuração completa da impressora de drivers de impressão que usam métodos proprietários para armazenar e distribuir esta informação.

  • Client-side rendering com drivers diferentes.

    Uma diferença de driver acontece quando o computador cliente possuí uma versão do driver da impressora diferente da versão do servidor. Normalmente, quando ocorre diferenças de driver, Point and Print atualiza o driver da impressora no computador cliente para corresponder ao driver da impressora no servidor. Em algumas situações, você poderá querer que a fila de impressão do computador cliente use uma versão de driver diferente que não corresponda a versão do driver da impressora do servidor de impressão. Por exemplo, você poderá não querer que o Point and Print atualize o driver do computador do cliente [6]:

    • Se há um problema de compatibilidade com o driver da impressora do servidor de impressão quando executado no computador cliente.
    • Para reduzir o tráfego de rede quando o Point and Print baixa o novo driver da impressora.
    • Ao realizar debugging ou testes.

    Você pode impedir que o Point and Print de baixar o driver da impressora e forçar o computador cliente a usar o melhor driver que já está instalado no computador cliente. Para isso, defina o valor da chave de registro HKLM\SYSTEM\CurrentControlSet\Control\Print\PrinterName\PrinterDriverData\DriverPolicy para o nome do driver da impressora. Substitua PrinterName com o nome da fila de impressão que usará um driver da impressora disponível localmente ao invés do driver da impressora disponível no servidor de impressão. O nome do driver que você digitar nesta chave de registro deverá ser o nome de um driver compatível de impressora que está instalado ou disponível para instalação no computador cliente. [6]

Não há indicações claras (eventos, erros, etc) que indiquem se a Client-Side Rendering está ou não habilitada. Uma forma de verificar se a CSR está sendo usada é verificar o Datatype para o trabalho de impressão. Você pode fazer isso imprimindo uma página teste ou visualizando as propriedades de um documento na fila de impressão (na aba Geral). Para a Client-Side Rendering, o Datatype será RAW. Para Server-Side Rendering, o Datatype será NT EMF x.xxx. [10]

6. Como habilitar a Client-Side Rendering

Como mencionado anteriormente, a CSR é habilitada por padrão no Windows Vista e Windows Server 2008 e é controlada pelo servidor de impressão que hospeda a impressora compartilhada. O CSR poderá ser desabilitado via GPO ou na aba Compartilhamento para impressoras específicas no servidor conforme mostrado abaixo – desmarcar a caixa “Processar trabalhos de impressão em computadores clientes” desabilitará a Client-Side Rendering para essa impressora. [10]

NOTA: Se você desabilitar o recurso Client-Side Rendering, a renderização do trabalho de impressão será realizada no servidor (comportamento do Windows Server 2003 [10]), o que poderá afetar a performance do servidor de impressão. [6]

  1.  Windows 8.1/10: Pressione a combinação de teclas “Windows”  + “R” para exibir a janela Executar. Digite control na caixa de diálogo e clique em OK Windows 7/Vista: Abra o Menu iniciar  > Painel de controle.
     Windows XP: Abra o Menu iniciar  > Configurações > Painel de controle.
  2.   Windows Vista e posteriores: Clique em Exibir impressoras e dispositivos (exibição por Categoria) ou Dispositivos e Impressoras (exibição por Ícones grandes).
     Windows XP: Clique em Impressoras e aparelhos de fax.
  3. Dê botão direito na fila de impressão.
  4. Abra Propriedades da impressora e então Compartilhamento.
  5. Marque a caixa Processar trabalhos de impressão em computadores cliente.
  6. Clique em OK ou Aplicar.

7. Diretiva de grupo: Sempre renderizar trabalhos de impressão no servidor

A seguinte política controla o comportamento de renderização em computadores com Windows Vista ou posterior [1]:

Configuração do Computador\Modelos Administrativos\Impressoras\Sempre renderizar trabalhos de impressão no servidor

Ao imprimir em impressoras hospedadas em servidores de impressão, esta política determina se o spooler de impressão do cliente processará os trabalhos de impressão por si só ou irá encaminhá-los ao servidor para que ele processe o trabalho. [1] A configuração de política Sempre renderizar trabalhos de impressão no servidor sobrepõe a configuração por driver da caixa Processar trabalhos de impressão em computadores cliente para a CSR. [10]

Se você habilitar esta política em um computador cliente, o spooler de impressão do cliente não processará os trabalhos de impressão antes de enviá-los ao servidor de impressão. Isso diminui a sobrecarga no cliente e aumenta a carga no servidor. [1]

Se você desabilitar esta política em um computador cliente, o cliente enfileirará o trabalho de impressão como EMF para prover uma resposta rápida para a aplicação. O driver de impressora do cliente converterá os dados EMF para a Page Description Language (PDL), como PCL ou Postscript, para a impressora. O trabalho de impressão convertido em comandos específicos da impressora (RAW PDL) será enviado ao servidor de impressão para enfileiramento e impressão pelo spooler de impressão. O spooler remoto pode enviar os dados RAW diretamente para a impressora, ou armazená-lo em arquivos de spool. [10] Isso aumenta a sobrecarga no cliente enquanto diminui a carga no servidor. [1]

Ao habilitá-la, a política alterará o valor ForceCSREMFDespooling no registro para 1 na chave de registro HKLM\Software\Policies\Microsoft\Windows NT\Printers. Há um cenário que poderá ser desejado habilitar esta política para passar a sobrecarga da renderização ao servidor de impressão – em um Terminal Server. [10]

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers]
"ForceCSREMFDespooling"=dword:00000001

Você também poderá realizar essa alteração executando o seguinte comando como Administrador no Prompt de comando [11]:

reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Printers" /v ForceCSREMFDespooling /t reg_dword /d 00000000

Então reinicie o computador cliente (reiniciar o serviço Spooler de impressão deverá ser o suficiente). [9]

Referências

  1. Managing Printing : Managing Client-Side Printer Experience Using Group Policy. Programming4Us.
  2. What is Client-Side Rendering?. Lexmark.
  3. On the printer sharing properties, what does Render Print Jobs on Client Computers do?. Jason Yoder, Microsoft Certified Trainer.
  4. Changing default setting of “Render print jobs on client computers”. Microsoft TechNet Forums.
  5. Client Side Rendering – Is it a viable Enterprise Print Solution?. UniPrint.net Printing Solutions.
  6. Client-Side Rendering. Microsoft Hardware Dev Center.
  7. Supporting Client-Side Rendering and Server-Side Rendering. MSDN.
  8. [Samba] Configuring Point’n’Print automatic printer driver deployment not working in samba 4.4.5. lists.samba.org Mailing Lists.
  9. Fix error 0x000006d1 using level 3 print drivers from Samba to Windows 8. darkphader’s ramblings.
  10. WS2008: Client-side Rendering. Ask the Performance Team Blog.
  11. Printing from Windows 8.1 / Windows Server 2012R2 / Windows 10. Paul G. Allen School of Computer Science & Engineering.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.