Difference between revisions of "Cómo utilizar una impresora GDI (winprinter) desde Linux"
(una froga) |
(No difference)
|
Revision as of 06:35, 7 November 2017
03/09/2010
Contents
Cómo utilizar una impresora GDI (winprinter) desde Linux
El último recurso a utilizar cuando se dispone de una impresora que no funciona en tu sistema.
Antes de empezar
La realización de estas tareas supone un trabajo arduo y poco gratificante, por lo que no uses este método a menos que no tengas alternativa, e invierte en hardware que no sea utilizable sólo en windows.
El problema
Tengo que hacer funcionar una impresora gdi, en concreto una Konica Minolta Magicolor 2500W en Linux. Esta impresora USB no tiene ningún tipo de driver para sistemas que no sean windows, por lo que sólo se puede utilizar por medio de una emulación.
Para solucionar este problema se opta por una virtualización completa de una máquina windows, para que el software de la impresora pueda funcionar.
Entorno utilizado
- Máquina host
- Debian Squeeze AMD64
- Samba
- Cups
- Intel Core i7
- Mucha RAM
- nVidia
- Debian Squeeze AMD64
- Konica Minolta Magicolor 2500W
- Máquina virtualizada
- Oracle VirtualBox
- Windows XP (¿SP2?)
- 256M de RAM
Eligiendo la virtualización
Para añadirle más emoción, la máquina host tiene una tarjeta nVidia con los drivers privativos para que funcione correctamente cierto software.
KVM
Mi opción preferida. Forma parte del sistema y no hay que hacer prácticamente nada para que funcione.
Tras la instalación de la máquina virtualizada, se arranca esta con la impresora USB conectada con el parámetro:
-usb -usbdevice host:132b:2045
La máquina virtualizada detecta la impresora correctamente, pero a la hora de imprimir, ..., maravilloso pantallazo azul.
Al parecer KVM no se lleva bien con los dispositivos USB 2.0.
Se descarta KVM. Es posible que futuras versiones solucionen el problema.
Xen
Una virtualización muy madura. Tras la instalación del kernel adecuado en la máquina host, se descubre que los drivers privativos de nVidia dejan de funcionar. Parece que nVidia está trabajando en ello, pero en el momento de mis pruebas no fui capaz de hacerlo funcionar, ni siquiera compilando módulos del kernel como si Xen no existiera.
Sospecho que con Xen se puede llegar a hacer funcionar, pero no llegué ha hacer pruebas mas allá.
Oracle VirtualBox
Una opción que no me gusta nada. VirtualBox tiene una versión libre, pero todas las cosas "guais" como el soporte para USB, que al final son las que necesitas, sólo están en la versión no libre, aunque gratuita.
Tras la instalación de la máquina virtualizada, y escoger la impresora USB, esta es detectada e imprime.
Instalar la impresora Postscript virtual
Una vez tengamos la máquina virtual (da lo mismo cual se utilice), la red de la misma y la impresora funcionando, podemos pasar a este paso que consiste en crear una impresora Postscript que redirigirá los trabajos de impresión hacia la impresora GDI.
Agradecimientos
Este mini manual ha sido posible gracias a esta página, que sirve como referencia para todo el proceso.
Requerimientos
De la página de Ghostscript necesitaremos Ghostscript, GSview y RedMon
Instalar el software
Tras tener la impresora funcionando, se instala el software en este órden:
- Ghostscript - El software de emulación Postscript.
- GSview - Visor y procesador de impresión Postscript.
- RedMon - Redirector de puertos de impresora
La impresora Postscript
Tras tener instalado el software, creamos una impresora con estas características:
- Impresora local. Nada de "Plug and Play".
- El puerto de impresora tiene que ser un "Redirected Port".
- El driver de la impresora tiene que ser un driver Postcript, en este caso se ha utilizado una Apple Color LW 12/660 PS
Una vez instalada la impresora, se configura el puerto de la misma, con las siguientes características:
- Redirect this port to the program:
C:\Archivos de programa\Ghostgum\gsview\gsprint.exe
- Arguments for this program are:
-printer "KONICA MINOLTA magicolor 2500W" -color -
El nombre de la impresora debe de ser exacto, así como los guiones y espacios.
Tras esto, si mandamos una página de prueba por la impresora postscript, esta debe de llegar a salir por la la impresora física.
Ya podemos compartir la impresora postscript, para que las máquinas Linux la utilicen.
Cups
En este momento tenemos una máquina windows virtualizada, con una impresora postcript compartida.
Para configurar la misma impresora que en la máquina virtualizada (Apple Color LW 12/660 PS) se requiere el fichero APLWCSB1.PPD
En el sistema Linux Tenemos que crear una impresora:
- Con el navegador entramos en la utilidad de administración de cups:
http://localhost:631/admin
- Añadimos impresora (introducimos la password de administración si fuera necesario)
- Otras impresoras en red: Windows Printer via SAMBA
- Conexión:
smb://win_machine/POSTSCRIPT
- win_machine IP de la máquina windows virtualizada
- POSTSCRIPT Nombre de la impresora postscript compartida
- proporcione un archivo PPD:
APLWCSB1.PPD
Con esto tenemos funcionando la impresora desde Linux. :-)
VirtualBox
Para que la máquina virtualizada siempre esté funcionando, lo ideal es guardar un "SnapShot" de la máquina funcionando y restaurarlo cada vez que se vaya a imprimir. También es conveniente que todo esto funcione con el usuario, en vez de como "root".
Paquetes necesarios
Para esta instalación he utilizado los repositorios que ofrece Oracle para Lenny, añadiendo al ' /etc/apt/sources.list' la linea:
deb http://download.virtualbox.org/virtualbox/debian lenny non-free
- El paquete instalado es:
virtualbox-3.2
Módulos del kernel
Para el correcto funcionamiento del VirtualBox se requieren los módulos
vboxdrv vboxnetflt vboxnetadp
- Para instalarlos uso el paquete:
virtualbox-ose-dkms
De esta manera aseguro que los módulos necesarios estén, aunque cambie la versión de kernel.
- Posiblemente el paquete de virtualbox me ofrezca las mismas funcionalidades y pueda compilar los módulos prescindiendo del paquete 'virtualbox-ose-dkms', por medio de:
/etc/init.d/vboxdrv setup
Incompatibilidades con otras utilidades de virtualización
Los módulos del kernel utilizados por KVM entran en conflicto con los de VirtualBox. Si no se quiere desinstalar KVM se puede recurrir a crear el fichero '/etc/modprobe.d/virtualbox.conf':
blacklist kvm blacklist kvm-intel blacklist kvm-amd
Permisos de usuario
Para que VirtualBox funcione cuando lo lanza un usuario, este requiere estar en el grupo:
vboxusers
En este caso, como la impresora es USB se requiere también el grupo:
lp
Red
He optado por generar una interfaz (vnet0) en una red aparte (192.168.14.0), y darle salida por medio de NAT.
- Añadir al '/etc/network/interfaces'
# VirtualBox NAT bridge auto vnet0 iface vnet0 inet static address 192.168.14.254 netmask 255.255.255.0 bridge_ports none bridge_maxwait 0 bridge_fd 1 up iptables -t nat -I POSTROUTING -s 192.168.14.0/24 -j MASQUERADE down iptables -t nat -D POSTROUTING -s 192.168.14.0/24 -j MASQUERADE
- Configurar la máquina virtual para que lo use:
VBoxManage modifyvm "XP" --bridgeadapter1 vnet0
- La máquina windows tiene que tener una IP dentro del rango asignado, y la como puerta de enlace la IP asignada dentro del interfaces (192.168.14.254).
Comando útiles
Siendo "XP" el nombre de la máquina virtualizada
- Info
VBoxManage showvminfo "XP"
- Dispositivos USB
VBoxManage list usbhost
- Capturar un Dispositivo USB
VBoxManage controlvm "XP" usbattach /proc/bus/usb/002/002
- Enciende sin entorno gráfico
VBoxManage startvm "XP" --type headless
- Apaga
VBoxManage controlvm "XP" acpipowerbutton
- Apaga a lo bruto (botonazo)
VBoxManage controlvm "XP" poweroff
- Cambia la memoria asignada a la máquina virtual
VBoxManage modifyvm "XP" --memory 256
- Genera un snapshot
VBoxManage snapshot "XP" take XP.snap
- Restaura un snapshot
VBoxManage snapshot "XP" restore XP.snap
Script de encendido y apagado
En mi caso, he implementado un script, que el usuario llama desde dos iconos (apagado y encendido) situados en su escritorio. Como se arranca un "snapshot", puede apagarse a lo bruto y reiniciarse siempre que se desee
#!/bin/sh case "$1" in start) VBoxManage snapshot XP restore XP.snap VBoxManage startvm "XP" --type headless ;; stop) VBoxManage controlvm "XP" poweroff ;; *) echo "Usage: $0 {start|stop}" ;; esac
Notas
- Se puede usar cualquier máquina virtual, siempre que esta sea capaz de imprimir por la impresora GDI.
- Lo expuesto aquí no es "dogma de fe", seguro que se pueden realizar muchas de las tareas de manera diferente.
- Faltan muchos detalles de las miles de pruebas realizadas, pero mi memoria no da para más.
- Si alguien encuentra una manera mejor de hacer esto, por favor, porfa porfa, porfa porfa porfa porfa, que se ponga en contacto conmigo. :-D
Enlaces
http://www.xen.org
http://www.linux-kvm.org
http://www.virtualbox.org
http://pages.cs.wisc.edu/~ghost/
http://mirror.cs.wisc.edu/pub/mirrors/ghost/GPL/gs871/gs871w32.exe
http://mirror.cs.wisc.edu/pub/mirrors/ghost/ghostgum/gsv49w32.exe
http://mirror.cs.wisc.edu/pub/mirrors/ghost/ghostgum/redmon17.zip
http://ftp.uma.es/Drivers/PRINTERS/APPLE/12_600PS/PRINSW_3/APLWCSB1.PPD
Referencias
http://forums.gentoo.org/viewtopic-t-819521-start-0.html
http://albertomolina.wordpress.com/2009/07/15/xen-y-controlador-privativo-nvidia-por-finto/
http://es.wikipedia.org/wiki/Postscript
http://iharder.sourceforge.net/current/macosx/winmacprinter/
http://support.apple.com/kb/TA37258?viewlocale=en_US