Como posso remapear nomes de usuários ao imprimir em uma impressora compartilhada?

3

No trabalho, meu grupo usa atualmente impressoras de rede com manutenção própria. Também administramos nossa própria rede Linux para alguns membros do grupo. Tudo funciona lindamente. A gerência decidiu que será mais eficiente e sustentável que todos usem impressoras de manutenção centralizada. Isso nos traz vários recursos úteis, como enviar um trabalho de impressão e, em seguida, selecioná-lo em qualquer impressora desejada. O problema é que a impressão será vinculada ao sistema de autenticação central, que não usamos.

Acontece que na verdade não precisamos usar a autenticação como tal, só precisamos ter certeza de que o nome de usuário que um trabalho de impressão é submetido tem o nome de usuário correto - caso contrário, você não pode pegá-lo. . Poderíamos alterar todos os nomes de usuário e diretórios pessoais de todos os nossos usuários para corresponder aos gerenciados centralmente, mas, compreensivelmente, preferimos não fazer isso. Se pudermos remapear nossos nomes de usuários para os gerenciados centralmente para impressão, tudo deverá funcionar.

Atualmente, estamos usando xícaras para nossas necessidades de impressão e, até onde eu sei, não é compatível com qualquer forma de remapeamento de nome de usuário. Isso está correto? Eu sei que o Samba suporta remapeamento de nome de usuário, mas não tenho certeza se funcionaria nessa configuração. Nós precisamos:

  • impressão de nome de usuário local (para nosso servidor, se necessário) - > nome de usuário remapeamento para o nome de usuário central - > trabalho de impressão enviado para o serviço de impressão.

Alguém pode sugerir como podemos conseguir isso?

    
por Roger Light 06.12.2012 / 16:51

1 resposta

3

Agora resolvi esse problema. Eu adicionei a impressora real como normal, então criei um novo script de backend de cups chamado / usr / lib / cups / backend / remap:

#!/bin/bash

if [ "$#" == "0" ]; then
    echo "network remap \"Unknown\" \"Username remap backend\""
    exit 0
fi

DEVICE_URI=$(echo ${DEVICE_URI} | sed -e "s/^remap/ipp/")
FINAL_CONTENT_TYPE="application/vnd.cups-postscript"
PPD="<path to real printer ppd>"
PRINTER="<real printer name>"
JOBNUM=$1
USER=$(ypmatch $2 usermap)
if [ "$?" == "1" ]; then
    exit 1
fi
JOBTITLE=$3
COPIES=$4
shift
shift
shift
shift
cat | /usr/lib/cups/backend/ipp ${JOBNUM} ${USER} "${JOBTITLE}" ${COPIES} "$@"
exit $?

Eu adicionei uma nova impressora falsa usando esse backend. O script presume que sua impressora falsa e a impressora real têm o mesmo local, mas um protocolo diferente, por exemplo:

  • remap: // servidor: 631 / printer / printer_name
  • ipp: // servidor: 631 / printer / printer_name

Substitui o "remapear" por "http" na variável de ambiente DEVICE_URI, atualiza algumas outras variáveis de ambiente, procura o usuário mapeado (nesse caso, baseado em um mapa NIS personalizado) e executa o trabalho na impressora real usando o backend ipp mas com o nome de usuário atualizado.

Os backends do Cup esperam argumentos como segue:

  • $ 1: ID do trabalho CUPS
  • $ 2: nome de usuário
  • $ 3: cargo do trabalho
  • $ 4: número de cópias solicitadas
  • $ 5: opções de trabalho de impressão
  • $ 6: arquivo de trabalho de impressão (com caminho)

Se $ 6 estiver vazio, ele espera entrada de stdin.

    
por Roger Light 07.12.2012 / 16:34