Linux es fácil

Tanto como extirparse un cálculo renal con una cucharilla de postre. Usando los pies.

Sí, estoy un poco mosqueado.

Desde la actualización de Ubuntu "Jaunty" a "Karmic" tenía varios "problemillas". El primero, que no funcionaba el dongle USB Wifi, con lo que no tenía Internet. El segundo, que no funcionaba el sonido. Nada importante, como ven. Lo normal en una actualización entre distribuciones (presuntamente) estables. Para que luego digan de Debian.

El problema de la Wifi lo solucioné cambiando de dongle (por suerte, tenía dos distintos). El problema del sonido lo arreglé tocando la configuración de pulseaudio tras una furiosa búsqueda en Google y Launchpad. pulseaudio es como un supositorio: sabes que a largo plazo será bueno para ti, pero el mal rato que vas a pasar mientras te lo ponen no te lo quita nadie. Ahora mismo hay mucha gente a la que le da problemas, pero es una arquitectura superior que permite mucho más de lo que permitían los servidores de sonido actuales. Todas las distribuciones lo han adoptado, y a pesar de lo que parece, en general funciona bien.

Pero lo dicho: un supositorio.

El cambio que tuve que hacer en la configuración de pulseaudio fue mínimo: descomentar una línea y ya está. Pero para alguien que se acabe de instalar Ubuntu no sería tan fácil. Tendría que bucear entre los bugs de Ubuntu, saber qué es ALSA, saber qué es pulseaudio ... No sería fácil. En absoluto.

Y lo de hoy fue la guinda. Me di cuenta de que no me funcionaba la entrada de línea. Ahí es donde enchufo la salida del multiefectos de la guitarra, con lo que si no hay entrada de línea, no hay sonido de guitarra. Pensé que sería cuestión de jugar un poco con alsamixer, como otras veces que he actualizado el kernel. Pero no: a pesar de que los volúmenes estaban bien, y de que en el monitor de pulseaudio se veía que había sonido en la entrada de línea, no se oía nada de lo que entraba por ahí.

La primera búsqueda de Google me llevó a probar a indicar un parámetro model para el módulo snd-hda-intel, según esta lista. Ya lo había probado hacía tiempo cuando tuve otros problemas con la tarjeta de sonido, y aunque entonces lo arregló, ahora no hubo suerte. De hecho, el problema que tenía entonces era el mismo que el de ahora, y un par de búsquedas más me hicieron recordar qué era lo que había tenido que hacer: activar el analog loopback de la tarjeta, uno de los "switches" de alsamixer.

Que no aparecía por ningún lado.

Seguí buscando y vi que a otra gente le había pasado lo mismo: el control de analog loopback había desaparecido. En ese bug se indicaba una entrada del changelog de ALSA en el que se decía que, como daba muchos problemas, lo habían quitado por defecto. Ahora se podía activar con el hint "loopback = yes".

Por supuesto, ni idea de a qué se refería con lo de "hint", ni cómo aplicarlo.

En el bug no lo explicaban. Siempre se agradece que te digan parte de la solución a tu problema para que puedas probarte a ti mismo encontrando el resto. Eso curte. Crea carácter. Distingue a los hombres de los niños. Si yo estuviera probando Ubuntu, al llegar aquí hubiera tirado el ratón por la ventana en un ataque de frustración y hubiera instalado Windows.

Media hora y varias búsquedas en Google más tarde, encontré un documento llamado "More notes on HD-Audio driver" que está en los fuentes de ALSA. Este pequeño fichero de 16 páginas de amena documentación técnica, en texto plano, es lo que cualquier usuario medio podría leer y comprender en un momento para hacer troubleshooting de sus problemas de sonido. Si "usuario medio" implica varios años de experiencia con Linux, claro.

En la sección "HD-Audio Reconfiguration" explica que el módulo snd-hda-intel se puede reconfigurar en caliente usando los ficheros de /sys. En este punto es necesario incluir el texto original, para gozarlo en toda su gloria:

The following sysfs
files are available under each codec-hwdep device directory (e.g. 
/sys/class/sound/hwC0D0):

vendor_id::
  Shows the 32bit codec vendor-id hex number.  You can change the
  vendor-id value by writing to this file.
subsystem_id::
  Shows the 32bit codec subsystem-id hex number.  You can change the
  subsystem-id value by writing to this file.
revision_id::
  Shows the 32bit codec revision-id hex number.  You can change the
  revision-id value by writing to this file.
afg::
  Shows the AFG ID.  This is read-only.
mfg::
  Shows the MFG ID.  This is read-only.
name::
  Shows the codec name string.  Can be changed by writing to this
  file.
modelname::
  Shows the currently set `model` option.  Can be changed by writing
  to this file.
init_verbs::
  The extra verbs to execute at initialization.  You can add a verb by
  writing to this file.  Pass three numbers: nid, verb and parameter
  (separated with a space).
hints::
  Shows / stores hint strings for codec parsers for any use.
  Its format is `key = value`.  For example, passing `hp_detect = yes`
  to IDT/STAC codec parser will result in the disablement of the
  headphone detection.
init_pin_configs::
  Shows the initial pin default config values set by BIOS.
driver_pin_configs::
  Shows the pin default values set by the codec parser explicitly.
  This doesn't show all pin values but only the changed values by
  the parser.  That is, if the parser doesn't change the pin default
  config values by itself, this will contain nothing.
user_pin_configs::
  Shows the pin default config values to override the BIOS setup.
  Writing this (with two numbers, NID and value) appends the new
  value.  The given will be used instead of the initial BIOS value at
  the next reconfiguration time.  Note that this config will override
  even the driver pin configs, too.
reconfig::
  Triggers the codec re-configuration.  When any value is written to
  this file, the driver re-initialize and parses the codec tree
  again.  All the changes done by the sysfs entries above are taken
  into account.
clear::
  Resets the codec, removes the mixer elements and PCM stuff of the
  specified codec, and clear all init verbs and hints.

Pero ahí estaba: el fichero hints, que es a lo que se referían en el changelog. Supuse entonces que lo que había que hacer era añadir loopback = yes a ese fichero, tal que así:

echo "loopback = yes" > /sys/class/sound/hwC0D0/hints

Y luego, reconfigurar la tarjeta:

echo 1 > /sys/class/sound/hwC0D0/reconfig

Con eso ya aparecía el control de analog loopback en alsamixer, y ya funcionaba el sonido de la entrada de línea.

¡Jo, qué fácil era!

Si es que al final uno se da cuenta de que no es que Linux sea difícil: es sólo que no se ha parado a buscar durante hora y media entre bugs, posts de foros y documentación técnica. Cualquiera podría hacerlo.

Creo que éste tampoco será el año de Linux en el escritorio.

PS: y por encima, un bot me ha llenado de spam varias de las entradas del weblog. Ya ni del capcha se puede fiar uno.

Gracias por despejar mis dudas

Hasta ahora estaba dudando si instalar Linux en el ordenador de mis abuelos.

Realmente lo utilizan poco, salvo para navegar y llevar alguna hoja de cálculo sencilla. También lo usan para video-conferencias con un hijo que trabaja en el extranjero.

Pero después de la explicación que has dado sobre el problema y su solución lo tengo claro: Voy a instalar Linux en el ordenador de mis abuelos.

¡¡¡¡JODEROS VIEJOS!!!!

Cachis... por poco...

Leñe, lo que he estado buscando yo también el tema de los puñeteros hints... Así que lo primero es agradecértelo :D

Sin embargo, no puedo reconfigurar en caliente. Me dice que el dispositivo o recurso está ocupado :(

¿Conoces alguna manera de establecer el hint de forma permanente o que directamente cargue el módulo con la opción? Quizás eso evitaría ejecutar el comando y solucione mi problema.

Por cierto, existe "otra solución" que es cargar el módulo loopback-module de pulseaudio, pero mete unas latencias bestiales (entre 0.5 y 1 segundo), con lo que te chafa el poder oírte en condiciones al tocar un instrumento.

En fin, que este tema me ha estado volviendo loco desde que actualicé a Karmic (maldita la hora...), evitando que pueda tocar (y grabar) el bajo utilizando el Vox Amplug para no molestar a los vecinos...

Muchas gracias.

The Bass-tard

Ni idea

Ni idea de cómo reconfigurar en caliente. Imagino que tienes que asegurarte de que no haya ningún programa accediendo a la tarjeta de sonido, pero como gdm lo hace, al final yo lo que hago es salir de la sesión, ir a una consola de texto (Control+Alt+F1 desde gdm), parar gdm (service gdm stop, como root) y ejecutar un script que hice con las dos líneas que puse.

Seguramente hay alguna solución más elegante, pero como reinicio muy de cuando en cuando, me apaño con esto.

Ahora sí

Eso era, no estaba contando con el GDM.

Bueno, pues ahora a ver si coloco las líneas por el init.d (sin cargarme nada) para que me las ponga directamente.

Y lo dicho, que muchas gracias.

Saludos.
The Basstard

No me di cuenta de que salía

No me di cuenta de que salía como anónimo :-D
Me faltó añadir:

Un saludo,
Teodoro

Por algo me volví a Debian.

Por algo me volví a Debian. En la supuesta "estable" de Ubuntu meten muchos problemas, como poner drivers de gráficas Intel que no funcionan bien, por estar en desarrollo.
Con ALSA también tuve mi pequeña "aventura". El problema era conseguir la configuración para que funcionase el sonido 5.1 integrado en placa base. Descubrí que, puesto que dependiendo de la placa base puedes tener 3 o 6 conectores, hay veces que, si no se lo indicas, el driver no se entera de qué conectores tienes.
El problema es que para un usuario normal es inadmisible el tener que configurarlo a mano en un fichero de texto.

Es el futuro, se va a

Es el futuro, se va a imponer.

Vaites! Semella que pertences

Vaites! Semella que pertences a ese 90% de usuarios de Ubuntu que tiveron multitude de problemas coa actualización á KK. A verdade é que semella ir bastante mal, polo que lin pola rede.

Eu en cambio, estou contentísimo coa nova Mandriva que saiu xusto un día despois. Arreglaron case tódolos bugs da versión anterior da que xa estaba ata as pelotas e meteron algún que outro máis, pero nada complicado de arranxar para un usuario calquera.

Agardo que non che faga máis putadas.

PD: tés un pequeno erro ó principio do artigo: "segundo" -> "sonido", creo.

Non foi un erro

Non foi un erro. Foi un chiste recursivo.

(graciñas, xa está corrixido :-))