jueves, abril 28, 2005

Menús contextuales en KDE

Andaba yo tan contento con mi XMMS vestido con las pieles del Winamp, y regocijandome de haber podido corrgir el problema de las fuentes pequeñas en GTK, pero no podía reprimir un gesto de disgusto cuando navegaba por mis archivos de música y no tenía la opción en el menú contextual de Konqueror para encolar o reproducir las canciones sin tener que arrastrarlas hasta el interfaz gráfica del XMMS.

Como siempre, un poco de investigación da sus frutos.

Parece ser que existen unos archivos .desktop que le indican a KDE éste tipo de cosas. Pertenecen a una especificación abierta de FreeDesktop a la que parece que tanto Gnome como KDE están adscritos, con mayor o menor grado de implementación, llamado Desktop Entry Specification. Gracias a ésta especificación se pueden describir acciones a realizar sobre cada tipo de archivo. No es la única utilidad que tiene, ya que su propósito es más amplio; como comentan en su sitio web, los ficheros .desktop describen información sobre aplicaciones, como el nombre, icono y descripción. Presumo que entre estas informaciones se incluye el como tratan las aplicaciones cada tipo de archivo.

En el caso del manejo de archivos, se trata de crear un nuevo archivo .desktop en el direcotrio '/usr/share/apps/konqueror/servicemenus' si queremos que la acción del menú contextual esté disponible para todos los usuarios o en '$HOME/.kde/share/apps/konqueror/servicemenus' si lo que queremos es que sólo lo vea un usuario determinado.

Creamos, por tanto, en el directorio deseado, el archivo accionesXMMS.desktop, con el siguiente contenido:
[Desktop Entry]
Actions=encolar_en_XMMS;encolar_en_XMMS_inmediato;reproducir_en_XMMS
Icon=
ServiceTypes=audio/x-mp3,audio/x-vorbis,audio/vorbis,audio/x-wav,audio/wav,audio/mpegurl,audio/x-ms-wma,inode/directory

[Desktop Action encolar_en_XMMS]
Exec=xmms -e %F
Icon=sound
Name=Enqueue in XMMS
Name[es]=Encolar en XMMS

[Desktop Action encolar_en_XMMS_inmediato]
Exec=xmms -Q %F
Icon=sound
Name=Enqueue in XMMS inmediatly
Name[es]=Encolar en XMMS inmdediatamente

[Desktop Action reproducir_en_XMMS]
Exec=xmms %F
Icon=sound
Name=Play in XMMS
Name[es]=Reproducir en XMMS

Veamos la utilidad de cada sección y parte:
  • [Desktop Entry]: Nodo principal del archivo, indica que en que consiste la entrada.
    • Actions: Son cada una de las acciones que vamos a describir. Cada acción nombrada tendrá su propia sección más adelante
    • Icon: Me temo que aún no sé para que vale. Evidentemente, especifica un icono.
    • ServiceTypes: Indica sobre que tipo de archivos, especificados mediante MIME-Types, se aplica .
  • [Desktop Action [nombre acción]: Nodo con la información de las acciones que se han descrito anterioremente.
    • Exec: Comando a ejecutar cuando se selecciona ésta opción.
    • Icon: Esta si la sé ;-P. Indica el icono que mostrará en el menú contextual. Sospecho que se indican nombres de iconos de manera que el sistema tendrá una lista y buscara el nobre en dicha lista. No sé muy bien dónde está esa lista, ni como añadir iconos, ni como saber como se llaman.
    • Name: Texto que se mostrará en el menú contextual para representar ésta acción.
    • Name[es]: Sospecho que es la versión traducida del campo anterior (es de español). Digo yo que si se tiene seleccionado el lenguaje español se mostrará éste texto, en vez del anterior (que debe ser el genérico).
Respecto a los MIME-Types, he de reconocer que no los manejo muy bien. La lista que he puesto no es en absoluto exhaustiva, y probablemente se pueda especificar mejor. He intenado con audio/all pero no parecía funcionar. Por cierto, notar que se ha añadido el tipo inode/directory para poder realizar las acciones anteriores sobre directorios.

Por último, unos enlaces de dónde ha salido ésta información. Tanto suy como melenas, de KDE-Hispano.org, tienen artículos al respecto:
Acabo de encontrar otro artículo muy interesante, enviado por [agarfu], en el que se explica como añadir al menú contextual la opción de ordenar la vista de archivos por fecha, tamaño, nombre, etc.., usando un archivo .dektop (bueno, y un pequeño script al que llama el archivo .desktop).
En BlogDRAKE también hablan al respecto, concretamente

miércoles, abril 27, 2005

Instalando la Máquina Virtual de Java y los plugins Java para los navegadores

Hace tiempo instalé el entorno de ejecucion de Java (JRE), tanto para el sistema como para los navegadores que uso. Desafortunadamente, parece ser que había un problema con el plugin Java para Firefox y creo recordar que también afectaba a Konqueror, que hacía que no se iniciasen los navegadores si estaba instalado el plugin de Java. Hablando en plata, que no tengo soporte Java para mis navegadores, lo cuál me incomoda en extremo.

Como no recuerdo como fue todo aquello (ese el motivo principal de ésta bitácora, recordarme como he ido haciendo las cosas), voy a comenzar de nuevo.

Primero, ¿tengo acaso instalado la JRE y es razonablemente actual?

Observando el directorio /opt, veo que tengo instalada la versión 1.4.2_06 del entorno de ejecución.

Mirando un poco los foros, veo como configurar Java en Konqueror. Es tan sencillo como indicarle dónde esta el ejecutable java en el sistema dentro de la pestaña de configuración de Java & JavaScript. Yo tenía como ruta al ejecutable simplemente java, y dado que en la variable $PATH no se halla la ruta al ejecutable java (en mi caso /opt/j2re1.4.2_06/bin), Konqueror no lo encontraba. Indicandole la ruta completa hasta el binario java, tengo los applets Java funcionando en mi Konqueror. Para probarlo, se puede visitar la página de prueba de Sun para Java. Va perfecto.

Encuentro un artículo en Bulma, así como un interesante hilo en las listas de debian.org hablando sobre el tema. Parece ser que hay una versión más actual de Java, la 1.5, que puede corregir estos problemas con los plugins. Además, explican como instalar el plugin.

Consultando en Sun, veo que efectivamente hay una versión de Java 1.5.0_02.

Puede que sea más actual, pero voy a ver por qué cascaba la versión anterior en Mozilla y Firefox.

Para instalar los plugin basta con crear un enlace simbólico desde el directorio plugins de la instalación de Mozilla o Firefox hacia el plugin de la instalación de Java. En mi caso, para Mozilla, la orden sería:
#ln -s /opt/j2re1.4.2_06/plugin/i386/ns610-gcc32/libjavaplugin_oji.so /usr/lib/mozilla/plugins/.
Existen tres plugins en mi instalación de Java: ns4, ns610 y ns610-gcc32. Sospecho que deben ser para Netscape 4.x, Netscape 6.1o y superiores y Netscape 6.10 superiores compilado con extensiones para 32 bits. El último es el que me gusta, lógicamente.

Sorpresa, inicio Mozilla, cargo la página de prueba de Sun y el applet se ejecuta sin problemas. Vaya, ¿que es lo que haría mal anteriormente?

Bueno, probemos con Firefox, que es mi navegador estrella. Basta con un enlace simbólico al mismo plugin que usa Mozilla, es decir:
#ln -s /opt/j2re1.4.2_06/plugin/i386/ns610-gcc32/libjavaplugin_oji.so /usr/lib/mozilla-firefox/plugins/.
Sorpresa de nuevo, al reiniciar Firefox la página de prueba de Sun se ejecuta a la perfección.

¿Por qué no me funcionó anteriormente?

La única diferencia es que he instalado el paquete java-common, ya que he leído por ahí que es conveniente tenerlo, pero leyendo su descripción:
This package must be installed in the system if a Java environment is desired. It covers useful information for Java users in Debian GNU/Linux, including:
  • The Java policy document which describes the layout of Java support in Debian and how Java packages should behave.
  • The Debian-Java-FAQ which provides information on the status of Java support in Debian, available compilers, virtual machines, Java programs and libraries as well as on legal issues.
  • Information on how to create dummy packages to fullfill java2 requirements.
... no parece instalar nada esencial para que se ejcute el plugin, pués sólo parece incluir documentación. Sospecho que probé con alguna distribución anterior, quizá con la Knoppix que tuvé antes.

Nunca hay que pensar en que se ha hecho un esfuerzo inútil. Por el momento me quedo con la 1.4.2_06, más adelante veré si instalo la 1.5.0, en cuyo caso ya tendré las cosas bastante claritas.

martes, abril 26, 2005

Jugando con hdparm: rendimiento de los discos duros

Sorpresa, tras arrancar con mi flamante nuevo soporte para el chipset VIA 82CXXX y pedir información sobre mis discos duros, me encuentro:
# hdparm /dev/hda

/dev/hda:
multcount = 0 (off)
IO_support = 1 (32-bit)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 19929/255/63, sectors = 320170943, start = 0

# hdparm -i /dev/hda

/dev/hda:

Model=Maxtor 6Y160L0, FwRev=YAR41BW0, SerialNo=Y46VZA5E
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=57
BuffType=DualPortCache, BuffSize=2048kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: disabled (255) WriteCache=enabled
Drive conforms to: (null):

* signifies the current active mode



# hdparm /dev/hdb

/dev/hdb:
multcount = 0 (off)
IO_support = 1 (32-bit)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 256 (on)
geometry = 16383/255/63, sectors = 234439535, start = 0

# hdparm -i /dev/hdb

/dev/hdb:

Model=ST3120022A, FwRev=3.06, SerialNo=3JT3PHGK
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234439535
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: ATA/ATAPI-6 T13 1410D revision 2:

* signifies the current active mode
Parece que se activa por defecto el IO_support, es decir, el acceso 32 bits. Creo, de todas maneras, que un valor más alto podría mejorar el rendimiento, luego lo tengo que mirar. Además. también está activado unmaskirq, que permite el enmascaramiento de interrupciones mientras se está accediendo al disco (debido a otra interrupción).

Por último, en ambos discos duros se encuentra activado el DMA y seleccionado el modo más rápido (udma6 en /dev/hda y udma5 en /dev/hdb).

Bien, hagamos unas pruebas de rendimiento:
# hdparm -t -T /dev/hda

/dev/hda:
Timing cached reads: 1248 MB in 2.00 seconds = 622.85 MB/sec
Timing buffered disk reads: 172 MB in 3.03 seconds = 56.83 MB/sec

# hdparm -t -T /dev/hdb

/dev/hdb:
Timing cached reads: 1240 MB in 2.00 seconds = 618.55 MB/sec
Timing buffered disk reads: 158 MB in 3.02 seconds = 52.33 MB/sec
Lástima no tener las pruebas de cuando no tenía mi flamante controlador instalado correctamente. Probemos, de todas maneras, desactivando el DMA:
# hdparm -t -T /dev/hda

/dev/hda:
Timing cached reads: 1248 MB in 2.00 seconds = 623.78 MB/sec
Timing buffered disk reads: 16 MB in 3.09 seconds = 5.18 MB/sec


# hdparm -t -T /dev/hdb

/dev/hdb:
Timing cached reads: 1208 MB in 2.01 seconds = 602.28 MB/sec
Timing buffered disk reads: 16 MB in 3.13 seconds = 5.12 MB/sec
¡Anda, la hostia! Pues si que hay diferencia. Sospecho que anteriormente tenía valores desde luego más altos, pero no tanto como cincuenta y pico megas de transferencia por segundo. En cualquier caso, veremos en los días siguientes si hay diferencia.

Quedan otras opciones que podría tocar. Por un lado el modo IO. Consultando el artículo "Hdparm" de RTFM-Wiki se comenta que los modos son los siguientes:
0 : default 16-bit
1 : 32-bit
2 : 16-bit
3 : 32-bit w/sync
El modo 3 podría ser, por tanto, algo más rápido.

Por otro lado, queda multisect, que indica cuantos sectores son leidos del disco en una sola interrupción. Así, cuanto mayor sea más mejora podría obtenerse.

Sin embargo, activando ambas opciones en ambos discos, obtengo:
# hdparm -t -T /dev/hda

/dev/hda:
Timing cached reads: 1236 MB in 2.00 seconds = 617.79 MB/sec
Timing buffered disk reads: 170 MB in 3.00 seconds = 56.60 MB/sec


# hdparm -t -T /dev/hdb

/dev/hdb:
Timing cached reads: 1248 MB in 2.00 seconds = 622.85 MB/sec
Timing buffered disk reads: 154 MB in 3.03 seconds = 50.77 MB/sec
Curioso, obtengo velocidades más lentas. Quizá por eso el sistema arrancó con esas opciones desactivadas, por que sabía que no eran buenas.

En fin, es bueno saberlo, quizá más adelante descubra por qué no me benefician esas opciones, por el momento se quedan desactivadas.

MiKernel.v4 a MiKernel.v5 (Soporte DMA)

Vaya vaya, pequeño problema para activar el soporte de DMA para mis discos duros.

Veamos como he llegado hasta aquí.

Primero se usa lspci para comprobar el chipset de sistema IDE.
# lspci
0000:00:00.0 Host bridge: VIA Technologies, Inc. VT8377 [KT400/KT600 AGP] Host Bridge (rev 80)
0000:00:01.0 PCI bridge: VIA Technologies, Inc. VT8237 PCI Bridge
0000:00:0c.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 0a)
0000:00:0c.1 Input device controller: Creative Labs SB Live! MIDI/Game Port (rev 0a)
0000:00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
0000:00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
0000:00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80)
0000:00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82)
0000:00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge
0000:00:11.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06)
0000:00:13.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
0000:01:00.0 VGA compatible controller: nVidia Corporation NV34 [GeForce FX 5200] (rev a1)
Como puede verse, es un VIA 82CXXX.

Compruebo en el kernel que el soporte para el chipset VIA 82CXXX está marcado como módulo. Mediante lsmod compruebo que está cargado. En principio bastaría para poder activar el soporte DMA.

Para activarlo, se usa la herramienta hdparm:
# hdparm -d1 /dev/hda

/dev/hda:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Operation not permitted
using_dma = 0 (off)
Ops! No funciona. ¿Operación no permitida? Parece que como si el disco o el controlador no admitiese DMA, pero no es posible, ya que ambos lo deben de soportar.

Tras un rato surfenado por la red, encuentro el siguiente artículo en Gentoo Linux Wiki: "HOWTO Use hdparm to improve IDE device performance", en el que se comenta, en la sección de problemas, lo siguiente:

I get "Operation not permitted" errors on setting DMA (-d1)

Your kernel is not supporting these IDE instructions. After compiling the kernel with all settings right, the same error returns, and this is a bug / sloppy hardware problem (my experience). You might want to try to compile your IDE chipset extension into the kernel, NOT AS A MODULE. That way this code loads before IDE_GENERIC and the problem is gone.

Uhm... así que si compilo el soporte IDE para mi chipset como módulo, al cargar el kernel se carga antes el módulo IDE genérico, que carece de soporte DMA, quedando el módulo específico para mi chipset sin utilidad.

Bien, no me queda más que generar una nueva versión de mi kernel de v4 a v5 compilando para esta nueva versión el soporte para chipset VIA 82CXXcon el núcleo en vez de como módulo aparte.

Lo compilo e instalo sin problemas, y parece que mediante hdaparm puedo activar el soporte para DMA.

Respiro satisfecho admirando de nuevo a la Comunidad. Más adelante echaré un ojo a las opciones de hdparm ahora que tengo el controlador adecuado.

lunes, abril 25, 2005

Tamaño de fuente pequeña en GTK

Tiempo llevaba yo doliéndome por el tamaño tan pequeño que presentaban las aplicaciones de GTK, o al menos algunas de ellas. La estrella era el XMMS, claro, por lo mucho que lo usaba.

Mirando varias veces, se me nombró gtk-theme-switch y gtk-theme-switch2, sin éxtio.

La solución parece ser instalar los paquetes que incluyen fuentes 'transcoded'. Si, no sé a que se refiere. Parece ser que han sido generadas al transcodificar fuentes de del ISO 10646 (¿conjunto de carácteres?). Los paquetes en cuestión son:
xfonts-100dpi
xfonts-100dpi-transcoded
xfonts-75dpi
xfonts-75dpi-transcoded
xfonts-base
xfonts-base-transcoded
Tras instalarlos mediante el pertinente apt-get y reiniciar las X, los programas GTK parecen ir bien. Lo que es un misterio es por que los programas gtk-theme-switch y gtk-theme-switch2 permiten seleccionar fuentes, pero siguen sin afectar al XMMS. Parece que el repodructor usa una especie de fuente por defecto, de tamaño legible eso si, ya que no hallo la manera de cambiar la tipografía.

Bueno, al menos tengo el interfaz gráfico con un tamaño de fuente decente, puedo sobrevivir sin cambiar el tipo de letra.

martes, abril 19, 2005

Notas rápidas sobre PHP

Hay un básico y sencillo manual de PHP en WebEstilo, que si bien no es en absoluto exhasutivo si tiene las cosas básicas para ir manejandose (variables, instrucciones condicionales, funciones y librerias, cadenas, algo de sesiones, BD, métodos POST y GET, etc).


En caso de error en una llamada a MySQL, se puede ver la causa del error mediante:
echo mysql_errno() . ": " . mysql_error(). "\n";
Como puede verse, el punto (.) sirve para concatenar cadenas.

Conviene organizar las funciones más usadas en un fichero de funciones que pueden ser incluidas al inicio del script php, mediante la instrucción include:
include("funcionesAuxiliares.php");
Para acceder a los valores recibidos mediante GET se usa la varaible especial $_GET[]. Así, si la cadena recibida es:
http://localhost/Prueba/unaPrueba.php?parametroA=valor1¶metroB=valor2
Usaremos para obtener el valor del parámetro A:
$_GET[parametroA]
Y para el parámetro B:
$_GET[parametroB]

Por último, un breve código para realizar una consulta y recorrer los resultados:
$con=mysql_connect();
// $con será la conexión a la BD

mysql_select_db("prueba", $con);
// Se selecciona la base de datos 'prueba'

$consulta = mysql_query("SELECT * FROM tabla1 WHERE campo1 > 1 ORDER BY campo1")
or die("Se produjo un error ejecutando la consulta");
// Se lanza la consulta, se muestra error si no se pudo ejecutar

if (mysql_num_rows($consulta) == '0') {
echo("No se hallaron resultados");
} else {
while($fila = mysql_fetch_object($consulta)) {
echo("Valor campo1: $fila->campo1");
// Se muestra el valor del campo1
}
}

mysql_close($con);
// Cierre de la conexión

Un par de enlaces:

lunes, abril 18, 2005

Creando una Web mediante LAMP

Mi deseo ahora es crear una web mediante LAMP.

Para ello he de instalar Apache, MySQL y PHP. Usaré Apache 1.3.x, PHP 4.3.x y MySQL 4.0.x.

Lamentablemente, no hice seguimiento del proceso de instalación y configuración, por lo que no estoy muy seguro de los pasos que seguí, ni como resolví los problemas que tuve.

Lo primero es instalar Apache, MySQL y PHP4. Para ello uso apt-get, herramienta genial dónde las haya. Se debe seleccionar con cuidado los paquetes a instalar, pues en mi caso no conseguía que Apache procesase las páginas de PHP debido a que me faltaba un paquete (no recuerdo cuál) y después daba error al conectar a MySQL ante la falta de otro paquete, php4-mysql, que permite a PHP conectar con MySQL (sí, éste era de cajón, no estuve nada fino).

La configuración es Apache 1.3.x es sencilla como puede verse en muchas páginas. Basta con añadir al archivo httpd.conf (configuración del servidor Apache) las líneas:
LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
La primera activa el módulo de PHP, la segunda y tercera informan a Apache que los archivos php y phps son de tipo aplicacción/php, de manera que antes de servirlas deberá procesarlas mediante el módulo php.

Una vez realizado esto y en ausencia de errores, el sistema está listo para ofrecer páginas dinámicas mediante Apache, PHP y MySQL.

Más adelante iré escribiendo mis pasos con PHP, el cuál conozco apenas un poquito. Como lo uso solamente de vez en cuando, es bueno tener un recordartorio de lo que hago, en vez de tener que ir reaprendiendolo cada vez que lo quiero usar.

martes, abril 12, 2005

Usando los caminos del software libre

Como me recomendó nx5 en la conversación de IRC respecto a mi cámara BenQ DC 3410, decidí ponerme en contacto con el autor, Michel Xhaard.

El jueves 7 de abril, por anoche, le envíe un correo comentandole lo que me pasaba junto a con mi configuración del equipo. El viernes por la mañana recibía un correo suyo pidendome que usase el módulo con debug=5 y le envíase el cotenido relevante de /var/log/messages referente a la conexión, captura de imágenes y desconexión de la cámara. Menos de 2 horas después de haberselo enviado me remitia un mensaje informando que en principio todo iba bien, pero que por algún motivo su módulo no hallaba el frame inicial dentro de streaming de vídeo que enviaba la cámara. 40 minutos después recibia la siguiente versión de su módulo, diciendome que lo probase. Compilo, instalo el módulo, ejecuto spcaview -f jpg y... la ventana muestra perfectamente lo que la cámara está viendo.

Un par de correos más de agradecimiento y envío del registro de /var/log/messages con el nuevo módulo, y el comentario de que pronto actualizará el módulo indicando el soporte probado con la BenQ DC3410.

Los caminos del software libre son ciertamente interesantes. No creo que hubiese podido recibir mejor servicio de ninguna multinacional por un problema parecido. En menos de 24 horas tenía mi asunto arreglado, y él ajustado su módulo para dar soprte probado a una nueva cámara.

Nuevos tiempos, nuevas posibilidades, nuevos módelos.

miércoles, abril 06, 2005

Lidiando con mi Benq 3410

Bueno, he llegado a la página más reciente del proyecto del controlado spca5xx y parece que mi cámara no está completamente soportada :-(

Así que me he armado de valor, y voy a intentar depurar un poco el asunto.

Hablando con el IRC de debian, en el canal spca5xx, he encontrado lo siguiente:
NaSz: hi
NaSz: i got a benq 341phot camera and webcam supported by spca5xx controller
NaSz: i've recompiled my kernel for videodev module, an then compiled and installed spca5xx
NaSz: when i plug mi webcam dmesg shows it, but when i try to see the video stream, program freezes
NaSz: does anybody have a clue?
NaSz: I searched for a spca5xx forum but didn't find it
nx5: what's your camera's usb id?
NaSz: the one that is showed at spca5xx supported webcams page...
NaSz: ai don't remember now.. wait
NaSz: vendor: 0x04a5
NaSz: product: 0x300a
nx5: Benq 22 0x04a5 0x300a DC 3410 spca504b Test Jpeg spca5xx ***
nx5: it says "test" in the list of supported cam :/
NaSz: but at sourceforge webpage of that project it says that camera is fully supported
NaSz: wait
nx5: mxhaard.free.fr
nx5: forget sf
NaSz: ok :(
nx5: try the latest version of the driver
nx5: you get black frames?
nx5: or no frames?
NaSz: program freezes
nx5: try with different option in spcaview
nx5: -f jpg
NaSz: gqcam and gnomemeeting
nx5: -f yuv
nx5: try spcaview with different formats first
nx5: see if one of them works
NaSz: what is spcaview?
nx5: mxhaard.free.fr
nx5: download spcaview
NaSz: it is an external program or tool I suppose?
NaSz: ok
nx5: yep
nx5: another app
NaSz: ok, i got it, thank you very much
nx5: if you still have problems, email michel xhaard
nx5: insert the kernel module with debug=4
nx5: make snoops in windows..
nx5: etc
NaSz: ok, i take those notes
nx5: well, debug=3 or debug=4 won't do anything except output a lot of messages you can read to find out things
NaSz: ok
Es decir, la página oficial es http://mxhaard.free.fr/.

El controlador admite tres modos de transmisión con las cámaras. La mía utiliza el modo jpeg. En principio es bueno ya que se usa una compresión conocida.

Descargo la herramienta spcaview. Para compilarla necesito el paquete sdllib-dev, la cuál exige que instale gcc 2.95 (yo tengo el gcc 3.3). Comentado en el IRC de Debian, me dicen que es normal, no pasa nada, puede incluso que ni siquiera necesite usar la versión 2.95 y que bastaría compilar con la 3.3, pero que hay que dejar hacer a apt.

Compilo y ejecuto. Cuadro negro. El programa no da error, pero no muestra nada.

Instalo el módulo con nivel 5 de depuración (modprobe debug=5>). Obtengo un largo registro, pero no parece haber ningún error claro.

Gnome-meeting tampoco funciona. xawtv tampoco, ni gqcam.

Me he quedado sin salidas.

Por hoy me han ganado la batalla, habŕa que probar otros caminos.

martes, abril 05, 2005

MiKernel.v3 a MiKernel v4 (webcam)

Bien, necesito instalar mi webcam, para lo cuál toca activar video4linux en el Kernel.

Los archivos de configuración del kernel se encuentran en el directorio /usr/src/linux, ocultos, nombrados como config.vx.[indicación de cambios realizados].

Uso make-kpkg para compilar el kernel y crear los paquetes correspondientes a la imagen del kernel, sus corresponientes fuentes y sus fuentes. Después se instalan la imagen y las cabeceras. En principio las fuentes no hacen falta para nada, pués son iguales sólo que configuradas para otras opciones del kernel. Imagino que esto puede ser útil cuando se parchea el núcleo, puesto que éstos si que modifican las fuentes (si no me equivoco).

Hay que recordar que hay que hacer make-kpkg clean antes de crear los paquetes o se puede obtener el error por las versiones ('...I'm confused about this discrepancy, and I'm halting', me encanta la manera de decir que hay error).

Para crear los paquetes se usa:

make-kpkg --revision=[nombreRevisión] kernel_image kernel_headers kernel_source

Los diferentes make_xxx corresponden a los diferentes objetivos al comando make-kpkg (imagén del kernel, cabeceras y fuentes).

Al intentar instalar el paquete imagen, dará un error (me ha pasado anteriormente), debido a que existe el directorio /lib/modules/2.6.8, dónde se hallan las depencias del kernel actual. Dado que se va a instalar otro kernel, se deben quitar de ahí. Lo suyo es renombrar el directorio por si acaso falla el nuevo kernel y queremos poner el antiguo (es decir, des-renombramos y arrancamos con el kernel antiguo)


Al instalar el kernel, y habiendo eliminado dicho directorio, se muestra un mensaje que explica esto:
You are attempting to install a kernel version that is the same as
the version you are currently running (version 2.6.8). The modules
list is quite likely to have been changed, and the modules dependency
file /lib/modules/2.6.8/modules.dep needs to be re-built. It can
not be built correctly right now, since the module list for the
running kernel are likely to be different from the kernel installed.
I am creating a new modules.dep file, but that may not be
correct. It shall be regenerated correctly at next reboot.

I repeat: you have to reboot in order for the modules file to be
created correctly. Until you reboot, it may be impossible to load
some modules. Reboot as soon as this install is finished (Do not
reboot right now, since you may not be able to boot back up until
installation is over, but boot immediately after). I can not stress
that too much. You need to reboot soon.
Tras instalar el paquete kernel_image, se reinicia. Efectivamente las X dejan de funcionar, por lo que se debe reinstalar el controlador de nVidia. Fácil, basta con ejectuar el script de instalación. Al tener un kernel propio, se compila un interfaz con el kernel específico, ya que los precompilados no tienen por que ajustarse a mi kernel, lógicamente.

Para hacer funcionar la webcam se necesitan los módulos videodev y spca5xx cargados en memoria. Si no lo están se cargan con modprobe .

Desgraciadamente mi webcam no rula. El kernel parece reconecerla a tenor de lo que dice dmesg:
usb 4-2: USB disconnect, address 2
/usr/src/modules/spca5xx-20050328/drivers/usb/spca5xx.c: usb_submit_urb() ret -19
/usr/src/modules/spca5xx-20050328/drivers/usb/spca5xx.c: usb_submit_urb() ret -19
usb 4-2: new full speed USB device using address 3
/usr/src/modules/spca5xx-20050328/drivers/usb/spca5xx.c: USB SPCA5XX camera found. Benq DC 3410 Spca504b
/usr/src/modules/spca5xx-20050328/drivers/usb/spca5xx.c: [spca5xx_probe:7806] Camera type JPEG
Sin embargo tanto gqcam, xawtv como gnomemeeting se cuelgan al intentar visualziar lo que la cámara ve. He intentado probar con el kernel precompilado no consigo cargar el módulo spca5xx.o, asi que el sistema ni siquiera detecta la cámara.

No tengo pistas de por dónde seguir, tendré que buscar ayuda. :-(

Punto de partida

Comenzamos, tras muchas otras instalaciones (he tenido una Caldera, una Suse, jugué con una Red Hat en Telefónica Rios Rosas, Knoppix) ahora dispongo de una bonita Debían, principalmente Sarge (testing) con algunos en Sid (unstable), con kernel 2.6.8.

El kernel lo he compilado yo, he ido añadiendo cosas según las necesitaba. Hoy tocaba añadir soporte para la webcam, asi que he tenido que activar la opción de Video4Linux del Kernel. Antes tocó añadir soporte para USB y alguna cosilla que ahora no recuerdo.

Tengo instalado el módulo de nVida, descargado de la web oficial de nVidia. No dió ningún problema, simplemente ejecutar el script de instalación. Me temo, eso si, que deb ser instalado con cada versión del kernel que se instale, así que sospecho que hoy me tocará hacerlo.

Instalé hace poco el Quake III Arena e iba como la seda, bien que lo demostré en la fiesta en red en el palacio de los marqueses.

Por cierto, esta bitácora no está para nada pensada para el público en general, es más un recordatorio para mi mismo.