Archivo de la etiqueta: udev

Debian no reconoce mi Kindle Touch

Si, si lo reconoce. Incluso podrás montarlo con el comando mount manualmente después de enchufar el kindle al ordenador por USB. Pero no será reconocido automáticamente ni será detectado por Calibre aunque lo hagas.

Para que haga todo eso necesitas instalar las mtp tools (apt-get install mtp-tools mptfs libmtp8). Y con eso ya está. Ahora debería reconocerlo de forma automática tanto Debian como Calibre en cuanto lo conectes por USB.

Teclado inalámbrico Logitech K350 en Ubuntu

Funciona «out of the box». Vamos, enchufar y listo.

Magnífico teclado. Pero algunas teclas multimedia (cinco, para ser más exactos) no hay forma de que funcionen en Linux. Las demás, o funcionan «out of the box» o lo hacen con una pequeña configuración extra.

No voy a inventar la pólvora. Daniel Klaffenbach ya te lo explica todo muy bien y bastante masticadito para que no te estreses. ¡Gracias, Daniel!.

Desde que cambié a UDEV, he perdido /dev/lp0

Si has cambiado a un sistema UDEV puro, puede que descubras que tu impresora paralelo deja de funcionar. Si rascas un poco, te encontrarás con que el dispositivo /dev/lp0 no existe.

En realidad no es un problema de UDEV, sino del kernel. Resulta que en los kernels más nuevos, se asume que no es necesario el módulo que controla el puerto paralelo. ¿Por qué?. Bueno, hoy en día la mayoría de las impresoras son USB, así que el puerto paralelo está un poco en desuso (solo se usa para eso, y ya ni para eso). Asi que el kernel no carga ese módulo salvo que se le indique específicamente con una órden:

[lacofi@jeanette ~]$ su
Password:
[lacofi@jeanette /home/lacofi]# modprobe lp

Una vez cargado el módulo, comprobarás que se ha creado correctamente el dispositivo /dev/lp0.

Si tienes una impresora paralelo, seguramente querrás que este módulo se cargue siempre en el arranque. Para eso, solo tienes que meterlo en el listado de /etc/modules.autoload.d/kernel-2.6:

# /etc/modules.autoload.d/kernel-2.6:  kernel modules to load.
# $Header: [bla bla bla] azarah Exp $
#
# Note that this file is for 2.6 kernels.
#
# Add the names of modules that you'd like to load when the system
# starts into this file, one per line.  Comments begin with # and
# are ignored.  Read man modules.autoload for additional details.

# For example:
# 3c59x

kqemu
lp # <-- ahí

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. :-)

¿Qué necesito para usar una cámara digital Olympus C60 Zoom con Linux?

Nada. :-)

Si tu linux soporta USB no necesitas nada, solo enchufar la cámara al puerto USB y cuando la Olympus te pregunte, pulsar el botón que dice «PC». La cámara estará en /dev/sda1 (por ejemplo), por lo que solo tienes que montarla para acceder a los datos.

Y aún puedes hacerlo más fácil. Yo tengo configurado el dispositivo /dev/sda1 en el autofs, por lo que solo tengo que enchufar la cámara y ella sola queda montada automáticamente, a todos los efectos convertida en un gran disquette. Si no sabes cómo configurar el autofs, lo tienes más arriba. Hasta donde yo se, probablemente todas las cámaras que admiten conexión USB, deberían funcionar correctamente con Linux así de fácil.

Si te has comprado el dispositivo MAUSB-100 de Olympus (una especie de lápiz USB para leer la tarjeta xD sin necesidad de la cámara), te diré que también funciona sin problemas, montandola igualmente en /dev/sda1 (u otro dispositivo del tipo /dev/sd*).

Y a continuación te pongo este script, que sirve para automatizar la copia de fotos, de la cámara a tu disco duro. El script se encarga de crear un subdirectorio con la fecha, y luego copia todas las fotos. Si estás en una consola de solo texto, los mensajes del script serán bastante espartanos, pero si estás en XWindow, te saldrá hasta un cuadro de progreso (usando Zenity). Solo tienes que enchufar la cámara, y ejecutarlo, vaya, incluso puedes poner un icono en tu escritorio. ;-)

--------------- Inicio de script "salvafotos" --------
#!/bin/bash
# Comprueba que estos dos directorios son correctos
origen=/mnt/usb/dcim/100olymp
destino=/datos/imagen/olympus

fecha=`date +%Y-%m-%d`
creado="no"
declare -i numero
declare -i fotos

# Se asume que el USB se automonta con autofs.
# Por eso no hay ninguna sentencia "mount /mnt/usb" ni similar.

# Subrutina para XWindow. Un programa independiente, en realidad
function xwindow {
	numero=1
	(
	for fichero in `find $origen -type f`
	do
		progresion=`echo "( $numero * 100 ) / $fotos" | bc`
		echo $progresion ;
		echo "# Copiando $fichero" ;
		cp $fichero $destino/$fecha
		numero=`expr $numero + 1`
	done
	)|
	zenity --progress --auto-close --title="Guardando las fotos" \
		--text="Guardando $fichero" --percentage=0
}

# Subrutina para consola. Un programa independiente, en realidad
function consola {
	if [ "$creado" = "si" ]; then
		echo "Creado directorio $fecha"
	fi
	for fichero in `find $origen -type f`
	do
		if [ -f $fichero ]; then
			echo "Copiando $fichero en $destino/$fecha"
			cp $fichero $destino/$fecha/.
		fi
	done
	echo "$fotos fotos copiadas"
}

# Bloque principal. Decide si Xwindow o Consola y llama a subrutinas
if [ -d $origen ]; then
	if [ ! -d $destino/$fecha ]; then
		mkdir $destino/$fecha
		creado="si"
	fi

	fotos=`find $origen -type f | wc -l`

	if [ "$TERM" = "xterm" ] ||
		[ "$TERM" = "dumb" ]; then
		xwindow
	else
		consola
	fi
else
	if [ "$TERM" = "xterm" ] ||
		[ "$TERM" = "dumb" ]; then
		zenity --warning --text="Cámara no montada. ¿La has enchufado?."
	else
		echo "Cámara no montada. ¿La has enchufado?."
	fi
fi
--------------- Final de script "salvafotos" --------

Y si quieres ser un poquito más sofisticado, puedes meter tu cámara en una entrada UDEV, con lo que puedes hacer que el dispositivo de montaje sea siempre /dev/masub o /dev/olympus_c60zoom, por ejemplo.