Esta web usa cookies propias y de terceros para mejorar tu experiencia de navegación y realizar tareas de análisis. Al continuar con tu navegación entendemos que das tu consentimiento a nuestra política de cookies.

MY NEW STATIC BLOG. WHY? BECAUSE FUCK YOU, THAT'S WHY!




Hoy me he estado peleando toda la tarde con esta maldita impresora ... la primera que monté tenía conexión por puerto serie, y cuando fui a buscar información sobre como añadirla a cups, lo que me encontré es que la documentación sobre este tipo de impresoras en Linux brilla por su ausencia.

Rebuscando mucho encontré que la forma más sencilla de trabajar con ella es volcar directamente al puerto serie el texto que quieres imprimir. En Linux el puerto se encuentra en /dev/ttyS0. Le das permisos de escritura y listo:
$ sudo chmod 664 /dev/ttyS0
Puedes imprimir texto directamente:
$ echo 'hola' > /dev/ttyS0
Incluso puedes abrir el cajón desde el terminal:
$ echo -e '\x1D\x56\x1' > /dev/ttyS0
Si la impresora es USB, simplemente escribe sobre el puerto USB de la impresora:
$ echo 'hola' > /dev/usb/lp
Más tarde quise probar a imprimir mediante cups. Añadir impresora > puerto serie > generic text printer. Además descubrí que se podían incrustar los comandos ESC/POS en el documento de texto a imprimir.

En php el código de abrir cajón es este:
shell_exec("echo '" . chr(27) . chr(112) . chr(48) . "' lp";
Pero también puedes añadir el código a un texto que vayas a imprimir:
$texto .= chr(27) . chr(112) . chr(48);
Todo iba genial ... hasta la llegada de Ubuntu 12.04 y siguientes. De pronto la impresora se volvía gilipollas. Imprimía el primer ticket y después ya no quería hacer nada. Así que decidí volver a la estrategia anterior, escribir directamente sobre el puerto. Además, ahora tengo que añadir un espacio al final del código ESC/POS o la impresora no hace caso:

En php el nuevo código de abrir cajón es este:
shell_exec("echo '" . chr(27) . chr(112) . chr(48) . ' ' . "' > /dev/usb/lp";
Obviamente hay que dar permisos de escritura al puerto:
$ sudo chmod 664 /dev/usb/lp
Pero claro, la gente suele reiniciar los ordenadores, y los permisos no se guardan. Así que añado este código (sin el sudo) al script /etc/rc.local para que modifique los permisos al iniciar el sistema.

Y no es suficiente, porque si cuando inicia el PC la impresora no está conectada ... no sirve para nada lo que has hecho.

Puedes añadir un script en /etc/cron.hourly/ para modificar los permisos cada hora, pero entonces los usuarios se quedan sin poder imprimir hasta unos minutos después de iniciar el PC ... una hora como máximo.

Más tarde me doy cuenta de que el puerto pertenece al grupo lp, así que la solución es añadir a ese grupo a todos los usuarios que quieras que impriman. Si quieres imprimir desde php te toca añadir al apache:
$ sudo usermod -a -G lp www-data
¿Es la solución definitiva? Según mis pruebas, SI, pero un usuario me asegura que la impresora no imprime al encender el PC ... tengo que hacer más pruebas, pero como no tengo esta impresora en mi casa, me toca ir al trabajo a hacer pruebas, pero no muchas, porque la gente tiene que imprimir tickets ... en fin, que necesito una...

¿Y qué pasa con Windows?
En Windows si que tienes un driver, disponible desde la web oficial. Pero en Windows no puedes volcar datos directamente sobre el puerto.

¿Cómo abres entonces el cajón en caso de emergencia?
(Emergencia = tu programa no funciona y has perdido las llaves del cajón). Pues con esta sencilla herramienta: print test. La ejecutas, seleccionas la impresora, escribes el código que quieres enviar a la impresora y listo.

El código para abrir el cajón es este: \[email protected]\x0A\x0D\027\112\000\100\250\x0A\x0D

¿Y cómo se abre el cajón desde php sobre Windows? pues insertando chr(27) . chr(112) . chr(48) en el documento que vallas a imprimir ... ¿Y cómo se imprime en php sobre Windows? pues con la extensión  correspondiente para php.

¡¡¡LA MADRE QUE PARIÓ A SAMSUNG!!!
Puedes pasarte toda una tarde buscando los drivers para Linux de esta impresora y no los encontrarás. En la web oficial no los encontrarás, pero si los buscas para Windows, llegarás a la web de Bixolon en Alemania, y ahí están!!! Y también los drivers para Windows de 64 bits, que en la web oficial ni aparecen... otro día hablaremos de como diseñar una web de empresa para que sea completamente inusable y nadie pueda encontrar los drivers que busca.

De verdad que no me lo creo, pero por si las moscas, lo subo a un mirror.
comments powered by Disqus

Powered by PussyPress.