Su controlador está instalado. Ahora
está listo para la instalación Point'n'Print
de los clientes. Puede que haya intentado descargar y
usarlo en su primer máquina cliente, pero espere.
Primero vamos a asegurarnos de que conoce algunos trucos
que pueden ser útiles. Por ejemplo, supongamos que
no ha definido los valores predefinidos para la impresora,
como se indicaba con atenrioridad. Entonces sus usuarios se
quejarán de varias cosas (como por ejemplo que
necesitan poner el tamaño del papel cada vez que
imprimen).
La última frase puede ser vista con ideas
contrapuestas entre algunos usuarios y los
administradores. Se han esforzado durante horas y no han
podido llegar al punto donde sus valores parezca que se
han guardado. La confusión es que en los
diálogos con múltiples pestañas que
aparecen al pulsar con el botón derecho las
propiedades puede llegar a dos diálogos que
parecen idénticos, cada uno de ellos diciendo que
le va a ayudar a establecer sus preferencias de tres
formas diferentes. Aquí está la respuesta
definitiva a las FAQ del establecimiento de controladores
predefinidos:
No puedo guardar las opciones
de impresión para todos los usuarios de Windows
200x/XP. ¿Por qué?
¿Cómo los está haciendo? Creo que de
la forma equivocada. Hay tres formas diferentes de
obtener un diálogo que parezca establecerlo todo.
Los tres diálogos parecen iguales pero sólo
uno de ellos hace lo que necesita. Tiene que ser
Administrador o Print Administrator para hacer esto para
todos los usuarios. Aquí indicamos como lo
reproduzco en un XP Professonal: La siguiente lista
necesita puntos tras las letras y números:::::::::
-
El primero equivocado:
-
Abrir carpeta impresoras.
-
Botón derecho en la impresora
(remoteprinter enn
cupshost) y en el menú contextual
seleccionar configuración de la impresora.
-
Mire el diálogo con atención y
recuerde a qué se parece.
-
El segundo método equivocado:
-
Abrir la carpeta de impresoras
-
Botón derecho en la impresora
(remoteprinter enn
cupshost) y en el menú contextual
seleccionar propiedades
-
Puse en la pestaña General
-
Pulse en preferencias de impresión
-
Se abre un nuevo diálogo. Mantenga
este diálogo abierto y vuelva al dialogo
padre.
-
La tercera forma, la correcta: (debería
hacerlo desde el principio, siga los pasos 1 y 2 del
método anterior)
-
Pulse en la pestana de avanzadas. Si
está inhabilitada entonces ha iniciado la
sesión con un usuario sin privilegios.
-
Pulse en las opciones de impresión.
-
En cualquiera de las dos nuevas
pestañas pulse en el botón
avanzadas.
-
Se abre un nuevo diálogo. Compare
este con el otro. Son idénticos a los dos
anteriores.
¿Ve alguna diferencia entre los dialogos? Yo
no. Sin embargo sólo el último, de los seis
pasos, va a guardar de forma permanente los valores qeu se
va a convertir en preestablecidos. para los nuevos
usuarios. Si quiere que todos los clientes tengan los
mismos valores tiene que seguir estos pasos como
administrador (printer admin) antes de que un cliente
descargue el controlador (los clientes con postrioridad
pueden establecer sus propios valores de usuarios por los
procedimientos A o B). Windows 200x/XP permite valores
preestablecidos para cada usuario, pero antes de
modificarlos asigna los preestablecidos. Los
diálogos padre que parecen idénticos tienen
ligeras diferencias en los nombres de la ventana; uno se
llama
Default Print Values for Printer
Foo on Server Bar" (que es el que necesita) y el otro
se llama
Print
Settings for Printer Foo on Server Bar. El
último es al que llega cuando con el botón
derecho selecciona la configuración de la impresora.
Este es el que habría tomado en los días de
Windows NT, por tanto es lógico intentar lo mismo en
Windows 200x/XP. No soñaría con que ahora hay
una nueva ruta diferente para llegar a dos diálogos
idénticos pero con funcionalidades distintas.
Intente (en Windows 200x/XP) ejecutar esta orden
(como usuario con los privilegios correctos):
rundll32 printui.dll,PrintUIEntry /p /t3
/n\\Samba-SERVER\printersharename
Para ver la pestaña con el botón de
las opciones predeterminadas de impresión (el que
necesita), también puede ejecutar:
rundll32 printui.dll,PrintUIEntry /p /t0
/n\\Samba-SERVER\printersharename
Para ver la pestaña con el botón de
prefencias de impresión (el que no establece los
valores globales) puede ejecutar las órdenes desde
una ventana DOS o desde Inicio -> Ejecutar.
Una cosa que ha aparecido durente las reciente fase
de desarrollo de Samba es la necesidad de admitir
controladores para cientos de impresoras. El asistente de
Windows NT es, por decirlo suave, un poco torpe. Si no
quiere tomarle asco al ratón después de
estar mucho rato haciendo click, lo mejor es ir pensando
en un script no interactivo.
Si más de una impresora usa el mismo
controlador, se puede usar la ordem rpcclient setdriver para asociar el
controlador con una cola instalada. Si el controlador
está cargado en [print$] una vez y registrado cen el
TDB de impresión, entonces se puede usar para
múltiples colas. En este caso necesita repetir la
suborden setprinter subcommand de
rpcclient para cada cola (sinla
necesidad de usar adddriver
repetidamente). Lo siguiente es un ejemplo de como se
puede realizar esto:
root# rpcclient Samba-CUPS -U root%secret -c 'enumdrivers'
cmd = enumdrivers
[Windows NT x86]
Printer Driver Info 1:
Driver Name: [infotec IS 2075 PCL 6]
Printer Driver Info 1:
Driver Name: [DANKA InfoStream]
Printer Driver Info 1:
Driver Name: [Heidelberg Digimaster 9110 (PS)]
Printer Driver Info 1:
Driver Name: [dm9110]
Printer Driver Info 1:
Driver Name: [mydrivername]
[....]
|
root# rpcclient Samba-CUPS -U root%secret -c 'enumprinters'
cmd = enumprinters
flags:[0x800000]
name:[\\Samba-CUPS\dm9110]
description:[\\Samba-CUPS\dm9110,,110ppm HiVolume DANKA Stuttgart]
comment:[110 ppm HiVolume DANKA Stuttgart]
[....]
|
root# rpcclient Samba-CUPS -U root%secret -c \
'setdriver dm9110 "Heidelberg Digimaster 9110 (PS)"'
cmd = setdriver dm9110 Heidelberg Digimaster 9110 (PPD)
Successfully set dm9110 to driver Heidelberg Digimaster 9110 (PS).
|
root# rpcclient Samba-CUPS -U root%secret -c 'enumprinters'
cmd = enumprinters
flags:[0x800000]
name:[\\Samba-CUPS\dm9110]
description:[\\Samba-CUPS\dm9110,Heidelberg Digimaster 9110 (PS),\
110ppm HiVolume DANKA Stuttgart]
comment:[110ppm HiVolume DANKA Stuttgart]
[....]
|
root# rpcclient Samba-CUPS -U root%secret -c 'setdriver dm9110 mydrivername'
cmd = setdriver dm9110 mydrivername
Successfully set dm9110 to mydrivername.
|
root# rpcclient Samba-CUPS -U root%secret -c 'enumprinters'
cmd = enumprinters
flags:[0x800000]
name:[\\Samba-CUPS\dm9110]
description:[\\Samba-CUPS\dm9110,mydrivername,\
110ppm HiVolume DANKA Stuttgart]
comment:[110ppm HiVolume DANKA Stuttgart]
[....]
|
Puede no ser fácil reconocer que en la
primera llamada a enumprinters
mostrada en la impresora dm9110
con una cadena vacía donde deberíamos haber
incluido el controlador (entre las dos comas en el campo
descripción). Después la orden setdriver es correcta también.
Por defecto, Samba exhibe todos los servicios de
impresión definidos en smb.conf en la carpeta de impresoras.
También en esta carpeta está el icono del
asistente para agregar impresoras. El asistente se
mostrará sólo si:
-
El usuario conectado puede ejecutar un
OpenPrinterEx(\\server)
con privilegiso administrativos(i.e., root o
printer admin).
Truco
Intente desde una ventana DOS de Windows
200x/XP:
runas /netonly /user:root rundll32
printui.dll,PrintUIEntry /p /t0 /n
\\Samba-SERVER\printersharename
Pulse en preferencias de impresión.
-
... contiene el valor show
add printer wizard = yes (el predeterminado).
El asistente puede hacer varias cosas:
-
Cargar un nuevo controlador en el servicio
[print$].
-
Asociar un controlador subido con una cola de
impresión existente.
-
Cambiar el controlador actual por una una cola
existente con uno que haya sido cargado antes.
-
Agregar una impresora completamente nueva al
host Samba (sólo en conjunción con only
in conjunction with a working add
printer command. Un correspondiente
delete printer command
para eliminar las entradas).
El último (agregar una nueva impresora)
requiere mas esfuerzos que los anteriores. Para usar el
asistente correctamente para agragar una impresora a Samba,
el parámetro
add printer
command tiene que tener un valor definido. El programa
hook debe agregar lla imporesora al sistema de
imporesión UNIX (i.e., a
/etc/printcap,
/etc/cups/printers.conf u otro fichero
adecuado) y para
smb.conf si es
necesario.
Cuando use el asistente desde un cliente, si el
nombre de servicio de la impresora no existe, smbd
ejecutará la orden add printer
command y la analiza para intentar encontrar el
nuevo servicio de impresión. Si el servicio aun no
está definido le devuelve al cliente un error de
acceso dengado. El parámetro add printer command se ejecuta bajo el
contexto del usuario conectado, no necesariamente la
cuenta de root. Un map to guest = bad
user puede realizar la conexión con los
privilegios equivocados. Debería comprobarlo
usando la orden smbstatus.
Una vez que se ha conectado con las credenciales
equivocadas no hay forma de volver la situación
que cerrar todos los explorer y quizas reiniciar.
-
La orden net use
\\Samba-SERVER\sharename /user:root le da un
mensaje de error: Multiple
connections to a server or a shared resource by the
same user utilizing the several user names are not
allowed. Disconnect all previous connections to the
server, esp. the shared resource, and try again.
-
Cada intento de conectar una unidad de red a \\SambaSERVER\\print$ para
z: aparece: This network folder is currently
connected under different credentials (username
and password). Disconnect first any existing
connection to this network share in order to
connect again under a different username and
password.
Luego cierre todas las conexiones. Lo intenta de nuevo
y obtiene el mismo mensaje. Ha comprobado con Samba usando
smbstatus. Sí, hay
más conexiones. Las mata todas. El cliente
todavía da el mismo mensaje de error. Mire el
fichero smbd.log con un debug level alto e intente
reconectar. El mismo mensaje de error pero ni una
íinea de log. Se pregunta si siquiera ha intentado
conectar. Ejecuta ethereal y tcpdump mientras intenta
conectar. Resultado: ni un buyte por la red. Windows
todavía da el mismo mensaje de error. Cierra todos
las ventanas de Explorer y comienza de nuevo. Trata de
conectar y esta vez funciona. Windows parece guardar la
información de las conexiones en cache de alguna
forma y no se actualiza (si no teien suerte puede que tenga
que reiniciar para que no aparezca el mensaje).
La forma más fácil de forzar la
terminación de todas las conexiones desde su
cliente a un servidor es ejecutando:
Esto desconectará todas las unidades
asociadas y le permite crear conexiones nuevas como se
necesita.
Tiene que tener un extremo cuidado cuando anote los
ficheros pertenecientes a un controlador particular. No
confunda, los ficheros de versión 0 (para Windows 9x/Me, van en
[print$]/WIN/0/), la
versión 2 (controlador
modo Kernel para Windows NT, va en [print$]/W32X86/2/ lo usan Windows
200x/XP también), y version 3 (modo no-Kernel va en [print$]/W32X86/3/ no se pueden usar en
Windows NT). Con frecuencia estas diferentes versiones
de los controladores contienen ficheros con el mismo
nombre pero muy diferentes en la reaidad. Si los
observa desde Windows Explorer (están en
%WINDOWS%\system32\spool\drivers\W32X86\),
probablemnente verá nombres en
mayúsculas, mientras una orden enumdrivers de Samba mostraría
nombres meaclados o en minúsculas. Por tanto es
fácil confundirlos. Si los instala manualmente
usando rpcclient y
subórdenes, puede includo terminar
correctamente. Sólo más tarde cando
intente instalar un cliente vará mensajes de
error como This server has no
appropriate driver for the printer.
Aquís un ejemplo. Le propongo mirar con
detalle varios ficheros, comparar nombres y deletreo y
descubrir las diferencias en la composición de las
versiones 2 y 3. Observe que la version 0 continen 40
ficheros, por razones d espacio lo
dejo fuera:
root# rpcclient -U 'Administrator%secret' -c 'enumdrivers 3' 10.160.50.8
Printer Driver Info 3:
Version: [3]
Driver Name: [Canon iR8500 PS3]
Architecture: [Windows NT x86]
Driver Path: [\\10.160.50.8\print$\W32X86\3\cns3g.dll]
Datafile: [\\10.160.50.8\print$\W32X86\3\iR8500sg.xpd]
Configfile: [\\10.160.50.8\print$\W32X86\3\cns3gui.dll]
Helpfile: [\\10.160.50.8\print$\W32X86\3\cns3g.hlp]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aucplmNT.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\ucs32p.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\tnl32.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aussdrv.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cnspdc.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aussapi.dat]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cns3407.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\CnS3G.cnt]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\NBAPI.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\NBIPC.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcview.exe]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcdspl.exe]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcedit.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcqm.exe]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcspl.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cfine32.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcr407.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\Cpcqm407.hlp]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcqm407.cnt]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cns3ggr.dll]
Monitorname: []
Defaultdatatype: []
Printer Driver Info 3:
Version: [2]
Driver Name: [Canon iR5000-6000 PS3]
Architecture: [Windows NT x86]
Driver Path: [\\10.160.50.8\print$\W32X86\2\cns3g.dll]
Datafile: [\\10.160.50.8\print$\W32X86\2\IR5000sg.xpd]
Configfile: [\\10.160.50.8\print$\W32X86\2\cns3gui.dll]
Helpfile: [\\10.160.50.8\print$\W32X86\2\cns3g.hlp]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\AUCPLMNT.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\aussdrv.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cnspdc.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\aussapi.dat]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cns3407.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\CnS3G.cnt]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\NBAPI.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\NBIPC.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cns3gum.dll]
Monitorname: [CPCA Language Monitor2]
Defaultdatatype: []
|
Si escribimos lso ficheros version 2 y version
3 en ficheros de texto diferentes y comparamos los
resultados veremos este esquema::
root# sdiff 2-files 3-files
cns3g.dll cns3g.dll
iR8500sg.xpd iR8500sg.xpd
cns3gui.dll cns3gui.dll
cns3g.hlp cns3g.hlp
AUCPLMNT.DLL | aucplmNT.dll
> ucs32p.dll
> tnl32.dll
aussdrv.dll aussdrv.dll
cnspdc.dll cnspdc.dll
aussapi.dat aussapi.dat
cns3407.dll cns3407.dll
CnS3G.cnt CnS3G.cnt
NBAPI.DLL NBAPI.DLL
NBIPC.DLL NBIPC.DLL
cns3gum.dll | cpcview.exe
> cpcdspl.exe
> cpcqm.exe
> cpcspl.dll
> cfine32.dll
> cpcr407.dll
> Cpcqm407.hlp
> cpcqm407.cnt
> cns3ggr.dll
|
No se confunda, los ficheros del controlador de
cada versión con idénticos nombres pueden
diferir en el contenido, como puede ver en las
comparacinoes de tamaños:
root# for i in cns3g.hlp cns3gui.dll cns3g.dll; do \
smbclient //10.160.50.8/print\$ -U 'Administrator%xxxx' \
-c "cd W32X86/3; dir $i; cd .. ; cd 2; dir $i"; \
done
CNS3G.HLP A 122981 Thu May 30 02:31:00 2002
CNS3G.HLP A 99948 Thu May 30 02:31:00 2002
CNS3GUI.DLL A 1805824 Thu May 30 02:31:00 2002
CNS3GUI.DLL A 1785344 Thu May 30 02:31:00 2002
CNS3G.DLL A 1145088 Thu May 30 02:31:00 2002
CNS3G.DLL A 15872 Thu May 30 02:31:00 2002
|
En mi ejemplo incluso había más
diferencias que las mostradas aquí.
Conclusión: tiene que tener cuidado para
seleccionar los ficheros del controlador correcto para
cada versión. No se base en nombres y no
intercambie ficheros entre versiones.
Los servidores de impresión Windows NT/2000
asocian un uerto a cada impresora. Normalmente tiene la
forma LPT1:, COM1:, FILE:, y
otros. Samba también tiene soporte para el
concepto de puerto asociado a una impresora. De forma
predefinida tenemos sólo un puerto de impresora
llamado Samba Printer Port. Samba
realmente no necesita ese port
para imprimir; más bien es un requisito d elos
clientes Windows. Esto insisten en que se les diga un
puerto disponible cuando solicitan esta
información, o si no presentarían un
mensaje de error. Samba falsifica la información
del puerto para tener felices a los clientes Windows.
Samba no admite el concepto de Printer Pooling interno. Printer Pooling
asigna una impresora lógica a multiples puertos
como un balanceo de carga o para fallos.
Si necesita definir múltiples puertos por
una razón u otra (mis usuarios y mis jefes no
deberían saber que estan utilizando Samba),
configure el parámetro enumports command que se puede usar para
definir programas externos que listados de puertos en un
sistema.
Laa impresión funciona pero persisten
algunos problemas.La mayoría de los trabajos
imprimen pero algunos no. Algunos trabajos tienen
problemas con las fuentes, que tienen buen aspecto.
Muchos trabajos emprimen rápido pero otros son
extremadamente lentos. No podemos cubrirlo todo, pero le
rogamos que lea los párrafos sobre Evitar la configuración errónea
del controlador PostScript en el capítulo
dedicado ala impresión con CUPS.