Archivo de la etiqueta: usb

Quiero integrar mi iPod Nano 3G con Amarok

Desde que mi santa me regaló la iPod Nano 3G, ando loco con el aparatito (hasta entonces usaba el teléfono móvil para escuchar música). Y es que uno empieza a apreciar de verdad su iPod cuando lo usa. :-)

El problema, para un linuxero, es la sincronización. Ciertamente, podrás hacerlo sin demasiados problemas con una máquina virtual con un sistema Windows XP invitado. Si te decides por ese camino, te recomiendo VMWare y no Virtualbox, porque tiene mejor soporte para las unidades USB y también para la grabación en CD/DVD.

La mayoría de distribuciones modernas tienen integrado el soporte del iPod con Amarok y con Rhythmbox, lo que significa que debería funcionar «out of the box» (conectar y listo). Pero puede que los usuarios de gentoo, o con sistemas anticuados tengan algún problema. En ese caso, tal vez esta información les sea de alguna utilidad. En resumen: los usuarios normales, pueden dejar de leer aquí mismo, los frikis pueden seguir. :-)

La máquina virtual te permitirá usar iTunes, que tiene un montón de funcionalidades que son de lo mejorcito que hay en el mercado. Especialmente interesante es el iTunes Store, que te permitirá comprar legalmente toda la música que te interese, con unos precios muy decentes aunque con algunas restricciones en la reproducción. No tendrás problemas para manejar la música AAC protegida con el iPod o con iTunes, pero ningún otro programa Windows o Linux podrá leer tu música legalmente comprada.

El problema no lo pone Apple (me consta que la empresa odia el AAC protegido), sino las discográficas, que a estas alturas del siglo todavía no se han enterado de cómo funciona el mercado. Tampoco se han enterado de que la gente ya no oye CDs sino solo MP3 o AAC y que quieren llevárselos a todas partes en diferentes aparatos (el móvil, el mp3, el ordenador…) lo que implica la mayor parte de las veces uso legal, porque solo una persona está usando a la vez el mismo mp3. Y con toda esta confusión acerca de lo que es pirateo y lo que no lo es, si las discográficas, completamente ciegas a la realidad, están luchando duramente por lograr su propia destrucción, no hablemos ya de la SGAE. En la wikipedia, al lado de la definición de «ceguera», debería venir un enlace a la SGAE. :-(

Apple al menos está haciendo intentos por romper la situación y volcarla a lo que de verdad quieren muchos usuarios (como yo), que es comprar legalmente su música pero no tener estúpidas restricciones de software que te impidan leer la música por la que has pagado en el aparato que te de la gana. Por ejemplo, Apple permite que puedes comprar la música en el iTunes Plus, que es música AAC pero sin restricciónes por software. El problema es que las discográficas permiten una oferta muy pequeña, casi marginal en el iTunes Plus. Mientras tanto, siempre puedes grabar un CD con la música comprada en iTunes, y después ripearla a mp3 que es un cambalache legal pero de lo más gilipollas. :-(

Al final, las restricciones que te ponen las discográficas para usar legalmente la música que compras, prácticamente suponen una invitación a usar la mula. En fin, ellos sabrán a qué están jugando. Igual piensan que las restricciones de software que le ponen a los AAC realmente están impidiendo a NADIE que piratee la música. El día que se den cuenta de que solo están j*diendo a los usuarios legales (cosa que al menos Apple y EMI sí saben perfectamente), quizás haya una esperanza para la industria discográfica del siglo XXI. Si, me cabreo cada vez que lo pienso, lo siento. :-(

En cualquier caso, con el paso del tiempo, sobre todo si usas mucho tu iPod, el uso de una máquina virtual se acabará volviendo cada vez más peñazo. Al final, mi santa se ha comprado un Creative Zen para ella, y se lo he integrado rápidamente en Amarok. Después de ver lo fácil y práctico que es, me he decidido y he integrado también mi iPod. Aquí va el proceso completo, aunque seguramente tu distribución ya ha hecho parte (o todo) el trabajo de forma automática. Por ejemplo, es el caso de Fedora 8.

Gran parte de lo que te voy a contar está recogido directamente del Gentoo Wiki: Apple iPod. A él me remito para las dudas.

Habitualmente, todas las grandes distribuciones (Fedora, por ejemplo, y supongo que Ubuntu), deberían tener sus kernels de serie ya preparados para el soporte del iPod. Si usas un kernel personalizado, en cambio, seguramente tendrás que modificar alguna cosilla y recompilarlo para que se generen los módulos necesarios para el reconocimiento del iPod. Como mínimo, necesitarás activar:

Device Drivers --->
    SCSI Support --->
      <*> SCSI device support
      <M> SCSI disk support
      <M> SCSI generic support
      [*] Probe all LUNs on each SCSI device
    Input device support --->
      <*> Event interface

Si usas un iPod Firewire, activa también:

Device Drivers --->
  IEEE 1394 (FireWire) support  --->
    <*> IEEE 1394 (FireWire) support
    <*> OHCI-1394 support
    <*> SBP-2 support (Hard disks etc.)

En cambio, si usas un iPod USB (que es lo más corriente), activa esto, aunque me extrañaría muchísimo que no lo tengas ya activado de antes:

Device Drivers --->
  USB support  --->
    <M< Support for Host-side USB
    [*]   USB device filesystem
    <M> UHCI HCD (most Intel and VIA) support
    <M> EHCI HCD (USB 2.0) support
    <M> USB Mass Storage support

Para el caso de que tengas un iPod formateado para Mac, me remito a las explicaciones del Gentoo Wiki. Vale, pues ahora recompila tu kernel e instálalo, y por ahí hemos terminado.

Ahora tienes que meter el iPod en el esquema del udev, lo que te simplificará el manejo más adelante, porque el nombre del dispositivo será siempre el mismo. Para ello, añade esta línea al fichero /etc/udev/rules.d/10-local.rules:

BUS=="usb", ATTRS{product}=="iPod", ATTRS{manufacturer}=="Apple Inc.", KERNEL=="sd?1", SYMLINK+="ipod

Y acuérdate de resetear udev con el comando udevstart.

Ahora crea un directorio /mnt/ipod vacío y mete una línea en tu /etc/fstab para que el montaje sea semiautomático. Habrá que dar la orden de montaje, pero eso lo hará Amarok por nosotros. Ni se te ocurra meter tu iPod en autofs o cualquier otro sistema de montaje automático bajo demanda: el iPod tarda unos 10 segundos en desmontar. O bastante más, si estabas sincronizando cosas y quedaron tareas pendientes. Ten en cuenta que Linux lo hace todo en caché, es al desmontar cuando empezará de verdad a transferir ficheros, y eso lleva su tiempo: más o menos lo mismo que tardaba iTunes en sincronizarlo todo. Por eso, autofs se volverá insoportable si le obligas a estar montando y desmontando continuamente con autofs:

/dev/ipod  /mnt/ipod  vfat  user,noauto,async,nodev,nosuid,noexec,rw  0 0

Y recuerda que cuando le digas a Amarok que se desconecte de la iPod tienes que tener paciencia y esperar a que la iPod te permita ser desconectada. O te arriesgas a una corrupción masiva de datos. No te quejes, Windows e iTunes funcionaban igual y tenían el mismo detalle elemental de uso: no desenchufar la iPod hasta que no te lo diga ella y desaparezca el icono de conexión.

Ahora modifica tu /etc/sudoers para que se permita a cualquier usuario hacer la extracción del iPod. Si no, solo root podrá hacerlo en muchos sistemas (como Gentoo). Otra opción es añadir una orden adicional (GROUP=users, por ejemplo) a udev para que cambie el propietario del dispositivo o los permisos. Yo he preferido hacerlo con sudo:

%users jeanette = NOPASSWD: /usr/bin/eject /dev/ipod

Con esto, el ipod ya puede montarse, desmontarse y extraerse por cualquier usuario del sistema. Ahora vamos a configurar nuestro Amarok.

En el caso de Gentoo, tendrás que emerger la librería libgpod, pero no te valdrá cualquiera: Tiene que ser la 0.6.0 o superior, para dar soporte al sistema criptográfico que usan los iPod más modernos (como el Nano 3G). En el caso de Gentoo, la librería libgpod 0.6.0 está enmascarada, asi que tendrás que desenmascararla para poder emergerla. Si no sabes de qué coño estoy hablando, entonces no deberías estar usando Gentoo. Prueba con Ubuntu o Fedora. ;-)

Bueno, vale, no me gusta ir de hacker repelente. En primer lugar porque no soy hacker (solo aficionadillo ;-). Y en segundo lugar porque no soy repelente… creo. :-D

Vamos, que si no sabes de que coño estaba hablando, échale un vistazo a un Wiki que todo Gentoosiasta debería leerse al menos un par de veces: Cómo usar Portage correctamente.

Después, tendrás que añadir a tu /etc/make.conf el flag USE «ipod». Si quieres añadir además soporte para los Creative Zen añade también el flag USE «mtp». Y ahora recompila tu Amarok (emerge amarok). En el caso de otras distribuciones modernas, el soporte para los Creative Zen y los iPod suele estar ya integrado de serie. Por lo menos es así en Fedora, con lo que no tendrás que hacer nada ;-).

Vale, ahora arranca Amarok. Vete a «Preferencias» y «Configurar Amarok». Entra en «Dispositivos de medios». Dale a «Añadir un dispositivo» y se abrirá un cuadro de diálogo. Despliega «Seleccionar la extensión a usar con este dispositivo» y elige «Dispositivo de medios Apple iPod». En «Introducir un nombre» escribe «iPod». En «Punto de montaje» pon «/mnt/ipod». Y ahora acepta.

Verás que en el listado de medios ahora aparece «iPod». Haz click en las ruedecitas de su entrada, con lo que se desplegará otro cuadro de diálogo para configurarlo con más exactitud.

En «Orden de preconexión» escribe «mount /mnt/ipod». En «Orden de postdesconexión» escribe «umount /mnt/ipod && sudo eject /dev/ipod». Haz click en el cuadradito de «Sincronizar con las estadísticas de Amarok». Acepta y ya lo tienes.

Ya puestos, vamos a meter también un dispositivo Creative Zen. Dale a «Añadir un dispositivo», Selecciona la extensión «Dispositivo MTP». Dale el nombre «Creative Zen». Deja el resto en blanco y acepta. El dispositivo «Creative Zen» aparecerá ahora en el listado. Dale a las ruedecitas y deja los comandos de preconexión y postdesconexión en blanco. Ya lo tienes. Más fácil que el iPod, ¿verdad?. :-)

Acepta la configuración y vuelve a la pantalla principal de Amarok. Haz click en las ruedecitas de arriba a la izquierda y haz que aparezca la pestaña «Dispositivos». Haz click en la pestaña. Enchufa tu iPod, y luego haz click en «Conectar». En unos segundos debería aparecer el listado de todo lo que contiene tu iPod. Ahorabuena, ya tienes el iPod integrado en Amarok. Ahora puedes hacer de todo: meter discos, borrarlos, añadir o gestionar listas… Pulsa con el botón derecho del ratón en cualquier canción del iPod o de tu biblioteca y tendrás las opciones pertinentes. Si tienes una cuenta en Last.FM, y la has metido en la configuración de Amarok, entonces Amarok se ocupará de todo. Incluso enviará a Last.FM las canciones que has escuchado en el iPod cuando volvías a casa en el autobús. :-)

Pero aún queda un detalle. Es posible que Amarok se encuentre con algún problema para grabar en el iPod la información. Lo sabrás porque cada vez que lo intente, aparecerá una advertencia abajo a la izquierda, que te dice algo del Firewire ID o que no puede actualizar SysInfo. Esto es debido a la criptografía del aparato, con lo que Amarok puede leerlo pero no modificarla base de datos interna. Para arreglarlo, cierra Amarok, enchufa el iPod, vete a una terminal y haz:

[lacofi@jeanne ~]$ su
password:
[root@jeanne /home/lacofi]# mount /mnt/ipod
[root@jeanne /home/lacofi]# lsusb -v | grep Serial
  iSerial                 3 000A27001AD07376
  iSerial                 1 0000:00:03.3
  iSerial                 3 1234567890AB
  iSerial                 3 031017200000
  iSerial                 0
  iSerial                 1 0000:00:0b.2
  iSerial                 0
  iSerial                 0
  iSerial                 1 0000:00:0a.2
  iSerial                 0
  iSerial                 1 0000:00:0b.1
  iProduct                2 USB to Serial
  iSerial                 0
  iSerial                 1 0000:00:0a.1
  iSerial                 1 0000:00:0b.0
  iSerial                 1 0000:00:03.2
  iSerial                 3 ES93I1C185FB
  iSerial                 1 0000:00:0a.0
  iSerial                 3 SG11H2616YPE
  iSerial                 1 0000:00:03.0
  iSerial                 0
  iSerial                 1 0000:00:03.1

Vale, a mi me salen un huevo de dispositivos porque tengo muchos aparatitos USB colgando del ordenador. Pero fíjate en el de arriba, el que he marcado en Cian. Tu deberías ver algo parecido, y lo reconocerás el correcto porque sale un código de 16 caracteres (el resto son de 12). Anota ese código o cópialo al portapapeles.

Ahora edita el fichero /mnt/ipod/iPod_Control/Device/SysInfo, y añade el código de esta forma (lo de «ModelNumStr: xB261» es lo que aparece en el fichero. Lo de «FirewireGuid: xxx» es lo que tienes que añadir tú):

ModelNumStr: xB261
FirewireGuid: 000A27001AD07376

Ahora desmonta el ipod.

[root@jeanne /home/lacofi]# umount /mnt/ipod
[root@jeanne /home/lacofi]# eject /dev/ipod
[root@jeanne /home/lacofi]# exit
[lacofi@jeanne ~]$ 

Con esto, Amarok debería poder leer y grabar el iPod sin más problemas. Y el Creative Zen de tu santa, también. ;-)

Un último detalle: Puede que cuando vuelvas a revisar los Covers de tu iPod veas que todos o muchos de ellos han desaparecido. Sí, los tags de los mp3 no incluyen por defecto el gráfico del cover así que iTunes lo maneja con un tag ID3 modificado, pero Linux no admite esas perversiones de la norma, así que tiene que acceder directamente a la base de datos interna de la iPod. La próxima vez que conectes la iPod, en Amarok vete a la pestaña «Dispositivos», y arriba del todo verás un desplegable que dice simplemente «iPod». Despliégalo y verás un menú con varias opciones avanzadas. Una de ellas es precisamente para actualizar los gráficos de la iPod. Esto enviará todas las portadas de los discos que faltan. ;-)

Disfrútalo mucho. :-)

Cómo encriptar una partición de disco duro con dm-crypt

A mi me surgió esta «necesidad» porque quería asegurarme de que nadie pueda leer mi disco duro externo portátil en caso de que me lo roben, pero hay muchos motivos para hacerlo. Unos ejemplos:

  1. Quieres encriptar un disco duro externo USB por si te lo roban. En ese caso, podrias encriptarlo con una contraseña que solo tú sabes, y debes teclear cada vez que lo enchufas. Es el ejemplo más sencillo.
  2. Quieres encriptar todos los datos privados que hay en tu ordenador (carpetas personales, fotos, documentos, etc): si se te estropea el ordenador, quieres estar seguro de que el servicio técnico no toqueteará en tus cosas. En ese caso podrías usar una contraseña tecleada cada vez que arrancas la máquina, pero es un poco peñazo, ¿no?. Es más práctico generar una contraseña aleatoria de, por ejemplo, 1024 bytes y meterla en un fichero en un lápiz USB, de tal forma que si el ordenador arranca con ese lápiz metido, puedes acceder a tus datos, pero si no, no.
  3. Quieres encriptar un disco duro externo USB por si te lo roban, pero manejas datos empresariales, o muy confidenciales (como datos médicos), o simplemente eres un paranoico del carajo. En ese caso puede que desconfies de una contraseña tan sencilla como para poder recordarla, y tampoco te fias de que no te roben el lápiz USB con la contraseña aleatoria. En ese caso, puedes encriptar el fichero con la clave con GNUpg, de tal forma que te pida una contraseña tecleada para poder usarlo. Parece un trabalenguas, pero en la práctica significa que para que alguien pueda leer el disco duro USB necesita tener el lápiz USB con la contraseña, y saber la frase de paso que hay que teclear (y que solo tu sabes). Tendrían que robarte, registrarte y torturarte a la vez, vamos. ;-)

Hay mucha documentación en la red para los que quieren encriptar una partición o un fichero loopback con dm-crypt. Por lo que tengo entendido, es el sistema recomendado, incluso por encima de loop-AES, que sería la alternativa más cercana. Si quieres probar con loop-AES, puedes echar un vistazo a la documentación. Yo lo he probado y te aseguro que funciona a la perfección.

Pero como parece que en los foros se recomienda más dm-crypt, al final me decidí por él.

Como está todo bien explicado en la red, lo que te pongo aquí es solo un resumen rápido de los pasos que seguí yo. Asumo que tienes Gentoo como yo, pero se puede hacer lo mismo en una Debian o un Ubuntu con muy pocas modificaciones. Si quieres más detalles o hacer algunas virguerías, échale un vistazo al HOWTO en castellano, al Tutorial resumido que usé yo, o al Gentoo Wiki más completo, que viene con un montón de detalles.

Lo primero que necesitas es un kernel adecuado. Muchas distribuciones ya incluyen el soporte a la encriptación dm-crypt de serie, como por ejemplo Fedora. Si no es así, entonces tendrás que compilar uno a medida.

Te animo a que compiles un kernel propio, incluso aunque el kernel de serie te funcione sin problemas. Un kernel propio te proporciona mucha flexibilidad a la hora de añadir cosas «finas» a tu sistema. Encriptar una partición de disco duro es un ejemplo, pero como esto hay muchas más, cosas que puedes ajustar o añadir, pero necesitas activar ciertas opciones del kernel. Modificar un kernel ya creado es muy facil, pero hacer uno nuevo desde cero puede ser un poco tortuoso, asi que piensa que tener un kernel propio es como tener mucho trabajo adelantado de cara al futuro.

Haz un «make menuconfig», entra en «Device Drivers» y luego en la opción que dice «RAID and LVM support». Activa las opciones «Multiple devices driver support (RAID and LVM)», «Device mapper support», y «Crypt target support». Ahora vuelve a la raiz y entra en «Cryptographic Options». Ahí yo lo activaría todo como módulos, pero tú tienes que activar al menos «AES cipher algorithims (i586)». Ahora vuelve a la raiz y entra en «Device Drivers» y luego en «Block Devices». Ahí, activa «Loopback device support». Vuelve al sistema y recompila.

Ojo, si quieres tener simultáneamente una unidad loop-AES, además de dm-crypt, has de saber que loop-AES te exige que desactives la opción «Loopback device support» del kernel, y que hagas un «emerge loop-aes» para compilar una versión modificada del módulo «loop» que está en Portage. Hazlo así, a dm-crypt no le importará, siempre y cuando te acuerdes de hacer un «modprobe loop» para que dm-crypt no se queje de que le falta el soporte de dispositivos loopback.

Bien, si vas a usar un fichero de contraseña, lo primero es crear el fichero, claro. Esto lo puedes hacer así, lo que crearía una contraseña fuerte de 1024 caracteres aleatorios (a que no hay narices a memorizarlos):

[root@jeanne ~]# head -c 1024 /dev/urandom > /mnt/usbdisk/.clave_discoduro.txt
[root@jeanne ~]# chown lacofi:users /mnt/usbdisk/.clave_discoduro.txt
[root@jeanne ~]# chmod go-rwx /mnt/usbdisk/.clave_discoduro.txt

Si quieres encriptar ese fichero con GnuPG, entonces será necesario teclear una passphrase cada vez que quieras usar el archivo de contraseña. Eso es algo así como usar una contraseña para desencriptar tu contraseña:

[root@jeanne ~]# head -c 3172 /dev/urandom | \
				uuencode -m - | grep -v ==== | tail -n 65 | \
				gpg --symmetric -a > /mnt/usbdisk/.clave_discoduro.txt
[root@jeanne ~]# chown lacofi:users /mnt/usbdisk/.clave_discoduro.txt
[root@jeanne ~]# chmod go-rwx /mnt/usbdisk/.clave_discoduro.txt

Y por supuesto, si no quieres complicarte la vida, puedes no especificar ningún fichero de contraseña. Te pedirá una sobre la marcha y tendrás que teclearla a mano todas las veces que montes la unidad.

Observa que me he asegurado de que el fichero que contiene la contraseña es accesible por mí y por nadie más, pero ahí puedes jugar un poco con los permisos según tus necesidades.

Ahora instala cryptsetup.

[root@jeanne ~]# emerge cryptsetup

Ahora MACHACA el contenido de la partición. ¡Cuidado, este comando que sigue destruirá permanentemente cualquier dato que esté en la partición!. ¡De eso se trata, así que no te confundas!.

[root@jeanne ~]# shred -n 1 -v /dev/lacie_backup1
shred: /dev/lacie_backup1: pass 1/1 (random)...
shred: /dev/lacie_backup1: pass 1/1 (random)...16MiB/120.0GiB 1%
shred: /dev/lacie_backup1: pass 1/1 (random)...87MiB/120.0GiB 2%
shred: /dev/lacie_backup1: pass 1/1 (random)...108MiB/120.0GiB 3%
(tómate un café, porque esto puede tardar un buen rato...)

Luego crea un dispositivo mapper (al final, lo que acabarás montando será este dispositivo mapper, y no el dispositivo real). Las instrucciones originales recomiendan también encriptar la partición swap, para que nadie pueda acceder a los datos temporales, pero como yo solo quiero proteger un disco duro portátil y ahí no habrá ninguna partición swap, puedo saltarme este paso.¡Cuidado, este comando que sigue también destruirá permanentemente cualquier dato que esté en la partición, no te confundas de sitio!.

Si estás usando un fichero de contraseña:

[root@jeanne ~]# cryptsetup -v luksFormat /dev/lacie_backup1 /mnt/usbdisk/.clave_discoduro.txt

WARNING!
========
This will overwrite data on /dev/lacie_backup1 irrevocably.

Are you sure? (Type uppercase yes): <YES>
Command successful.

Si omites /mnt/usbdisk/.clave_discoduro.txt te pedirá una passphrase en la línea de comandos. En ese caso te recomiendo que uses la opción «-y», para que te la pida dos veces, y así no tendrás problemas en caso de que te equivoques al teclear.

Si prefieres encriptar el fichero de contraseña con GnuPG:

[root@jeanne ~]# gpg --quiet --decrypt /mnt/usbdisk/.clave_discoduro.txt | \
> cryptsetup -v luksFormat /dev/lacie_backup1
Introduce la passphrase: <aqui metes la passphrase>
gpg: ATENCIÓN: la intgridad del mensaje no está protegida
Command successful.

Observa que el dispositivo que uso es /dev/lacie_backup1 y no /dev/sdb1. Eso es porque tengo bien configurado UDEV. Te lo recomiendo sinceramente.

Ahora tienes que abrir el dispositivo mapper que acabas de crear.

Si usas un fichero de contraseña:

[root@jeanne ~]# cryptsetup --key-file /mnt/usbdisk/.clave_discoduro.txt \
> luksOpen /dev/lacie_backup1 encriptado
key slot 0 unlocked.
Command successful.

Si omites «–key-file /mnt/usbdisk/.clave_discoduro.txt» debería pedirte la contraseña en línea de comandos. Obviamente no serás capaz de recordarla, si la contraseña son 1024 caracteres aleatorios, pero sí si es solo una contraseña tecleada. En cualquier caso, con esto queda abierto y accesible el dispositivo mapper con nombre «encriptado».

Si usas un fichero de contraseña encriptado con GnuPG:

[root@jeanne ~]# gpg --decrypt /mnt/usbdisk/.clave_discoduro.txt 2>/dev/null | \
> cryptsetup luksOpen /dev/lacie_backup1 encriptado
key slot 0 unlocked.
Command successful.

Ahora ya tienes el dispositivo /dev/mapper/encriptado que es con lo que vas a trabajar. Para tí, /dev/lacie_backup1 ya no importa. Bien, pues ahora tienes que formatear el dispositivo. Algunos recomiendan no usar un sistema con journaling porque teoricamente puede producir corrupción de datos. Yo estoy usando ext3 hasta ahora sin problemas.

[root@jeanne ~]# mkfs.ext3 /dev/mapper/encriptado

Y ahora ya puedes crear el punto de montaje y montarlo:

[root@jeanne ~]# mkdir /mnt/lacie_backup
[root@jeanne ~]# mount /dev/mapper/encriptado /mnt/lacie_backup -t ext3 -o rw

El siguiente paso sería meter una entrada nueva en tu fstab:

/dev/mapper/encriptado  /mnt/lacie_backup  ext3  user,noauto,rw  0 0

Con esto, la configuración ya está.

A partir de ahora, para acceder a tu partición metiendo la contraseña a mano (sin fichero de contraseñas) tendrás que ejecutar, también a mano:

[root@jeanne ~]# cryptsetup luksOpen /dev/lacie_backup1 encriptado
(aquí pedirá la contraseña)
[root@jeanne ~]# exit
[lacofi@jeanne ~]$ mount /mnt/lacie_backup

Aunque si estás usando un fichero de contraseña en un lápiz USB, puedes meter los comandos en los scripts de inicio del sistema, de tal forma que si está el lápiz enchufado, la máquina desencripte y monte los directorios seguros automáticamente.

Y para desmontar:

[lacofi@jeanne ~]$ umount /mnt/lacie_backup
[lacofi@jeanne ~]$ su
password:
[root@jeanne ~]# cryptsetup remove encriptado
(mientras no hagas esto último, la partición seguirá estando accesible sin
contraseña)

Si usas un fichero de contraseñas encriptado con GnuPG, tendrías que hacer más o menos lo mismo. Para montar:

[root@jeanne ~]# gpg --decrypt /mnt/usbdisk/.clave_discoduro.txt 2>/dev/null |\
> cryptsetup luksOpen /dev/lacie_backup1 encriptado
(aquí pedirá la passphrase)
[root@jeanne ~]# exit
[lacofi@jeanne ~]$ mount /mnt/lacie_backup

Y para desmontar, igual que antes.

Otra opción para automatizar el proceso sería por ejemplo, entrar en /etc/udev/rules.d/10-local.rules, ir a la entrada que identifica el disco duro lacie_backup1 y añadir en esa entrada una regla tal que así:

RUN+="cryptsetup --key-file /mnt/usbdisk/.clave_discoduro.txt luksOpen /dev/lacie_backup1 encriptado"

Con lo que cada vez que enchufes el disco duro portátil en ese ordenador, se abrirán todos los cerrojos y quedará listo para montarlo (siempre y cuando esté metido el lápiz USB con las claves):

[lacofi@jeanne ~]$ mount /mnt/lacie_backup

Observa que ya ni siquiera necesitamos ser root.

Pero la mejor automatización es la que viene ya de serie en todas las distribuciones Linux actuales, que tienen luksOpen integrado en el sistema, de tal manera que si tienes encriptado un disco, será reconocido directamente en el arranque sólo configurando /etc/crypttab con las claves y /etc/fstab con el punto de montaje.

Así, puedes introducir en /etc/crypttab una línea tal que así:

# /etc/crypttab: mappings for encrypted partitions.
#
# Each mapped device will be created in /dev/mapper, so your /etc/fstab
# should use the /dev/mapper/ paths for encrypted devices.
#
# See crypttab(5) for the supported syntax.
#
# NOTE: Do not list your root (/) partition here, it must be set up
#       beforehand by the initramfs (/etc/mkinitcpio.conf). The same applies
#       to encrypted swap, which should be set up with mkinitcpio-openswap
#       for resume support.
#
#
#                                                                                                                          
encriptado	UUID=bb792154-e58e-4fd8-a2c0-ba3c8cb4cbd8	/mnt/usbdisk/.clave_discoduro.txt

Observa la última línea, donde se especifica el dispositivo mapper que estará asociado al disco, el UUID del disco y el fichero de claves. Esta configuración será leída en el arranque, después de montar todas las unidades, con lo que el dispositivo mapper estará listo y cargado para que que /etc/fstab pueda montarlo.

/dev/mapper/encriptado  /mnt/lacie_backup  ext3  user,noauto,rw  0 0

Que lo disfrutes.

Mi tarjeta PCMCIA USB 2.0 Conceptronic CSP480C2 no funciona con algunos dispositivos

Googleando un poco se llega facilmente a la conclusión de que la tarjeta PCMCIA (o sea, PCCard) Conceptronic CSP480C2 funciona perfectamente en Linux. Así está recogido por ejemplo en la Web de TuxMobil, pero aparte de eso no te dicen mucho más. En otros foros, encuentras que sí, que se supone que funciona pero que da algunos problemas variados.

Todo lo que voy a contar, vale también para la tarjeta PCMCIA Inves USB 2.0 que proporciona dos puertos, y que es reconocida por lspci como una NEC Corporation (ENE Technology Inc CB1410 Cardbus Controller)

Yo me compré una tarjeta de esas y, efectivamente, funcionaba pero me encontré con unos cuantos problemillas que me costó un poco solucionar. Concretamente, solo conseguía hacerla pillar un lápiz USB LG de 1Gb que usaba USB 2.0, pero ningún dispositivo USB 1.1 era detectado (ni siquiera un lápiz USB MemoryBird de 64 Mb que se supone debería funcionar con todo). Curiosamente, tampoco conseguí hacer que vaya un disco duro externo LaCie Mobile de 80 Gb que es también USB 2.0. Una cosa muy rara, eso de que solo funcione uno de los aparatos y ninguno más.

Bien, lo primero de todo es usar un Kernel recientito. Yo estoy con un 2.6.17 bajo Gentoo, pero seguramente servirá cualquier kernel de la serie 2.6. Si usas gentoo, NO debes instalar pcmcia-cs. Ese paquete está creado kernels 2.4.x, así que no debería usarse con ningún kernel 2.6. En lugar de eso, asegúrate de que estás usando hotplug y udev.

Este era el punto de partida cuando compré la tarjeta. La salida de dmesg al enchufarla decía:

(blablabla y aquí insertamos la tarjeta pcmcia)
pccard: CardBus card inserted into slot 0
yenta EnE: chaning testregister 0xC9, 00 -> 00
PCI: Enabling device 0000:03:00.2 (0000 -> 0002)
ACPI: PCI Interrupt 0000:03:00.2[C] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11
ehci_hcd 0000:03:00.2: EHCI Host Controller
ehci_hcd 0000:03:00.2: reset hcs_params 0x2395 dbg=0 cc=2 pcc=3 ports=5
ehci_hcd 0000:03:00.2: reset portroute 1 0 1 0 0
ehci_hcd 0000:03:00.2: reset hcc_params e806 thresh 0 uframes 256/512/1024 park
ehci_hcd 0000:03:00.2: park 0
ehci_hcd 0000:03:00.2: MWI active
ehci_hcd 0000:03:00.2: ...powerdown ports...
drivers/usb/core/inode.c: creating file '005'
ehci_hcd 0000:03:00.2: new USB bus registered, assigned bus number 5
ehci_hcd 0000:03:00.2: irq 11, io mem 0xd2002000
ehci_hcd 0000:03:00.2: reset command 080b02 park=3 ithresh=8 period=1024 Reset HALT
ehci_hcd 0000:03:00.2: init command 010009 (park)=0 ithresh=1 period=256 RUN
ehci_hcd 0000:03:00.2: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb5: default language 0x0409
usb usb5: new device strings: Mfr=3, Product=2, SerialNumber=1
usb usb5: Product: EHCI Host Controller
usb usb5: Manufacturer: Linux 2.6.15-kal ehci_hcd
usb usb5: SerialNumber: 0000:03:00.2
usb usb5: hotplug
usb usb5: adding 5-0:1.0 (config #1, interface 0)
usb 5-0:1.0: hotplug
hub 5-0:1.0: usb_probe_interface
hub 5-0:1.0: usb_probe_interface - got id
hub 5-0:1.0: USB hub found
hub 5-0:1.0: 5 ports detected
hub 5-0:1.0: standalone hub
hub 5-0:1.0: individual port power switching
hub 5-0:1.0: individual port over-current protection
hub 5-0:1.0: Single TT
hub 5-0:1.0: TT requires at most 8 FS bit times (666 ns)
hub 5-0:1.0: power on to power good time: 20ms
hub 5-0:1.0: local power source is good
hub 5-0:1.0: enabling power on all ports
hub 5-0:1.0: state 5 ports 5 chg 0000 evt 0000
drivers/usb/core/inode.c: creating file '001'

Al enfhufar el MemoryBird que no funcionaba, la salida de dmesg era idéntica, era como si no hubiera enchufado nada.

Y la salida de lspci al meter la tarjeta decía:

00:00.0 Host bridge: Intel Corporation 82855PM Processor to I/O Controller (rev 03)
00:01.0 PCI bridge: Intel Corporation 82855PM Processor to AGP Controller (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM USB UHCI Controller #1 (rev 03)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM USB UHCI Controller #2 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 83)
00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)
00:1f.1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 03)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03)
00:1f.5 Multimedia audio: Intel Corporation 82801DB/DBL/DBM AC'97 Audio Controller (rev 03)
00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM AC'97 Modem Controller (rev 03)
01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R250 Lf [FireGL 9000] (rev 01)
02:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80)
02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
02:02.0 Network controller: Intel Corporation PRO/Wireless LAN 2100 3B Mini PCI Adapter (rev 04)
02:03.0 CardBus bridge: ENE Technology Inc CB1410 Cardbus Controller
03:00.0 USB Controller: NEC Corporation USB (rev 43)
03:00.1 USB Controller: NEC Corporation USB (rev 43)
03:00.2 USB Controller: NEC Corporation USB 2.0 (rev 04)

Da la impresión de que la tarjeta pcmcia ha sido reconocida y que proporciona dos puertos USB 2.0, pero luego resulta que solo el lápiz USB 2.0 LG de 1Gb me funcionaba.

El problema es que si sigues las instrucciones habituales, tendrás activado el soporte EHCI y UHCI para USB, porque la mayoría de los USB actuales son UHCI, como ocurre por ejemplo en el portátil Highscreen CL50. Pero ahí es donde está el problema, porque resulta que la tarjeta PCMCIA usa el estándar OHCI, así que también tienes que activar el soporte de OHCI en tu kernel.

Vale, vamos a modificar tu kernel. ha de estar cofigurado para usar las Cardbus de 32 bits como ésta. Pero aparte de eso, tendrás que entrar en el apartado de USB y activar EHCI (para soporte de USB 2.0), UHCI (para soporte de los USB del portátil), y OHCI (para soporte de los USB de la tarjeta PCMCIA). Tal que así:

Haz un "make menuconfig" y elige:

Bus Options (PCI, PCMCIA, EISA, MCA, ISA) -->
  PCCARD (PCMCIA/CardBus) suport -->
	 <M> PCCard (PCMCIA/Cardbus) support
	 [ ]	Enable PCCARD debugging
	 <M>	16-bit PCMCIA support
	 [*]		Load CIS updates from userspace
	 [ ]		PCMCIA control ioctl
	 ---	32-bit Cardbus support
	 ---	PC-card bridges
	 <M>	CardBus yenta-compatible bridge support
	 <M>	Cirrus PD6729 compatible bridge support
	 <M>	i82092 compatible bridge support
	 <M>	i82365 compatible bridge support
	 <M>	Databook TCIC host bridge support
Device Drivers -->
  USB Support -->
	 <M>	Support for Host-side USB
	 [ ]		USB verbose debug messages
	 ---		Miscellaneous USB options
	 [*]		USB device filesystem
	 [*]		Enforce USB bandwidth allocation
	 [*]		Dynamic USB minor allocation
	 [ ]		USB selective suspend/resume and wakeup
	 ---		USB Host Controller Drivers
	 <*>		EHCI HCD (USB 2.0) support
	 [ ]			Full speed ISO transactions
	 [ ]			Root Hub Transaction Translators
	 < >		ISP116X HCD support
	 <M>		OHCI HCD support
	 <*>		UHCI HCD (most Intel and VIA) support
	 < >		SL811HS HCD support
	 ---		USB Device Class drivers
	 < >		USB Modem (CDC ACM) support
	 < >		USB Printer support
	 ---	NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
	 ---	may also be needed; see USB_STORAGE Help for more information
	 <*>	USB Mass Storage support
	 [ ]		USB Mass Storage verbose debug
	 [*]		Datafab Compact Flash Reader support
	 [ ]		Freecom USB/ATAPI Bridge support
	 [ ]		ISD-200 USB/ATA Bridge support
	 [ ]		Microtech/ZiO! CompactFlash/SmartMedia support
	 [ ]		USBAT/USBAT02-based storage support
	 [ ]		SanDisk SDDR-09 (and other SmartMedia) support
	 [ ]		SanDisk SDDR-55 SmartMedia support
	 [ ]		Lexar Jumpshot Compact Flash Reader
	 [*]		Olympus MAUSB-10/Fuji DPC-R1 support
	 [ ]	The shared table of common (or usual) storage devices
	 ---	USB Input Devices
	 <*>	USB Human Interface Device (full HID) support
	 [*]		HID input layer support
	 [ ]			Enable support for iBook/PowerBook special keys
	 [ ]			Force feedback support (EXPERIMENTAL)
	 [*]		/dev/hiddev raw HID device support 

(Y el resto según tu hardware, generalmente todo desactivado)

Ahora recompila y rebota la máquina para usar el nuevo kernel. Puede que tengas que compilar (o emerger) algunos módulos extra para dejar las cosas listas.

Ahora, al insertar la PCCard deberíamos ver la salida dmesg:

(blablabla y aquí metemos la tarjeta pcmcia)
pccard: CardBus card inserted into slot 0
yenta EnE: chaning testregister 0xC9, 00 -> 00
PCI: Enabling device 0000:03:00.0 (0000 -> 0002)
ACPI: PCI Interrupt 0000:03:00.0[A] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11
PCI: Setting latency timer of device 0000:03:00.0 to 64
ohci_hcd 0000:03:00.0: OHCI Host Controller
drivers/usb/core/inode.c: creating file '005'
ohci_hcd 0000:03:00.0: new USB bus registered, assigned bus number 5
ohci_hcd 0000:03:00.0: created debug files
ohci_hcd 0000:03:00.0: irq 11, io mem 0xd2000000
ohci_hcd 0000:03:00.0: resetting from state 'reset', control = 0x0
ohci_hcd 0000:03:00.0: OHCI controller state
ohci_hcd 0000:03:00.0: OHCI 1.0, NO legacy support registers
ohci_hcd 0000:03:00.0: control 0x083 HCFS=operational CBSR=3
ohci_hcd 0000:03:00.0: cmdstatus 0x00000 SOC=0
ohci_hcd 0000:03:00.0: intrstatus 0x00000004 SF
ohci_hcd 0000:03:00.0: intrenable 0x8000001a MIE UE RD WDH
ohci_hcd 0000:03:00.0: hcca frame #0025
ohci_hcd 0000:03:00.0: roothub.a 0f000203 POTPGT=15 NPS NDP=3(3)
ohci_hcd 0000:03:00.0: roothub.b 00000000 PPCM=0000 DR=0000
ohci_hcd 0000:03:00.0: roothub.status 00008000 DRWE
ohci_hcd 0000:03:00.0: roothub.portstatus [0] 0x00000100 PPS
ohci_hcd 0000:03:00.0: roothub.portstatus [1] 0x00000100 PPS
ohci_hcd 0000:03:00.0: roothub.portstatus [2] 0x00000100 PPS
usb usb5: default language 0x0409
usb usb5: new device strings: Mfr=3, Product=2, SerialNumber=1
usb usb5: Product: OHCI Host Controller
usb usb5: Manufacturer: Linux 2.6.17-gentoo-r4 ohci_hcd
usb usb5: SerialNumber: 0000:03:00.0
usb usb5: uevent
usb usb5: configuration #1 chosen from 1 choice
usb usb5: adding 5-0:1.0 (config #1, interface 0)
usb 5-0:1.0: uevent
hub 5-0:1.0: usb_probe_interface
hub 5-0:1.0: usb_probe_interface - got id
hub 5-0:1.0: USB hub found
hub 5-0:1.0: 3 ports detected
hub 5-0:1.0: standalone hub
hub 5-0:1.0: no power switching (usb 1.0)
hub 5-0:1.0: global over-current protection
hub 5-0:1.0: power on to power good time: 30ms
hub 5-0:1.0: local power source is good
hub 5-0:1.0: no over-current condition exists
hub 5-0:1.0: state 7 ports 3 chg 0000 evt 0000
drivers/usb/core/inode.c: creating file '001'
PCI: Enabling device 0000:03:00.1 (0000 -> 0002)
ACPI: PCI Interrupt 0000:03:00.1[B] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11
PCI: Setting latency timer of device 0000:03:00.1 to 64
ohci_hcd 0000:03:00.1: OHCI Host Controller
drivers/usb/core/inode.c: creating file '006'
ohci_hcd 0000:03:00.1: new USB bus registered, assigned bus number 6
ohci_hcd 0000:03:00.1: created debug files
ohci_hcd 0000:03:00.1: irq 11, io mem 0xd2001000
ohci_hcd 0000:03:00.1: resetting from state 'reset', control = 0x0
ohci_hcd 0000:03:00.1: OHCI controller state
ohci_hcd 0000:03:00.1: OHCI 1.0, NO legacy support registers
ohci_hcd 0000:03:00.1: control 0x083 HCFS=operational CBSR=3
ohci_hcd 0000:03:00.1: cmdstatus 0x00000 SOC=0
ohci_hcd 0000:03:00.1: intrstatus 0x00000004 SF
ohci_hcd 0000:03:00.1: intrenable 0x8000001a MIE UE RD WDH
ohci_hcd 0000:03:00.1: hcca frame #001e
ohci_hcd 0000:03:00.1: roothub.a 0f000202 POTPGT=15 NPS NDP=2(2)
ohci_hcd 0000:03:00.1: roothub.b 00000000 PPCM=0000 DR=0000
ohci_hcd 0000:03:00.1: roothub.status 00008000 DRWE
ohci_hcd 0000:03:00.1: roothub.portstatus [0] 0x00000100 PPS
ohci_hcd 0000:03:00.1: roothub.portstatus [1] 0x00000100 PPS
usb usb6: default language 0x0409
usb usb6: new device strings: Mfr=3, Product=2, SerialNumber=1
usb usb6: Product: OHCI Host Controller
usb usb6: Manufacturer: Linux 2.6.17-gentoo-r4 ohci_hcd
usb usb6: SerialNumber: 0000:03:00.1
usb usb6: uevent
usb usb6: configuration #1 chosen from 1 choice
usb usb6: adding 6-0:1.0 (config #1, interface 0)
usb 6-0:1.0: uevent
hub 6-0:1.0: usb_probe_interface
hub 6-0:1.0: usb_probe_interface - got id
hub 6-0:1.0: USB hub found
hub 6-0:1.0: 2 ports detected
hub 6-0:1.0: standalone hub
hub 6-0:1.0: no power switching (usb 1.0)
hub 6-0:1.0: global over-current protection
hub 6-0:1.0: power on to power good time: 30ms
hub 6-0:1.0: local power source is good
hub 6-0:1.0: no over-current condition exists
hub 6-0:1.0: state 7 ports 2 chg 0000 evt 0000
drivers/usb/core/inode.c: creating file '001'
PCI: Enabling device 0000:03:00.2 (0000 -> 0002)
ACPI: PCI Interrupt 0000:03:00.2[C] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11
ehci_hcd 0000:03:00.2: EHCI Host Controller
drivers/usb/core/inode.c: creating file '007'
ehci_hcd 0000:03:00.2: new USB bus registered, assigned bus number 7
ehci_hcd 0000:03:00.2: reset hcs_params 0x2395 dbg=0 cc=2 pcc=3 ports=5
ehci_hcd 0000:03:00.2: reset portroute 1 0 1 0 0
ehci_hcd 0000:03:00.2: reset hcc_params e806 thresh 0 uframes 256/512/1024 park
ehci_hcd 0000:03:00.2: park 0
ehci_hcd 0000:03:00.2: MWI active
ehci_hcd 0000:03:00.2: ...powerdown ports...
ehci_hcd 0000:03:00.2: supports USB remote wakeup
ehci_hcd 0000:03:00.2: irq 11, io mem 0xd2002000
ehci_hcd 0000:03:00.2: reset command 080b02 park=3 ithresh=8 period=1024 Reset HALT
ehci_hcd 0000:03:00.2: init command 010009 (park)=0 ithresh=1 period=256 RUN
ehci_hcd 0000:03:00.2: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb7: default language 0x0409
usb usb7: new device strings: Mfr=3, Product=2, SerialNumber=1
usb usb7: Product: EHCI Host Controller
usb usb7: Manufacturer: Linux 2.6.17-gentoo-r4 ehci_hcd
usb usb7: SerialNumber: 0000:03:00.2
usb usb7: uevent
usb usb7: configuration #1 chosen from 1 choice
usb usb7: adding 7-0:1.0 (config #1, interface 0)
usb 7-0:1.0: uevent
hub 7-0:1.0: usb_probe_interface
hub 7-0:1.0: usb_probe_interface - got id
hub 7-0:1.0: USB hub found
hub 7-0:1.0: 5 ports detected
hub 7-0:1.0: standalone hub
hub 7-0:1.0: individual port power switching
hub 7-0:1.0: individual port over-current protection
hub 7-0:1.0: Single TT
hub 7-0:1.0: TT requires at most 8 FS bit times (666 ns)
hub 7-0:1.0: power on to power good time: 20ms
hub 7-0:1.0: local power source is good
hub 7-0:1.0: enabling power on all ports
ohci_hcd 0000:03:00.0: suspend root hub
hub 7-0:1.0: state 7 ports 5 chg 0000 evt 0000
drivers/usb/core/inode.c: creating file '001'
ohci_hcd 0000:03:00.1: suspend root hub

Wow!. Observa que la salida dmesg es muuucho más larga, y aparecen múltiples referencias a OHCI.

Y si ahora conectamos un MemoryBird aparece:

(lo de antes y ahora, además:)
hub 7-0:1.0: state 7 ports 5 chg 0000 evt 0002
ehci_hcd 0000:03:00.2: GetStatus port 1 status 001803 POWER sig=j CSC CONNECT
hub 7-0:1.0: port 1, status 0501, change 0001, 480 Mb/s
hub 7-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x501
ehci_hcd 0000:03:00.2: port 1 full speed --> companion
ehci_hcd 0000:03:00.2: GetStatus port 1 status 003801 POWER OWNER sig=j CONNECT
hub 5-0:1.0: state 7 ports 3 chg 0000 evt 0000, resume root
ohci_hcd 0000:03:00.0: wakeup
hub 5-0:1.0: state 7 ports 3 chg 0000 evt 0000
ohci_hcd 0000:03:00.0: GetStatus roothub.portstatus [0] = 0x00010101 CSC PPS CCS
hub 5-0:1.0: port 1, status 0101, change 0001, 12 Mb/s
hub 5-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101
ohci_hcd 0000:03:00.0: GetStatus roothub.portstatus [0] = 0x00100103 PRSC PPS PES CCS
usb 5-1: new full speed USB device using ohci_hcd and address 2
ohci_hcd 0000:03:00.0: GetStatus roothub.portstatus [0] = 0x00100103 PRSC PPS PES CCS
usb 5-1: ep0 maxpacket = 8
usb 5-1: default language 0x0409
usb 5-1: new device strings: Mfr=1, Product=2, SerialNumber=3
usb 5-1: Product: Memorybird
usb 5-1: Manufacturer: Fujitsu
usb 5-1: SerialNumber: 171A1A0D0323
usb 5-1: uevent
usb 5-1: configuration #1 chosen from 1 choice
usb 5-1: adding 5-1:1.0 (config #1, interface 0)
usb 5-1:1.0: uevent
usb-storage 5-1:1.0: usb_probe_interface
usb-storage 5-1:1.0: usb_probe_interface - got id
scsi1 : SCSI emulation for USB Mass Storage devices
drivers/usb/core/inode.c: creating file '002'
hub 5-0:1.0: state 7 ports 3 chg 0000 evt 0002
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
  Vendor: Fujitsu   Model: Memorybird        Rev: 1.05
  Type:   Direct-Access                      ANSI SCSI revision: 00
SCSI device sdb: 128000 512-byte hdwr sectors (66 MB)
ohci_hcd 0000:03:00.0: urb cf9700c0 path 1 ep1in 93120000 cc 9 --> status -121
sdb: Write Protect is off
sdb: Mode Sense: 43 00 00 00
sdb: assuming drive cache: write through
SCSI device sdb: 128000 512-byte hdwr sectors (66 MB)
ohci_hcd 0000:03:00.0: urb cf9700c0 path 1 ep1in 93120000 cc 9 --> status -121
sdb: Write Protect is off
sdb: Mode Sense: 43 00 00 00
sdb: assuming drive cache: write through
 sdb: sdb1
sd 1:0:0:0: Attached scsi removable disk sdb
sd 1:0:0:0: Attached scsi generic sg1 type 0
usb-storage: device scan complete

Evidentemente, lo reconoció. Si montas la unidad sdb1, verás que funciona y puedes acceder normalmente a los datos. Y por supuesto, puedes combinar lo que sabes de udev y de autofs para que todo esto se haga automáticamente, solo metiendo el MemoryBird (o lo que sea) en el puerto USB de la tarjeta Conceptronic.

Ahora deberían funcionar todos los dispositivos USB 2.0 y 1.1 en nuestra PCCard, o sea que la tarjeta funciona, tal y como dice TuxMobil. Pero algunos discos duros externos como el Lacie Mobile de 80 Gb no funcionarán porque necesitan una fuente de alimentación extra, cosa que no ocurre con el puerto USB propio del portátil. Enchufa el disco duro al USB del portátil y ya está, pero si necesitas conectarlo a la PCMCIA por narices, entonces necesitas usar un cable suplementario para alimentación eléctrica. Lo disfrutes :-).

Gestión dinámica de los dispositivos con udev

Actualmente el kernel linux ha migrado hacia el sistema UDEV, que ha sustituido por completo a DEVFS. Por decirlo en cinco palabras: ES EL MOMENTO DE MIGRAR, si es que no lo has hecho ya.

Y francamente, UDEV es muy superior a DEVFS. Merece la pena el esfuerzo. ¿Para qué, te preguntarás?. Bien, UDEV gestiona los dispositivos que aparecen en la carpeta /dev, pero lo hace dinámicamente, creando y destruyendo dispositivos según el kernel los necesite o no, y apoyándose para ello en hotplug, que hace de correveidile entre los eventos del kernel y el espacio de usuario.

UDEV es una gozada, por ejemplo porque permite gestionar de forma rigurosa los discos USB, dandoles nombres personalizados, que no dependen del orden en que los hemos enchufados, sino de su número de serie interno, o su marca, o algo que los identifica físicamente. Ya no tienes que buscar si tu Memorybird se ha instalado como /dev/sda1 o como /dev/sdb1: ahora siempre será /dev/memorybird. (!). Ya no tienes que volverte root (o usar sudo) para usar ese Dongle USB Bluetooth: ahora el dispositivo se creará perteneciendo al grupo que quieras, y con los permisos que quieras.

La instalación está bien documentada, tanto en sistemas linux inespecíficos como en Gentoo. Para convertir tu viejo sistema en una máquina UDEV, puedes leer las mejores instrucciones disponibles en la página de decibels. Si quieres jugar de verdad con las reglas y personalizar tu sistema, te recomiendo el manual de Daniel Drake, muy útil, clarito y sencillo de leer. A estas dos páginas me remito. Lo que te pongo a continuación no es mas que un montón de notas que tomé de ellas, una especie de traducción simplicada y libre. ¿Vamos allá?

UDEV: la instalación

Bien, pues debes entender en primer lugar que UDEV sustituye a DEVFS en el espacio de usuario, y para ello se apoya en sysfs y hotplug. UDEV crea y destruye las entradas /dev basandose en la configuración del sistema. Lo hace mirando los eventos de hotplug y leyendo la información sobre estos eventos a través de sysfs. Los pasos a seguir para la distribución Gentoo son:

Introducción e instalación de nuevo kernel

Lo primero es crear un kernel apropiado. Se puede compilar simultáneamente UDEV y DEVFS en ese kernel, y luego elegir qué es lo que va a funcionar, simplemente poniendo opciones al arranque (las opciones son: devfs o udev). Eso sí, nunca, nunca se debe activar en el kernel la opción «Enable Devfs to automatically mount at Boot».

Bien. Se debe activar:

Bus options (PCI, PCMCIA, EISA, MCA, ISA)
	[*] Support for hot-pluggable devices
File systems
	Pseudo filesystems
		[*] /proc file system support
		[*] /dev file system support (OBSOLETE) (esto es devfs!)
		[*] /dev/pts file system for Unix98 PTYs (a partir de 2.6.4 no está)
		[ ]	/dev/pts Extended Attributes
		[*] Virtual memory file system support (former shm fs)
		[ ] HugeTLB file system support

A partir de la versión 2.6.13 del kernel, la opción «/dev file system support (OBSOLETE)» ya ni siquiera aparece: en esos kernels solo podremos usar UDEV.

Si usas un kernel menor que ese, se puede compilar DEVFS en el kernel, y luego elegir mediante opciones boot (en Lilo), si vamos a arrancar con DEFVS o UDEV. Sin embargo, los cambios que se hagan en DEVFS no serán reflejados en UDEV. La única forma en que se pueden salvar los cambios de DEVFS a UDEV es usando /lib/udev-state/devices.tar.bz2. Si prefieres usar un UDEV puro entonces ningún cambio que hagas en DEVFS será recuperable cuando arranques en UDEV, así que si quieres hacer cambios en tus dispositivos UDEV tendrás que probar a añadirlos en /etc/udev/rules.d/10-local.rules. Debes crear este script, no deberías nunca editar 50-udev.rules.

Emerge UDEV

Una vez que tienes el kernel, hay que hacer un «emerge udev». Esto implica hacer también un «emerge hotplug», porque es una dependencia. Si no usas Gentoo, deberías comprobar cómo se instala udev y hotplug en tu sistema. Seguramente tendrás que hacer un apt-get o usar rpm.

Añadir HOTPLUG al boot runlevel

En Gentoo tienes que añadir Hotplug al boot runlevel mediante «rc-update add hotplug boot». Deberías comprobar que no tienes Hotplug en el default runlevel (rc-update show), porque si es así deberías quitarlo de ahí mediante «rc-update del hotplug default». En otras distribuciones Linux tienes que añadir Hotplug al runlevel para que se ejecute automáticamente en el arranque.

El /Sys

Gentoo debería ahora crear /sys para montar sysfs ahí. Si no es así, deberías crear tú la carpeta /sys manualmente.

El /etc/fstab

Gentoo puede ahora manejar el montaje de devpts y sys. Por eso ya no tienes que añadir ninguna entrada al respecto en /etc/fstab (los kernels modernos ya no lo hacían). En lugar de eso, el trabajo lo hará ahora el script /sbin/rc. Puedes chequearlo con «df -a». Si tienes entradas que se refieran a devpts y sys, es seguro retirarlas ahora de tu /etc/fstab. Si después tienes problemas con devpts o sys y no se montan o no eres capaz de abrir una sesión de consola, probablemente deberías mirar otras posibles causas.

¿Y ahora?

Bien, llegados a este punto podrías creer que si tienes udev, sysfs, y hotplug instalados y funcionado. Pues no. Hasta que sysfs esté montado, /dev montado en tmpfs y hotplug arrancado, realmente no has hecho nada. Puede que veas cambios en /sys, si añades o quitas dispositivos, pero el sistema no está haciendo nada con esta información. ¿Qué es lo que falta?.

Baselayout

Lo siguiente que necesitas es «emerge baselayout», que contiene los init scripts necesarios para arrancarlo todo.

Hay un archivo que deberías comprobar que existe: /lib/udev-state/devices.tar.bz2, que es donde se guarda el actual estado de /dev desde tmpfs cuando reseteas o apagas.

La verdad es que salvar el estado de /dev, va en contra de la filosofía de UDEV, porque se supone que debe ser un sistema de archivos dinámico que crea solo los dispositivos del sistema que necesita. Si los salvas, estarán ahí la próxima vez que arranques, los necesites o no. La razón de hacer esto, es porque al principio solo se creaban dispositivos muy básicos, pero hoy en día UDEV ya ha evolucionado mucho y se crean toda clase de dispositivos, con lo que es posible instalar un sistema UDEV puro. Bien… todavía hay algunos problemas con esto, pero se pueden arreglar con algunos atajos aquí y allá. Si te sirve de algo, te diré que yo he instalado un UDEV puro en mi ordenador y no he tenido ningún problema con un Kernel 2.6.12-gentoo-r6.

En algún momento en el futuro, seguramente Gentoo dará el paso y eliminará devices.tar.bz2. Será cuando UDEV esté ya totalmente perfeccionado y, francamente, tal y como me ha ido a mí, yo diría que lo harán en menos de un año.

Asegúrate de poner los archivos de configuración adecuados en el sitio correcto ejecutando «etc-update». Si no lo haces, no se salvarán tus dispositivos /dev en el archivo devices.tar.bz2. Incluso si planeas usar un sistema puro UDEV, seguirás necesitando esos scripts.

Editar los scripts

Suponiendo un sistema «adecuadamente actualizado», tienes que editar /etc/conf.d/rc y ajustar:

RC_DEVICES="auto"
RC_DEVICE_TARBALL="yes" (o "no", si quieres un UDEV puro como yo).

¿Qué significa «adecuadamente actualizado»?. Bueno:

  1. Un kernel más o menos recientito. Yo lo configuré todo para un kernel 2.6.11-gentoo-r11 y comprobé que no funcionaba nada bien: los dispositivos solo se creaban si ejecutaba a mano «udevstart», y no seguían las reglas personalizadas, se creaban como les daba la gana. Con esa misma configuración, cambié a un kernel 2.6.12-gentoo-r6 y todo empezó a funcionar como la seda, así que ya lo sabés: más o menos por ahí está el límite.
  2. Un baselayout superior a 1.8.6.13-r1.
  3. Un UDEV superior a 024-r1.

No son unos grandes requisitos. Todos ellos pueden conseguirse simplemente actualizando las distribuciones Linux principales.

Si no puedes iniciar una consola

En un sistema puro UDEV es porque no se crea /dev/console y /dev/null. Debes crear manualmente ambos dispositivos:

cd /dev
mknod -m 660 console c 5 1
mknod -m 660 null c 1 3

En el caso de estar actualizado a una Gentoo 2005.1 como la mía cuando me pasé a UDEV, todos los dispositivos se crearon correctamente, incluyendo /dev/console y /dev/null

Menú lilo

Tienes dos opciones:

  1. No arrancar devfs, y se usará udev: añade la opción gentoo=nodevfs
  2. No arranquar udev, y se usará devfs: añade la opción gentoo=noudev

Por ejemplo, con una entrada en lilo.conf tal que así:

image=/boot/vmlinuz-2.6.12-kal
  label=Gentooza
  append="gentoo=nodevfs"
  read-only
  root=/dev/hda3

Reset

Ahora deberías poder resetear y comprobar tu sistema UDEV. Deberías poder ver en el arranque algo así:

Mounting /dev for udev ...
Configuring system to use udev ...
	Populating /dev with device nodes ... (si lo activaste con tarball)
	Setting /sbin/udevsend as hotplug agent ... (dependiendo de versión udev)

Y ahora, deberías crear reglas personalizadas para tus dispositivos removibles. ¡La diversión empieza ahora!. Que lo disfrutes. :-)

¿Cómo solucionar el famoso bloqueo del «iPAQ File Store»?

El bloqueo del «iPAQ File Store» es un fallo de software que aparece en muchas iPAQ, pero sobre todo en la PDA modelo HP iPAQ Rx3715, porque al contrario que otras PDAs tiene un iPAQ File Store bastante grande que se suele utilizar de forma intensiva. Pero en realidad, el fallo no solo ocurre en la Rx3715 sino que puede aparecer en cualquier iPAQ que tenga este sistema de almacenamiento.

El iPAQ File Store suele funcionar perfectamente y con muchas ventajas: es un espacio de almacenamiento siempre disponible y además muy rápido, casi tanto como la propia RAM de la PDA, con lo que es ideal para instalar ahí los programas dejando libre la siempre preciosa memoria principal. Pero los problemas comienzan cuando intentes grabar ahí un fichero que por su tamaño no cabe. Esto, que parece una tontería, desencadena un infierno que deja colgada la PDA. Si haces un Soft Reset, verás que puedes leer los datos de la «iPAQ File Store» sin problemas, pero el sistema de escritura en disco se ha corrompido por completo: no podrás grabar nada, ni modificar ningún fichero, ni tampoco formatear la unidad. La iPAQ File Store se ha vuelto sencillamente inservible, y tu PDA se colgará por completo en cuanto intentes grabar o modificar algo de su contenido. Es más, si por la configuración que tienes metida en tu máquina resulta que la PDA debe escribir algo ahí en el arranque, te encontrarás con que no puedes ni siquiera resetearla (se colgará nada más reiniciar), y te verás obligado a hacer un reseteo por hardware (Hard Reset), con lo que perderás todos tus datos y todos los programas instalados.

Pero los problemas no acaban ahí, claro. La corrupción del sistema de escritura sobrevive a cualquier tipo de reseteo, tanto Software como Hardware. Eso significa que la «iPAQ File Store» está perdida y seguirá dañada hagas lo que hagas, tanto despues de un Soft Reset como Hard Reset. Hasta donde yo sé, la Hewlett Packard no sabe cómo solucionar el problema.

La leche, diras tú, pero ¿este problema tiene solución?. La verdad es que sí. Y debo decir que no es un fallo de la Rx3715, ni de ningún producto de la Hewlett Packard. Es un fallo de la mielda de Windows CE Mobile 2003 que traen de serie. Es un fallo de Microsoft. Y eso me lleva a una pequeña reflexión:

Me consta, por los foros que he recorrido en busca de soluciones, que el modelo Rx3715 fue muy criticado, incluso denostado. Pero es bastante injusto. Lo cierto es que la Rx3715 fue en su día una buena PDA, incluso excelente, con un montón de ventajas y características avanzadas a un precio muy bajo para un producto de esta índole. Y debo decir también que el Servicio de Asistencia Técnica de Hewlett Packard a mi me ha funcionado perfectamente y han hecho lo que han podido para solucionarme todos mis problemas con el aparato. Pero la máquina tiene un defecto muy grave que sobrepasa a la propia HP: Viene con Microsoft Windows.

Pero desgraciadamente, ni siquiera actualizar la ROM (freir la ROM del aparato para dejarlo como vino de fábrica) soluciona el bloqueo del «iPAQ File Store». Para eso hace falta un procedimiento un poquito más complejo: instalar la actualización de la ROM, sí, pero en OTRO idioma, no en castellano. Y luego, repetir la maniobra por segunda vez para conseguir el idioma español. El procedimiento exacto lo saqué de los foros de la Web IpaqHQ Desde aquí quiero darles las gracias (y un gran abrazo) a los chicos que participaron en el hilo «HELP! ROM doesn’t respond – Fixing ROM Guidance», de IpaqHQ, especialmente a Ricouk, el primero en describir el procedimiento que a mí me ha funcionado. Pero también a D-Meter, el primero en describir una solución que ya funcionaba en algunas PDA. Y también a los miembros de ese misterioso foro ruso que mencionaba D-Meter (al parecer fueron ellos los que lo encontraron y D-Meter se encargó de hacerlo público y de guiar a los primeros interesados del foro IpaqHQ). Y en fin, de todos ellos es el mérito, no mío. :-)

Cuando encontré descrito el procedimiento en Internet, se usaba el idioma alemán para reparar una PDA en inglés. Seguramente funcionaría también usando el idioma inglés para reparar una PDA española. En cualquier caso, yo decidí no arriesgar y reparar mi PDA usando también el idioma alemán, como ellos. Tú mismo, por ejemplo, si quieres probar con el inglés.

ATENCIÓN, ATENCIÓN. Este procedimiento se basa en freir la ROM de tu iPAQ Rx3715. Es un procedimiento potencialmente peligroso, puede anular tu garantía y NO deberías utilizarlo si no estás de acuerdo en asumir los riesgos. Declino por completo toda responsabilidad sobre lo que ocurra: eres tú quien debe asumirlo. Es tu PDA, tu dinero y tus datos. Yo solo te cuento algo que le ha funcionado a mucha gente, y a mí mismo, pero que no necesariamente ha de funcionarte a tí. Tu verás lo que haces, majete, que ya eres mayorcito. Y si no lo eres, deberías pedirle consejo a tu papá. ¿Vale?. ¿VALE?. Pues eso.

El procedimiento es así:

  1. Vete a la página de descargas de HP y bájate las actualizaciones de la ROM para los idiomas alemán y castellano. Son unos 23 Mb cada uno. Guarda ambos ficheros en tu ordenador. Copialos a tu partición Windows (deberías tener una, con ActiveSync instalado).
  2. Resetea tu ordenador y arranca con Windows. Enchufa la PDA a la base USB y espera a que esté sincronizada.
  3. ATENCIÓN, ATENCIÓN, la base USB NO DEBERÍA estar conectada a un HUB, sino directamente al puerto USB del ordenador. Si estás conectado a traves de un HUB, el procedimiento fallará y dejará dañada tu PDA. Esta advertencia está especificada claramente en la Web de HP, asi que estás avisado.
  4. Ejecuta el fichero con la versión española. Cuando te pregunte si deseas comenzar la instalación automáticamente, cancela. Esto descomprimirá el fichero en un directorio aparte. Renombra esa carpeta a ESP-ROM. Haz una copia de esa carpeta y llamala ESP-ROM-orig
  5. Ejecuta el fichero con la versión alemana. Cuando te pregunte no se que, cancela otra vez. Renombra la carpeta resultante a GER-ROM. Haz una copia de esa carpeta a GER-ROM-orig.
  6. Entra en la carpeta GER-ROM y renombra el fichero d2b10111go.nbf a d2b10111eo.nbf.
  7. Entra en la carpeta ESP-ROM y ejecuta ROMUpdateUtility.exe.
  8. Te irán apareciendo una serie de pantallas en las que te pide que marques una casilla cuando hayas enchufado la PDA, te pregunta si estás seguro, etc. Son como cuatro o cinco pantallas. Memoriza su aspecto, especialmente la última, cuando dice que ha detectado un modelo de iPAQ en ESPAÑOL, y que va a instalar la nueva ROM del idioma ESPAÑOL. Memoriza el aspecto de esa pantalla, metela bien en tu cabezota (luego tendrás que reconocerla en alemán), pero no le des al Enter todavia.
  9. En este momento, el programa de instalación ya ha hecho todos los chequeos que necesitaba, asi que ahora ya puedes engañarle. Abre una ventana aparte y toma el fichero d2b10111eo.nbf que tienes en la carpeta GER-ROM, y copiala a la carpeta ESP-ROM. Te pedirá confirmación para sobreescribir el fichero. Acepta. Ahora regresa al programa de instalación y dile que continúe con la instalación. Allá va.
  10. Verás que la instalación tardará un poco en empezar. El icono de ActiveSync se cerrará y se encenderá de nuevo. La pantalla de la PDA se pondrá en blanco y dirá algo asi como «Wrong Image!!!». Espera y no te impacientes. Por Dios, no la quites de la base USB. Y reza porque no se vaya la luz en tu casa!!!. El procedimiento empezará, y verás una barra de progreso avanzando. Parecerá que se detiene y se queda colgada en el 90 %. Ahi se quedará durante un buen puñado de minutos: ES NORMAL. Por Dios, no la quites de la base USB. Sigue esperando. Cuando termine, la PDA se reseteará y arrancará de nuevo. Si, en perfecto alemán.
  11. Ahora toma tu PDA y echa un vistazo. Puedes entrar en el explorador de ficheros, entrar en el «iPAQ File Store» y ahi verás unicamente un directorio que se llama «Backup». Bórralo y comprobarás que no se cuelga. Efectivamente, el fallo del «iPAQ File Store» está reparado y ya funciona perfectamente. Pero ahora tienes que volver al idioma castellano, claro.
  12. Vuelve a enchufar la PDA en la base USB y en Windows borra los directorios ESP-ROM y GER-ROM. Ya no los necesitas y puedes liarte.
  13. Entra en ESP-ROM-orig y renombra el fichero d2b10111eo.nbf a d2b10111go.nbf. Ahora enra en GER-ROM-orig y arranca ROMUpdateUtility.exe. Volverán a aparecer todas las pantallas de antes pidiendo confirmaciones (pero ahora en alemán). Recuerda que «Weiter» significa «Continuar» y sigue adelante hasta que llegues a la cuarta o quinta pantalla, donde aparece por dos veces «DEUTCH», la que te dije que memorizaras su aspecto.
  14. Ahora abre otra ventana y copia el fichero d2b10111go.nbf que está en ESP-ROM-orig, sobreescribiendo el que está en GER-ROM-orig. Una vez hecho, continúa con la instalación de la ROM. Ocurrirá lo mismo que antes, pero ahora todo en alemán.
  15. No te comas las uñas cuando tarde en empezar. Ni grites de pánico cuando tarde un huevo al llegar al 90 %. Ya has pasado por eso, ¿recuerdas?. Pero sigue rezando porque no se vaya la luz en tu casa, precisamente ahora.
  16. Cuando termine, la PDA se reiniciará y volverá a aparecer, en castellano y con el «iPAQ File Store» reparado. Enhorabuena.

Ahora NO VUELVAS a grabar en el «iPAQ File Store» ningún fichero que sobrepase su capacidad. Este procedimiento que acabo de describirte borra el «iPAQ File Store», lo resetea, y permite usarlo de nuevo con normalidad. Pero NO resuelve el bug que provocó el bloqueo. Hasta la fecha, los sistemas operativos de Microsoft siguen teniendo el mismo fallo que ha causado todo esto (que chapuza, Dios mio, que chapuza), asi que si no tienes un poco de cuidado el bloqueo del «iPAQ File Store» volverá a aparecer una y otra vez. Procura tener siempre un espacio libre prudente para evitar accidentes. Y NUNCA, NUNCA grabes nada grande sin asegurarte antes de que cabe.

Dale las gracias a Microsoft y a Bill Gates por esta chapuza de sistema operativo que te han vendido en tu, por otro lado buena, PDA HP iPAQ Rx3715. Y dales las gracias tambien por el mal rato que te han hecho pasar.

¡¡INCREIBLE!!. Si intentas ahora el procedimiento de cambio temporal de idioma para solucionar el problema del bloqueo de tu iPAQ File Store, descubrirás que los enlaces a las páginas de HP donde estaban las actualizaciones de la ROM ya no funcionan. La Hewlett Packard ha retirado ese software porque resulta que el cambio de idioma viola la licencia de Microsoft y es, por tanto, ilegal. No importa que sea para solucionar un problema de funcionamiento del aparato, no importa que el cambio de idioma solo dure cinco minutos, lo justo para recuperar el iPAQ File Store que te vendieron. No importa nada de eso. Viola la licencia y por tanto te j*des.
La actitud de Hewlett Packard y de Microsoft es sencillamente indignante. :-(

Sincronizar directorios entre la PocketPC (Windows) y Linux

Hasta ahora hemos conseguido un sistema de noticias parecido a AvantGo, desatendido y automático, que se actualiza con solo conectar la PDA a la base USB (o, si ya está conectada, a una hora determinada de la noche). Pero ahora vamos a dar un gran paso adelante. Vamos a conseguir que nuestra PDA mantenga un directorio «espejo» en nuestro Linux, de tal forma que cualquier cambio que hagamos en él se refleje en la PDA en la próxima sincronización (o a la inversa).

Esto nos permite mucha libertad de movimientos. Por ejemplo, bastará con añadir una serie de ficheros MP3 a un directorio concreto de nuestro linux para que automáticamente se transfiera a la PDA en cuanto la enchufemos a la base. O, del mismo modo, todas las fotos que tomemos con la PocketPC serán copiadas a nuestro Linux. Y quien dice eso, dice todos los documentos que escribamos, en Pocket Word o Pocket Excel. Naturalmente, para que el efecto sea completa, podemos ajustar nuestra PDA para que grabe los documentos en formato Word 97 y Excel 97 en lugar del formato Pocket. Esto nos permitirá editar esos ficheros con OpenOffice, en Linux, sabiendo que cuando se sincronice, los cambios pasarán a la PDA. Y encima nos sirve de copia de seguridad.

Para ello usaremos dos programas: un servidor FTP que instalaremos en la PDA, y un cliente FTP que accederá desde el ordenador Linux.

Zona Servidor (PDA)

Para instalar un servidor FTP en la PDA necesitaremos un programa comercial que se llama ShareIt FTP. La licencia cuesta menos de 29 euros. Yo tengo la versión Pro, que cuesta algo menos de 50 euros y proporciona soporte para SSL/TLS, pero realmente no lo necesitas para lo que vamos a hacer ahora (aunque sería muy conveniente si pretendes establecer conexiones por WiFi). Bien, para lo que aquí nos interesa, la versión Lite funciona perfectamente y es muy barata.

Tienes que instalar ShareIt FTP en tu PDA. Después arranca el programa y haz que funcione permanentemente en la PDA. Ahora tienes que configurarlo. En la sección «System» debes ajustar «Directory» a «Root=\». Esto hará que toda la PDA esté disponible, desde la tarjeta SD hasta el «iPAQ File Store». En la sección «Users» debes añadir un usuario con contraseña, el que quieras, y luego desmarcar la casilla «Allow anonymous user» (esta opción sería muy peligrosa con esta configuración). En «IP Access» debes ajustar la política por defecto en «Deny», y luego añadir una única máquina a la que permitr el acceso: 192.168.131.201. Si quieres usar el WiFi tendrás que meter otra dirección, ya que el acceso por WiFi y por USB tienen direcciones distintas. En la sección «Misc» asegúrate de que el «Power Save Scheme» indica «Keep alive for active users». Ahora tienes que reiniciar el servidor FTP. Y ya está. Hemos terminado con los ajustes de la PDA.

Zona cliente (Linux)

En la máquina Linux necesitaremos el programa LFTP, un magnífico cliente FTP, disponible en casi todos los repositorios (incluido Gentoo) y que incluye dos características que nos son imprescindibles:

  1. El comando «mirror». Este comando copia toda una estructura de directorios, desde el ordenador remoto al local. Tiene una opción «–only-newer» que permite hacer un mirror incremental. También dispone de «mirror –reverse», que copia en dirección contraria, es decir, desde local a remoto.
  2. Ejecución en script. Esta caracteristica permite escribir todos los comandos que nos interesan en un script, y luego hacer que lftp funcione en forma automática y desatendida. Inicialmente pensado para subir una página web al servidor automáticamente, a nosotros nos sirve para sincronizar la PDA con nuestro Linux.

El autor de este programa es Alexander V. Lukyanov, que imagino que nunca pensó que pudiera servir para esto, pero lo cierto que es que ha hecho un cliente FTP magnífico, que permite hacer esto y mucho más. Caramba, es tan bueno que si buscas un cliente FTP o SFTP en modo texto, te lo recomiendo con entusiasmo. De hecho, es el cliente que yo sigo usando hoy en día para transferir ficheros entre mis máquinas y para subir la Web a mi servidor. Gracias, Alexander. ;-)

Bien, pero volviendo al tema, ahora tenemos que crear una estructura de directorios que sirva para almacenar el espejo de la ipaq que estará en nuestro linux. No tiene por qué ser idéntica a la de la PDA, porque lftp hará todo lo necesario para emparejar cada oveja con su pareja. :-)

   [lacofi@jeanette:~]$ mkdir ipaq
   [lacofi@jeanette:~]$ cd ipaq
   [lacofi@jeanette:~/ipaq]$ mkdir ifs #o sea "iPAQ File Store"
   [lacofi@jeanette:~/ipaq]$ mkdir sd #o sea "Tarjeta de almacenamiento SD"
   [lacofi@jeanette:~/ipaq/ifs]$ cd ifs
   [lacofi@jeanette:~/ipaq/ifs]$ mkdir datos
   [lacofi@jeanette:~/ipaq/ifs]$ cd ~/ipaq/sd
   [lacofi@jeanette:~/ipaq/sd]$ mkdir documentos fotos musica
   [lacofi@jeanette:~/ipaq/sd]$ mkdir personal profesional

Ahora tenemos que crear el script para lftp. Básicamente no son más que una serie de comandos FTP, escritos tal y como haríamos si estuvieramos conectados:

----------- Comienza script /etc/lftp-ipaq.cmd ----------
open -u lacofi,contraseña ipaq
cd pub
lcd /home/lacofi/ipaq
cd "/pub/Tarjeta de almacenamiento"
lcd /home/lacofi/ipaq/sd
cd "/pub/Tarjeta de almacenamiento/My Documents"
cd "/pub/Tarjeta de almacenamiento/My Documents/My pictures"
lcd /home/lacofi/ipaq/sd/fotos
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/Tarjeta de almacenamiento/My Documents"
lcd /home/lacofi/ipaq/sd
cd "/pub/Tarjeta de almacenamiento/My Documents/Personal"
lcd /home/lacofi/ipaq/sd/personal
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/Tarjeta de almacenamiento/My Documents"
lcd /home/lacofi/ipaq/sd
cd "/pub/Tarjeta de almacenamiento/My Documents/Profesional"
lcd /home/lacofi/ipaq/sd/profesional
mirror --only-newer --no-recursion
mirror --only-newer --no-recursion --reverse
cd "/pub/Tarjeta de almacenamiento/My Documents/Profesional/chuletas"
lcd /home/lacofi/ipaq/sd/profesional/chuletas
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/iPAQ File Store"
lcd /home/lacofi/ipaq/ifs
cd "/pub/iPAQ File Store/Datos"
lcd /home/lacofi/ipaq/ifs/datos
mirror --only-newer
mirror --only-newer --reverse
cd "/pub/Tarjeta de almacenamiento/Mi musica"
lcd /home/lacofi/ipaq/sd/musica
mirror --only-newer --reverse --delete-first
------------ Termina script /etc/lftp-ipaq.cmd ----------

Los comandos «lcd» cambian el directorio local. Los comandos «cd» cambian el remoto. Observad los comandos «mirror» y «mirror –reverse», así como la opción «–no-recursion». Todo esto ya depende de lo que vosotros necesiteis y querais sincronizar.

Observar que en el directorio «musica» no pongo ninguna orden «mirror –reverse» y sí una opción «–delete-first». Esto es porque aquí me interesa que la PDA actúe como esclava. Si borro un MP3 del ordenador, también se borrará en la PDA. Si lo añado en el ordenador, se añadirá en la PDA. Pero nada de lo que haga en la PDA se reflejará en el ordenador. Uso «–delete-first» y no «–delete» a secas, porque así se libera un montón de espacio en la PDA antes de hacer cualquier otra cosa. Para más detalles, tendreis que recurrir a las páginas man de lftp o al comando «help», que para eso están. ;-)

Mucho cuidadito con la opción «–delete». Para evitar problemas os recomiendo SIEMPRE usar trayectorias absolutas, no relativas (es decir, «lcd /home/lacofi/ipaq», y no «lcd ../ipaq». Esto es porque si calculais mal la jugada, entra dentro de lo posible que el programa FTP se ponga a recorrer toda la estructura de directorios de vuestro Linux y se ponga a borrar ¡TODOS VUESTROS FICHEROS!. A mí me ocurrió y os aseguro que el efecto es espectacular… Afortunadamente tenía copias de seguridad. Vosotros también las teneis, ¿verdad? ;-).

Vale. Pues ahora, para ejecutar un ftp desatendido basta con esto:

   [lacofi@jeanette:~]$ lftp -f /etc/lftp-ipaq.cmd

Vamos, que más fácil imposible. Ahora sólo teneis que incluir éste comando en vuestro crontab, en el script «subelo», o en ambos.

Con los cambios, el script subelo quedaría tal que así:

------------- Empieza script subelo ---------------------------
#!/bin/bash
LOG="/var/log/syncipaq.log"
FECHA=`date`
sleep 3

echo " " >> $LOG
echo "--- $FECHA ---" >> $LOG

pgrep -f "/usr/sbin/pppd call synce-device"
resultado=$?

if [ $resultado -eq 0 ]; then
  echo "La iPAQ esta conectada. Correcto." >> $LOG
  sleep 3
  for archivo in `find /home/lacofi/.plucker/*.pdb`
  do
    nombre=`basename $archivo`
    pcp $archivo ":/Tarjeta de almacenamiento/My Documents/$nombre.pdb"
    error=$?
    if [ $error -eq 0 ]; then
      echo "--> Transferido `basename $archivo.pdb` a la iPAQ" >> $LOG
    else
      echo "--> No pude subir `basename $archivo.pdb` a la iPAQ" >> $LOG
    fi
  done
  lftp -f /etc/lftp-ipaq.cmd
    error=$?
    if [ $error -eq 0 ]; then
      echo "Se han sincronizado los ficheros predeterminados" >> $LOG
    else
      echo "Hubo un error FTP" >> $LOG
    fi
else
  echo "No he detectado ninguna iPAQ!!" >> $LOG
fi
------------- Termina script subelo ---------------------------

Prescindir de AvantGo – Plucker

  1. El camino tortuoso
  2. El camino liso

1) El camino tortuoso

AvantGo es una red de páginas Web especialmente diseñadas para la navegación off-line en una PDA. Al conectar la PDA con la base USB, el ordenador principal (equipado con Windows) busca en la red los canales que nosotros hayamos especificado y los descarga a la PDA. El formato AvantGo intenta ahorrar espacio en la preciosa memoria de la PocketPC, por lo que las fotos son menos y más pequeñas, el texto intenta ir al grano, etc..

Bien, AvantGo tiene una estética muy cuidada, pero detrás se esconden dos problemas: es poco flexible, porque depende de canales predefinidos por los webmasters, y no hay (que yo sepa) ningún programa capaz de sincronizar nuestro AvantGo desde una máquina Linux. Accesoriamente, resulta que AvantGo es un sistema propietario, no libre, pero aunque no nos guste, no considero que eso sea un defecto en sí mismo.

La solución es sustituirlo, claro. Y poner en su lugar un sistema más flexible, que podamos configurar a nuestro gusto, y que sí pueda sincronizarse de forma desatendida desde Linux. La primera posibilidad que se nos viene a todos a la cabeza es Plucker.

Lo primero que necesitamos es el cliente a instalar en nuestra PDA. Plucker fue pensado y diseñado para Palm, así que para PocketPC de momento solo tenemos un cliente en fase alfa, Vade-Mecum.

Lo segundo que necesitamos es el servidor, el propio motor plucker. Os aconsejo que le echeis un buen vistazo a la documentación, que podeis bajaros desde la página de downloads. En el caso de Gentoo, podemos instalarlo simplemente con un «emerge plucker».

Ahora podeis usar plucker-desktop para configurar y organizar vuestros propios canales, de tal forma que la página web que vosotros especifiqueis se baje y se convierta a un fichero PDB concreto en vuestro disco duro. Sin embargo, no os recomiendo plucker-desktop, porque para eso hay otro programa mejor, Sunrise. Pero sí os puede ser útil el demonio Spider.py que se puede encontrar en /usr/lib/python2.3/site-packages/PyPlucker, aunque os recomiendo que lo linkeis a un sitio más accesible, porque si no es un peñazo.

# ln -s /usr/lib/python2.3/site-packages/PyPlucker/Spider.py \
> /usr/local/bin/Spider.py

Os recomiendo un «Spider.py –help» para que veais todas las opciones disponibles. Spider, tiene una gran ventaja sobre plucker-desktop: es un programa de línea de comando y desatendido, con lo que puede meterse en el crontab y olvidarse de él. ¿Vais captando?. La gracia está en crear un script tal que así:

------------ Comienza script actualiza_plucker ----------------
#!/bin/bash
Spider.py --pluckerhome=/home/lacofi/.plucker \
--pluckerdir=/home/lacofi/.plucker \
--doc-file=LibertadDigital \
--bpp=8 --maxdepth=3 --stayondomain \
-H http://movil.libertaddigital.com/pda

Spider.py --pluckerhome=/home/lacofi/.plucker \
--pluckerdir=/home/lacofi/.plucker \
--doc-file=BBCMundo \
--bpp=8 --maxdepth=3 \
-H http://www.bbcmundo.com/movil
------------ Termina script actualiza_plucker -----------------

De tal forma que cada vez que ejecutemos «actualiza_plucker», el demonio Spider.py busque y transforme las direcciones Web especificadas con la opción «-H». creando un fichero LibertadDigital.pdb y BBCMundo.pdb en el directorio /home/lacofi/.plucker, según el ejemplo que he puesto. Somos libres de añadir las opciones que queramos y las páginas que queramos, por lo que os recomiendo de nuevo que os leais «Spider.py –help» y la documentación de plucker.

Una vez hecho esto, es muy fácil meter este comando en un crontab para que se ejecute todos los días a las cuatro de la mañana, por ejemplo. ¿Os acordais de que en el script «synce» de hotplug, yo había metido una línea extra que llamaba a un script externo (sudo -u lacofi /opt/programas-usuario/subelo)?. Pues ahora podemos aprovecharnos de ellos editando el script tal que así:

------------- Empieza script subelo ---------------------------
#!/bin/bash
LOG="/var/log/syncipaq.log"
FECHA=`date`
sleep 3

echo " " >> $LOG
echo "--- $FECHA ---" >> $LOG

pgrep -f "/usr/sbin/pppd call synce-device"
resultado=$?

if [ $resultado -eq 0 ]; then
  echo "La iPAQ esta conectada. Correcto." >> $LOG
  sleep 3
  for archivo in `find /home/lacofi/.plucker/*.pdb`
  do
    nombre=`basename $archivo`
    pcp $archivo ":/Tarjeta de almacenamiento/My Documents/$nombre.pdb"
    error=$?
    if [ $error -eq 0 ]; then
      echo "--> Transferido `basename $archivo.pdb` a la iPAQ" >> $LOG
    else
      echo "--> No pude subir `basename $archivo.pdb` a la iPAQ" >> $LOG
    fi
  done
else
  echo "No he detectado ninguna iPAQ!!" >> $LOG
fi
------------- Termina script subelo ---------------------------

De esta forma, el script (que se ejecutará cada vez que coloquemos la PDA en la base USB), se encargará de subir automáticamente todos nuestros ficheros Plucker a la PDA (concretamente a la tarjeta SD), para que los tengamos disponibles cuando nos la llevemos al trabajo o a otro sitio. Adicionalmente, también podemos meter un comando «subelo» en nuestro crontab, a las 6 de la mañana (después de que haya terminado el comando actualiza_plucker), para que incluso sin mover la PDA, también se actualicen los archivos.

Un par de precisiones. Observad que el script «subelo» deja un registro, un LOG de lo que va haciendo, y lo coloca en «/var/log/syncipaq.log». Sin embargo, este script se ejecuta siempre como «lacofi», no como «root», por lo que para evitar «accesos denegados», tendremos que hacer, como root:

[root@jeanette:~]# touch /var/log/syncipaq.log
[root@jeanette:~]# chown lacofi:users /var/log/syncipaq.log
[root@jeanette:~]# exit

En el caso de Gentoo es fácil que nos encontremos con un pequeño problema: las imágenes de 8 bits no se ven, solo las de 1 bit. Esto es porque hay un bug, que se arregla metiendo las siguientes lineas en el fichero «~/.pluckerrc» (lo siento, no he conseguido que funcionen las imagenes de 16 bits):

[POSIX]
close_on_exit=0
close_on_error=0
palm1bit_graymap_file=/opt/maps_palm/palmgray1.map
palm2bit_graymap_file=/opt/maps_palm/palmgray2.map
palm4bit_graymap_file=/opt/maps_palm/palmgray4.map
palm8bit_stdcolormap_file=/opt/maps_palm/palmcolor8.map

Y después:

[lacofi@jeanette:~]$ su
contraseña:
[root@jeanette:/home/lacofi]# cd /opt
[root@jeanette:/opt]# mkdir maps_palm
[root@jeanette:/opt]# chmod a+rx maps_palm
[root@jeanette:/opt]# cd maps_palm
[root@jeanette:/opt/maps-palm]# cp /usr/share/doc/netpbm-10.20/palm* .
[root@jeanette:/opt/maps-palm]# gunzip palmgray1.map.gz
[root@jeanette:/opt/maps-palm]# gunzip palmgray2.map.gz
[root@jeanette:/opt/maps-palm]# gunzip palmgray4.map.gz
[root@jeanette:/opt/maps-palm]# gunzip palmcolor8.map.gz

¿Mas cosas que se pueden hacer?. Bueno, Spider.py no soporta RSS. Para eso necesitamos un programa externo que nos convierta el código RSS a HTML, para que Spider.py pueda a su vez convertirlo a PDB. Ese programa podría ser el que yo uso, hyperfeeder. No existe en los repositorios Gentoo, así que tendrás que compilarlo tú mismo, pero no tiene ningún misterio. La configuración es muy fácil, solo se necesita un fichero «~/.hyperfeeder/config» que contiene algo así:

DocumentRoot=/home/lacofi/.plucker/rss/
DocumentName=rss.html
IgnoreTimes
init2=NoticiasRSS

Y un fichero «~/.hyperfeeder/list» que contiene una lista de sitios:

http://www.pjorge.com/rss
http://www.ciencia-ficcion.com/noticias_sdcfcom.rss

Pero te recomiendo que leas las instrucciones en la página Web de hyperfeeder.

Después basta con ejecutar hyperfeeder desde crontab, pongamos a las dos de la mañana. A esa hora se creará un fichero /home/lacofi/.plucker/rss/rss.html que Spider.py podría usar más tarde. Eso sí, los colores que ajusta hyperfeeder para el texto son horrorosos, y no se ven bien en Vade-Mecum, así que te recomiendo cambiar el código (eh!, esto es código abierto!). Para eso, edita el fichero /usr/src/hyperfeeder/src/config.cc y busca la cadena «body vlink=». ¿Ya?. Pues donde pone:

body vlink=\"#FFCBCB\" text=\"#FEFFBB\" bgcolor=\"#00025C\"

Debería poner:

body vlink=\"#FFCBCB\" text=\"#00025C\" bgcolor=\"#FEFFBB\"

(Observa que he intercambiado los valores de «text» y «bgcolor»). Ahora ya puedes compilar.

Como ves, lo hemos organizado todo para esto: A las 2 de la mañana, hyperfeeder recoge las semillas RSS y las transforma en un único fichero HTML. A las 4 de la mañana, el script actualiza_plucker recoge diversas fuentes HTML (en Internet o locales, eso no importa), y lo transforma todo a varios ficheros Plucker. Por último, a las 6 de la mañana, se pondrá en marcha el script «subelo», que enviará a la PDA todos los ficheros plucker. Este último script también se pondrá en marcha cada vez que enchufemos la PDA a la base USB. Todo ello de forma automática y desatendida. No está mal, ¿no?.

2) El camino liso

Está bien, pero es un poco complicado de configurar, ¿no?. Para los interesados en complicarse poco la vida, hay otra solución más sencilla y de más calidad: Se trata de Sunrise. Sunrise es un programa Java, así que tendrás que instalar alguna versión de Java en tu linux. En el caso de Gentoo basta con un «emerge blackdown-jre».

Sunrise viene comprimido en un tar.gz que hay que descomprimir, por ejemplo en «/opt», con lo que quedará todo en un directorio «/opt/sunrise-0.42c» dependiendo de la versión. Pero Sunrise no funcionará sin más, por lo menos en Gentoo. Habrá que cambiar el propietario del directorio «/opt/sunrise-x.xxx» y de su contenido para que nos permita la lectura y escritura como usuarios normales. Además, deberíamos crear un script «/usr/local/bin/sunrise» que llame al programa de forma adecuada:

#!/bin/sh
cd /opt/sunrise-0.42c
./run.sh
cd -

Una vez ejecutado Sunrise tiene muchas ventajas sobre plucker-desktop. Funciona gráficamente, se configura con mucha facilidad y lee correctamente código Web, HTML local, así como RSS sin necesidad de hacer nada especial. Cuando se pulsa en cerrar queda en realidad en el System Tray tanto de KDE como de Gnome, funcionando en background. Y el aspecto final de los ficheros plucker que se crean es simplemente perfecto, incluidas las imágenes de 16 bits.

Su único inconveniente es que solo funcionará en un interfaz gráfico, no en línea de comandos, por lo que tienes que estar logado para que cumpla su función. Si tu máquina la usan dos personas (como es mi caso), y no siempre estás logado, entonces Sunrise solo proporcionará la actualización de la última vez que te deslogaste. No puedes ejecutarlo a altas horas de la madrugada en el crontab pero supongo que para la gran mayoría de la gente eso no es un inconveniente serio, así que a disfrutarlo se ha dicho.

Naturalmente, sigue siendo necesario un script subelo que se encargue de pasar los ficheros plucker creados a la PDA. Pero eso ya lo hemos visto y es muy fácil. :-)

El único problema que nos queda ahora es el cliente de la PDA, Vade-Medum. Es un cliente en fase alfa, y eso ya nos indica que es muy inestable y se cuelga a menudo. De hecho, esto es lo que ha terminado por decidirme a adoptar otra solución más fiable, hasta que ese tema haya quedado solucionado. Esa solución alternativa no es otra que iSilo.

Conectar una PocketPC (iPAQ Rx3715) con Linux

Se puede conectar de varias formas. Por infrarrojos, por Bluetooth, por Wifi… pero el método que buscas es sin duda la conexión USB, a través de la base, de tal forma que sólo colocándola ahí se ponga en marcha todo, de forma automática.

Naturalmente que puede hacerse. Pero no encontrarás ningún programa que lo haga todo por si mismo, así que tendrás que apañártelas para automatizarlo todo tú solito. No es complicado, pero requerirá sacarse de la manga unos cuantos trucos Linux, e instalar (y comprar) en tu PDA algún que otro programa propietario.

Lo primero que has de hacer es instalar SynCE.

En el caso de Gentoo Linux, el procedimiento a seguir se describe con mucho detalle en el Gentoo Wiki, así que con tu permiso no voy a repetirme.

Yo solo cambiaría el script /etc/hotplug/usb/synce, que en mi caso dejé así:

------------ Comienza script synce para hotplug -------------
#!/bin/bash

exec >>/var/log/synce

export time=`date +"%b %d %X"`
export uname=`uname -n`

echo "$time $uname $0 [$$]: añadido iPAQ"
(
for x in `seq 1 20`; do
        [ -c /dev/tts/USB0 ] && break
        sleep 1
done
if ! [ -c /dev/tts/USB0 ]; then
        echo "$time $uname $0 [$$]: Nodo /dev/tts/USB0 ¡no creado!"
        exit 1
fi
sudo -u lacofi dccm #aqui iria nuestro usuario, en mi caso lacofi.
synce-serial-abort
synce-serial-start
# a continuación, llamamos a un script que inicie la sincronización.
sudo -u lacofi /opt/programas-usuario/subelo #lacofi soy yo
) &

cat > $REMOVER <<END
exec >>/var/log/synce
export time=`date +"%b %d %X"`
export uname=`uname -n`
echo "$time $uname $0 [$$]: iPAQ eliminado"
sleep 15
synce-serial-abort 2>&1
END
chmod +x $REMOVER
-------------Termina script synce para hotplug --------------

Bien, en cualquier caso, no te hagas muchas ilusiones. Con esto lo que has conseguido es que cada vez que enchufes la PDA a la base USB se establezca una conexión TCP/IP estándar entre el ordenador Linux (con dirección IP local 192.168.131.102) y la PDA (con dirección IP remota 192.168.131.201). Pero poco más que eso, salvo quizás poder sincronizar la agenda con Evolution a través de MultiSync.

Sin embargo, aunque no lo parezca todo ha cambiado. Porque ahora la PDA y tu ordenador Linux pueden hablar entre sí, de igual a igual. Linux es un maestro del TCP/IP aunque la PDA requerirá algo más de ayuda. Pero el marco en el que se construirá todo un edificio de intercambio organizado de información está ya servido. Eso sí, si tu máquina Linux tiene un cortafuegos funcionando, has de recordar que tienes que permitir la entrada y salida a la dirección IP de la PDA, o no conseguirás nada. ;-)

¿El siguiente paso?. Pues prescindir de AvantGo y buscar un sistema de navegación Off-line más compatible con Linux. Las respuestas son dos: Plucker e iSilo. Pero eso será otro día. :-)

¿Funcionará ese scanner Canon Lide 30 en mi Linux?

Sí. Perfectamente. Solo necesitas instalar la última versión de los sane-backends. Con la 1.0.15 o superior será reconocido sin problemas, así que muy viejo tiene que ser tu sistema para no soportarlo. Eso sí, hay algunas cosas a tener en cuenta:

En el caso de Gentoo, tienes que hacer:

[root@claudia:~]# emerge sane-backends sane-frontends xsane 
[root@claudia:~]# emerge libusb hotplug

Sin embargo, debes añadir la opción «usb» a tu /etc/make.conf, en el apartado USE, o será incapaz de reconocerlo.

Y sea cual sea la distribución Linux que uses, también tendrás que tener soporte para USB, claro. No es imprescindible que tengas USB 2.0, pues funcionará incluso con USB 1.1, pero irá lentiiiiisimo. Te recomiendo encarecidamente USB 2.0. Y tendrás que cargar los módulos adecuados para activar el soporte, o recompilar tu kernel, si no los tienes. Estos módulos son usbcore, uhci-hcd (para 1.1) y ehci-hcd (para 2.0, pero necesita también el otro). Dmesg te dirá cómo reconoce al escaner:

hub 1-0:1.0: state 5 ports 4 chg fff0 evt 0002
ehci_hcd 0000:00:09.2: GetStatus port 1 status 001002 POWER sig=se0  CSC
hub 1-0:1.0: port 1, status 0100, change 0001, 12 Mb/s
hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x100
hub 3-0:1.0: state 5 ports 2 chg fffc evt 0002
uhci_hcd 0000:00:09.0: port 1 portsc 008a,00
hub 3-0:1.0: port 1, status 0100, change 0003, 12 Mb/s
usb 3-1: USB disconnect, address 4
usb 3-1: usb_disable_device nuking all URBs
usb 3-1: unregistering interface 3-1:1.0
usb 3-1:1.0: hotplug
usb 3-1: unregistering device
usb 3-1: hotplug
hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x100
hub 1-0:1.0: state 5 ports 4 chg fff0 evt 0002
ehci_hcd 0000:00:09.2: GetStatus port 1 status 001803 POWER sig=j  CSC CONNECT
hub 1-0:1.0: port 1, status 0501, change 0001, 480 Mb/s
hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x501
ehci_hcd 0000:00:09.2: port 1 full speed --> companion
ehci_hcd 0000:00:09.2: GetStatus port 1 status 003801 POWER OWNER sig=j  CONNECT
hub 3-0:1.0: state 5 ports 2 chg fffc evt 0002
uhci_hcd 0000:00:09.0: port 1 portsc 0093,00
hub 3-0:1.0: port 1, status 0101, change 0001, 12 Mb/s
hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101
usb 3-1: new full speed USB device using uhci_hcd and address 6
usb 3-1: ep0 maxpacket = 8
usb 3-1: new device strings: Mfr=1, Product=2, SerialNumber=0
usb 3-1: default language 0x0409
usb 3-1: Product: CanoScan
usb 3-1: Manufacturer: Canon
usb 3-1: hotplug
usb 3-1: adding 3-1:1.0 (config #1, interface 0)
usb 3-1:1.0: hotplug
hub 3-0:1.0: state 5 ports 2 chg fffc evt 0002

Ahora podemos usar dos comandos que nos mostrarán que SANE también detecta el escaner:

[15:12:01/0][root@claudia:~]# sane-find-scanner
  # No SCSI scanners found. If you expected something different, make sure that
  # you have loaded a SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x04a9 [Canon], product=0x220e 
	[CanoScan], chip=LM9832/3) at libusb:003:006
found USB scanner (vendor=0x05e3, product=0x0502 
	[USB Host To Host Bridge]) at libusb:003:005
  # Your USB scanner was (probably) detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.

  # Not checking for parallel port scanners.

  # Most Scanners connected to the parallel port or other proprietary ports
  # can't be detected by this program.
[15:12:01/0][root@claudia:~]# scanimage -L
device `plustek:libusb:003:006' is a Canon N1240U/LiDE30 USB flatbed scanner

Si ahora ejecutamos «xsane plustek» deberíamos poder escanear sin más problemas. Al menos como root.

Pero no como usario normal. Habitualmente, al instalar los backends de SANE, Gentoo crea un grupo especial que se llama «scanner». Podemos añadir ese grupo a los usuarios que queramos conceder permiso para usar el scanner. Para ello solo teneis que editar el fichero /etc/group y donde pone:

	scanner:!:501:

Debe poner:

	scanner:!:501:lacofi,maria

Los nuevos grupos y permisos de acceso solo estarán disponibles la próxima vez que nos logemos. Y solo queda un detalle: hay que poner en marcha el servicio hotplug. En el caso de gentoo:

[root@claudia:~]# /etc/init.d/hotplug start
[root@claudia:~]# rc-update add hotplug default
 * hotplug added to runlevel default
 * Caching service dependencies...
 * rc-update complete.

Prescindir de AvantGo – iSilo

Para PocketPC, el único cliente plucker que existe es Vade-Mecum, pero en el momento de escribir estas lineas sigue siendo software en fase alfa, y no es en absoluto tan fiable como uno desearía. Obviamente, la versión para Palm es otra cosa, como también lo es el programa plucker para Linux, pero el problema se plantea precisamente para usar nuestra PocketPC, donde Vade-Mecum se cuelga a menudo y se corrompe con excesiva facilidad. Esto ha sido lo que me ha decidido a pasarme a iSilo.

Sin embargo iSilo es un programa comercial. Eso significa que NO es código libre y NO es gratuito. Existe una versión freeware, pero su funcionalidad es tan limitada que no te lo recomiendo en absoluto. Hazme caso y comprate una licencia: cuesta menos de 20 euros para un programa que es magnífico, así que no tienes excusa.

iSilo viene con un lector (iSilo, propiamente dicho), que está diseñado para leer libros digitales (es un formato bastante común, por cierto). Pero también puede leer páginas Web reconvertidas a formato iSilo, puesto que una de sus virtudes es el amplio uso que hace de los hiperenlaces (ésta es una de las cosas que se pierden con la versión freeware, así que ya me dirás de qué te vale…).

Y naturalmente también viene con un par de «parser», un programa que toma páginas Web y las transforma en libros digitales que iSilo puede leer. Aquí hay que aplaudir sinceramente a los desarrolladores, porque uno de los «parser» que vienen incluidos es «iSiloXC», una versión linux que nos permite hacer todo lo necesario en nuestro ordenador, de forma desatendida y automática, justo lo que necesitamos. No, iSiloXC tampoco es un programa de código abierto, pero cumple su función y se distribuye (éste sí), gratuitamente y sin restricciones.

En la página Web de iSilo tienes un manual completo del funcionamiento de iSiloXC, aunque es un poco confuso porque parte del intríngulis del asunto es crear un fichero de configuración en código XML. Parece complicado según lo lees, pero en el fondo es una verdadera chorrada. Verás, para descargar y convertir la página Web de Libertad Digital, tienes que crear un fichero /etc/isilo_LibertadDigital.ixs tal que así:

------------ Comienza /etc/isilo_LibertadDigital.ixs ------------
<?xml version="1.0"?>
<iSiloXDocumentList>

  <iSiloXDocument>
  <Source>
    <Sources>
    <Path>http://movil.libertaddigital.com/pda<Path>
    </Sources>
  </Source>
  <Destination>
    <Title>LibertadDigital</Title>
    <Files>
    <Path>/home/lacofi/.plucker/isilo/LibertadDigital.pdb</Path>
    </Files>
  </Destination>
  <TextOptions>
    <PreUseMonospaceFont value="yes"/>
    <ProcessLineBreaks value="yes"/>
    <UseMonospaceFont value="yes"/>
    <MonospaceFontSize value="8"/>
    <TabStopWidth value="4"/>
  </TextOptions>
  <ImageOptions>
    <ResizeLargeImages value="no"/>
  </ImageOptions>
  <LinkOptions>
    <MaximumDepth value="3"/>
    <FollowOffsite value="yes"/>
    <MaximumOffsiteDepth value="1"/>
  </LinkOptions>
  <ImageOptions>
    <AltText value="exclude"/>
    <Images value="include"/>
    <MaximumWidth value="144"/>
    <MaximumHeight value="144"/>
    <Compress value="yes"/>
    <LossyQuality value="75"/>
    <BitDepth16 value="include"/>
  </ImageOptions>
  <TableOptions>
    <IgnoreTables value="no"/>
  </TableOptions>
  <TableOptions>
    <TextColors value="keep"/>
  </TableOptions>
  <MarginOptions>
    <LeftRightMargins value="keep"/>
  </MarginOptions>
  <DocumentOptions>
    <HomePageNumber value="1"/>
    <CharSet>Windows-1252</Charset>
  </DocumentOptions>
 <Messages>
    <Title>LibertadDigital</Title>
    <Version>v. 1.0</Version>
    <AuthorName>lacofi</AuthorName>
    <AuthorContact>micorreo@lacofi.net</AuthorContact>
    <AuthorNotes>Estamos en obras</AuthorNotes>
  </Messages>
  </iSiloXDocument>

</iSiloXDocumentList>
------------ Termina /etc/isilo_LibertadDigital.ixs ------------

Puede parecer complicado, pero fijaros bien. El fichero es casi siempre igual con muy pocas variaciones. De hecho, las líneas marcadas en cian son las únicas que habrá que cambiar para crear una configuración nueva. En resumen, se trata tan solo de especificar la dirección Web, el fichero de destino, el título, la profundidad, y si queremos o no que el robot de iSiloXC salga fuera del servidor buscando enlaces. A veces puede interesarnos algo más sofisticado, pero para eso tendreis que leer el manual de iSiloXC, que para eso está.

La gracia del asunto es que si ahora ejecutamos «isiloxc -x /etc/isilo_LibertadDigital.ixs», nuestro ordenador buscará en la Web la página especificada y la convertirá a formato iSilo. Nada más facil que meter este comando en nuestro crontab para que lo haga automáticamente a la hora que queramos. Y quien pone una página web, pone también un fichero HTML local, como por ejemplo uno creado mediante hyperfeeder, lo que significa acceder también a RSS.

O también podemos ir un poquito más lejos y crear una batería de ficheros /etc/isilo_????.ixs cada uno con la configuración para una página web. Y así, podemos meter en nuestro crontab un programa actualiza_isilo para que se ejecute a las 4 de la mañana todos los días, y que sería más o menos así:

------------ Comienza actualiza_isilo------------------------
#!/bin/bash
log=/var/log/syncipaq.log
html=/home/lacofi/ipaq/sd/personal/documentos
fecha=`date`

echo " " >> $log
echo "--- $fecha ----" >> $log
echo "Se esta ejecutando actualiza_isilo" >> $log

for archivo in `find /etc/isilo_*.ixs`
do
  nombre=`basename $archivo`
  titulo=`echo $nombre | awk -F _ '{ print $2 }' | awk -F . '{ print $1 }'`
  isiloxc -x $archivo
  error=$?
  echo "--> $titulo salio con codigo $error" >> $log
done

cd /home/lacofi/.plucker/paquete
rm -Rf *

for archivo in `find /etc/isilo_*.ixs`
do
  nombre=`basename $archivo`
  titulo=`echo $nombre | awk -F _ '{ print $2 }' | awk -F . '{ print $1 }'`
  ln -s ../isilo/$titulo.pdb $titulo
done
----------- Termina actualiza_isilo-------------------------

Y naturalmente, sigue haciendo falta un script «subelo» que se ejecute, pongamos, a las 7 de la mañana, y que se encargue de subir los ficheros iSilo a la PDA.

Y ya está. Con iSilo ahora podremos leer en nuestra PDA la prensa diaria actualizada (o las páginas Web que queramos), solo con sacarla de la base USB y llevárnosla donde queramos. Chulo, ¿no?.

Pero aún quedan muchas cosas por hacer. Sería muy práctico, por ejemplo, conseguir que determinados directorios de la PDA se sincronizasen con determinados directorios del ordenador, de tal forma que pudiesemos ver las fotos hechas con nuestra PDA en Linux, simplemente enchufando la PDA a la base USB. O también que baste con poner un fichero OpenOffice en un directorio concreto y que cuando enchufemos la PDA aparezca también ahí. O quien dice eso, dice una colección entera de ficheros mp3 para llevárnosla con nosotros. ¿No estaría bien algo así?. ;-)

Pues mañana os cuento cómo se hace, ¿vale?. :-P