sábado, julio 14, 2012

Muuuuu!!! Easter Egg

xir@naranjito:~$ apt-get
[...]
See the apt-get(8), sources.list(5) and apt.conf(5) manual
pages for more information and options.
This APT has Super Cow Powers.
xir@naranjito:~$ apt-get moo
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~

...."Have you mooed today?"...
xir@naranjito:~$ aptitude -v moo
There really are no Easter Eggs in this program.
xir@naranjito:~$ aptitude -vv moo
Didn't I already tell you that there are no Easter Eggs in this program?
xir@naranjito:~$ aptitude -vvv moo
Stop it!
xir@naranjito:~$ aptitude -vvvv moo
Okay, okay, if I give you an Easter Egg, will you go away?
xir@naranjito:~$ aptitude -vvvvv moo
All right, you win.

/----\
-------/ \
/ \
/ |
-----------------/ --------\
----------------------------------------------

xir@naranjito:~$ aptitude -vvvvvv moo
What is it? It's an elephant being eaten by a snake, of course.

"Hackear" un BMW en menos de 3 minutos... y robarlo

Cómo "hackean" los BMW generando una nueva llave y se llevan el coche en menos de tres minutos ha sido mudado con el resto del blog a mi nuevo blog "
Una Mirada Entre Bytes" en http://unamiradaentrebytes.wordpress.com/

lunes, julio 09, 2012

Escanear documentos desde un navegador web

Por qué instalar un escaner en red

Hoy estaba haciendo un curso sobre copywriting y tenía que imprimir unas hojas. Tengo una impresora multifunción Canon Pixma MP190 que es un infierno configurar en las distribuciones "nuevas" porque los drivers son antiguos y dependen de libcupsys2 en lugar de libcups2. Así que he aprovechado una placa Alix que tengo en casa funcionando y he decidido instalar ahí la impresora para poder imprimir desde cualquiera de los ordenadores de casa (estoy pensando incluso en echar echando una mirada a imprimir desde los móviles).

El caso es que, una vez configurada la impresora, he pensado en añadir el escaner. He encontrado varios hilos útiles. Me he decidido a seguir éste, pero me parecía excesivo (por recursos y para lo que lo voy a utilizar) instalar un apache sólo para gestionar el scanner, así que mi siguiente pensamiento ha sido: "voy a usar nginx". ERROR. Nginx no soporta CGIs. Así que instalaré la siguiente opción que me haga perder menos tiempo: lighttpd.

Instalación de los componentes necesarios

Como siempre en nuestros sistemas GNU/Linux (Debian way), el modo fácil:

apt-get install sane-utils netpbm lighttpd

Configurando el sistema

Lo primero que tendremos que verificar es que el escaner es detectado. Para ello ejecutamos:

sudo scanimage -L

Debe devolver algo como:

device `pixma:04A91734_62836D' is a CANON Canon PIXMA MP190 multi-function peripheral

Cualquier tipo de error deberá ser subsanado previamente a continuar con este procedimiento. lighttpd necesita una pequeña configuración. Editamos el fichero /etc/lighttpd/lighttpd.conf y añadiremos en el bloque de los server_modules la línea:

"mod_cgi",

como la ves, con comillas y coma.

El otro bloque lo deberás añadir en tu vhost o al final de tu fichero si no tienes hosts virtuales:

$HTTP["url"] =~ "/escaner/" {
    cgi.assign = ( ".cgi" => "/bin/bash" )
    }

Descargamos el paquete,  descomprimimos y asignamos permisos. Es un zip.


Asignamos los permisos necesarios al usuario (a mí me ha funcionado con éstos):

drwxr-xr-x 2 www-data scanner  4096 2007-08-18 22:51 images
-rwxr-xr-x 1 www-data scanner  9091 2012-07-09 07:16 index.cgi
-rwxr-xr-x 1 www-data scanner   378 2008-01-26 19:54 print.cgi
drwxr-xr-x 2 www-data scanner  4096 2012-07-09 07:16 scans

Para poder acceder al escaner, he añadido con visudo la siguiente línea al fichero sudoers:

www-data ALL=NOPASSWD: /usr/bin/scanimage

He creado un index.html que redirige a index.cgi para evitar poner los cgi como index-file. El contenido del fichero no lo puedo añadir debido a limitaciones de Blogspot, pero es un REFRESH sin más a index.cgi

La web ya me funcionaba pero me devolvía un error y no mostraba el escaneado. En este punto, si no funciona "tal cual", debemos verificar que los parámetros que le pasa al escaner son válidos con el nuestro.
La línea original es:

scanimage --resolution $QUALITY $SIZE --brightness $BRIGHTNESS --mode $MODE --format=ppm > /tmp/scan_file.ppm

La comparamos con los parámetros que acepta nuestro escaner. 

scanimage --help

Nos devuelve la ayuda general y una específica para nuestro escaner. Esos serán los parámetros que acepte:

Options specific to device `pixma:04A91734_62836D':
  Scan mode:
    --resolution auto||75|150|300|600dpi [75]
        Sets the resolution of the scanned image.
    --mode auto|Color|Gray [Color]
        Selects the scan mode (e.g., lineart, monochrome, or color).
    --source Flatbed [Flatbed]
        Selects the scan source (such as a document-feeder).
    --button-controlled[=(yes|no)] [no]
        When enabled, scan process will not start immediately. To proceed,
        press "SCAN" button (for MP150) or "COLOR" button (for other models).
        To cancel, press "GRAY" button.
  Gamma:
    --custom-gamma[=(auto|yes|no)] [yes]
        Determines whether a builtin or a custom gamma-table should be used.
    --gamma-table auto|0..255,...
        Gamma-correction table.  In color mode this option equally affects the
        red, green, and blue channels simultaneously (i.e., it is an intensity
        gamma table).
  Geometry:
    -l auto|0..216.069mm [0]
        Top-left x position of scan area.
    -t auto|0..297.011mm [0]
        Top-left y position of scan area.
    -x auto|0..216.069mm [216.069]
        Width of scan-area.
    -y auto|0..297.011mm [297.011]
        Height of scan-area.
  Buttons:
    --button-update
        Update button state
    --button-1  [0]
        Button 1
    --button-2  [0]
        Button 2

Type ``scanimage --help -d DEVICE'' to get list of all options for DEVICE.

List of available devices:
    pixma:04A91734

Como ves, en mi escaner, no está soportado el parámetro Brightness, así que lo elimino de la línea incluida en el cgi y elimino en el resto del script las opciones de Brightness en el menú. Podemos añadir otras opciones que ofrezca nuestro escaner.

Yo lo voy a dejar aquí de momento. Adjunto un screenshot de la prueba que he hecho con un pendrive y una púa en mi nuevo webscanner.


Se me ocurre que puede serme útil si me dejo un documento en casa que necesito y mi chica lo puede poner en el escaner. Accediendo por la VPN al servidor web, podría disponer del documento en mi móvil en un momento.

Deja un comentario con otras utilidades que le encuentres u otras ideas de uso con pequeñas modificaciones.