"Después del juego es antes del juego"
Sepp Herberger

martes, 5 de abril de 2016

Configurando el sonido los HP ProDesk 600 G2/G1 SFF con Ubuntu

Bueno, nos han llegado 2 modelos de HP ProDesk 600: el G1 SFF y el G2 SFF. Ambos tienen tarjetas de sonido analógicas en placa y en la tarjeta gráfica HDMI. Vamos a ver como:

1) Vaporizar las tarjetas de sonido HDMI.

El HP ProDesk 600 G2 SFF (el que usamos en los laboratorios de informática) tiene:
 # lspci de las tarjetas de sonido:
00:1f.3 Audio device: Intel Corporation Sunrise Point-H HD Audio (rev 31)
01:00.0 VGA compatible controller: NVIDIA Corporation GK208 [GeForce GT 730] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GK208 HDMI/DP Audio Controller (rev a1)

# cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xbc440000 irq 131
 1 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xbc000000 irq 17

El HP ProDesk 600 G1 SFF (el que usamos con las pizarras digitales) tiene:
 # lspci de las tarjetas de sonido:
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation GT218 [GeForce 210] (rev a2)
01:00.1 Audio device: VIDIA Corporation High Definition Audio Controller (rev a1)

# cat /proc/asound/cards 
 0 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                      HDA Intel HDMI at 0xf7b34000 irq 36
 1 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf7b30000 irq 34
 2 [NVidia         ]: HDA-Intel - HDA NVidia

Está muy bien eso de tener varias tarjetas de sonido en PC... si eres de los que te gustan tener varias tarjetas de sonido en el PC. Yo, que solo tengo dos oídos, me conformo con una y por una vez y sin que sirva de precedente estoy de acuerdo con la mayoría: mejor una tarjeta de sonido y que el audio salga por el conector jack, lo simple es bello. Nada mas horrible que abrir el control de sonido y encontrarse con varias tarjetas y controles de volumen si lo único que quieres es escuchar a Metallica un rato.

Ya hicimos esto antes y lo contamos aqui. Veamos ahora como hacerlo para estos dos modelos de PC, usando una tarea puppet que añade el código en cuestión al arranque en rc.local:

En el HP ProDesk 600 G2 SFF:
#============================================================================================================================
#Añade a rc.local (si no está ya) el código que desactiva en el arranque la tarjeta de audio HDMI de la tarjeta gráfica

add_line_above { desactiva_audio_hdmi_siatic:
              file=> "/etc/rc.local",
              line=> 'bus=$(lspci | grep "Audio device: NVIDIA Corporation" | cut -d" " -f1) ; test -n $bus && echo 1 > "/sys/bus/pci/devices/0000:$bus/remove"',
              search=> "NVIDIA Corporation",
              above=> "^exit 0$"
}
Para HP ProDesk 600 G1 SFF:
#============================================================================================================================
#Añade a rc.local (si no está ya) el código que desactiva en el arranque la tarjeta de audio HDMI de la tarjeta gráfica
add_line_above { desactiva_audio_hdmi_infolab:
              file=> "/etc/rc.local",
              line=> 'bus=$(lspci | grep "Audio device: NVIDIA Corporation GK208" | cut -d" " -f1) ; test -n $bus && echo 1 > "/sys/bus/pci/devices/0000:$bus/remove"',
              search=> "GK208",
              above=> "^exit 0$"
}
Con esto el audio HDMI desaparece el PC y no se carga el driver ni el control PulseAudio, quedando solamente la tarjeta de sonido analógico, mas o menos así:
# cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xbc440000 irq 131

2) Fijar la tarjeta de sonido analógica

Otra cuestión que me pasaba con los HP ProDesk 600 G2 SFF es el driver la tarjeta de sonido analógica fallaba aleatoriamente durante el arranque, impidiendo manejarla desde el control de sonido. Es decir, salía esto:
# cat /proc/asound/cards
 1 [NVidia         ]: HDA-Intel - HDA NVidia
                      HDA NVidia at 0xbc000000 irq 17
Como se puede ver, la "0 [PCH ]: HDA-Intel - HDA Intel PCH" no estaba. Como consecuencia no salía sonido por el jack y nuestros altavoces analógicos permanecían enmudecidos.

Tras investigar un poco vi que cuando el driver fallaba esta línea aparecía en el syslog:
# dmesg | grep i915
[   10.966853] snd_hda_intel 0000:00:1f.3:
failed to add i915_bpo component master (-19)
Buscando encontré este enlace en el cual vienen a decir que la solución es actualizar al driver ALSA mas moderno que puedas encontrar. Eso se cuenta en esta página. Son dos pasos:

Uno: Instalar dkms con "apt-get install dkms" para permitir recompilar drivers al actualizar el kernel.
Dos: Bajar e instalar la última versión del driver alsa para mi sistema operativo concreto, que a fecha de hoy está en este enlace. Los comandos son:
# wget https://launchpad.net/~ubuntu-audio-dev/+archive/ubuntu/alsa-daily/+files/oem-audio-hda-daily-lts-vivid-dkms_0.201603231016~ubuntu14.04.1_all.deb
# dpkg -i oem-audio-hda-daily-lts-vivid-dkms_0.201603231016~ubuntu14.04.1_all.deb
# apt-get -f install
# ...
# dpkg -l | grep oem-audio-hda
ii  oem-audio-hda-daily-lts-vivid-dkms 0.201603231016~ubuntu14.04.1    

Tras esto reiniciamos y el driver de la tarjeta analógica siempre estará cargado.

Y con esto acabamos por hoy, de todas maneras seguiremos hablando de estos equipos y los problemas que dan con Ubuntu pese a que el contrato exigía que se entregasen totalmente compatibles. La empresa ganadora se piensa que si instalas y arrancas sin problemas ya va todo bien.... en fin, como siempre me recuerda Noo-Noo, mi Roomba:



Ampliación 21/09/2016: me comenta mi compañero Ismael que el enlace al driver ya no va, que hay que buscar en Internet "oem-audio-hda-daily-dkms" y luego descargar el paquete mas adecuado para nuestra versión. Otro compañero, Francis, da la solución definitiva: instalar mediante un PPA el paquete, asi siempre estará actualizado.
# add-apt-repository ppa:ubuntu-audio-dev/alsa-daily
# apt-get update
# apt-get install oem-audio-hda-daily-lts-vivid-dkms
¡Gracias, compañeros!.

3 comentarios:

  1. ¡¡¡Genial Alfonso!!! Un quebradero menos. ¡¡¡Gracias!!!
    Estos equipos están dando dolor de cabeza...
    He encontrado en algunos otro modelo de tarjeta.
    Este es un alumno:
    root@a211-o01:~# lspci|grep -i audio
    00:1f.3 Audio device: Intel Corporation Device a170 (rev 31)
    01:00.1 Audio device: NVIDIA Corporation Device 0e0f (rev a1)

    Y este es el otro modelo
    root@a211-pro:~# lspci |grep -i audio
    00:1f.3 Audio device: Intel Corporation Sunrise Point-H HD Audio (rev 31)
    01:00.1 Audio device: NVIDIA Corporation GK208 HDMI/DP Audio Controller (rev a1)

    Creí que traían el mismo modelo de placa y tarjeta...parece que no ¿eh?

    ResponderEliminar
  2. Supongo que el proceso de instalar el driver actualizado habría que repetirlo cada vez que se actualize el driver, ¿no?
    si es así ¿qué posibilidades habría de automatizar esto?

    ResponderEliminar
  3. En teoria debería recompilarse solo con dkms (https://es.wikipedia.org/wiki/Dynamic_Kernel_Module_Support) pero por algun motivo extraño por esclarecer no está pasando con los drivers de sonido, nw_fermi ni nvdia.

    Se puede hacer un sistema de scripts que detecte cambios de kernel y reinstale los drivers desde /etc/rc.local, pero es demasiado rústico.

    Una tercera opción es congelar el kernel y no dejar que se actualice. A fin de cuentas...¿para qué tanta actualización?. Si tienes un kernel que funciona no hay razón para ello.

    ResponderEliminar