domenica 26 giugno 2011

Conflitto fra i moduli delle schede audio

Sul mio vecchio muletto ho due schede audio, una integrata e una esterna. Questo è la parte dell'output del comando lspci -v che riguarda le mie due schede audio
00:02.7 Multimedia audio controller: Silicon Integrated Systems [SiS] AC'97 Sound Controller (rev a0)
        Subsystem: C-Media Electronics Inc CMI9739(A) on ECS K7SOM+ motherboard
        Flags: bus master, medium devsel, latency 64, IRQ 11
        I/O ports at d800 [size=256]
        I/O ports at d400 [size=64]
        Capabilities: <access denied>
        Kernel modules: snd-intel8x0

00:11.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 08)
        Subsystem: Creative Labs SBLive! 5.1 Model SB0100
        Flags: bus master, medium devsel, latency 64, IRQ 11
        I/O ports at d000 [size=32]
        Capabilities: <access denied>
        Kernel driver in use: EMU10K1_Audigy
        Kernel modules: snd-emu10k1
La scheda integrata è la prima (e segue lo standard AC'97), la seconda è la scheda esterna. Le casse audio sono collegate alla scheda esterna e su Windows (mi duole ammetterlo) l'audio funziona senza problemi, mentre su Ubuntu non sentivo nulla fino a qualche minuto fa (in realtà l'audio funzionava prima di aggiornare Ubuntu alla versione 9.10 Karmic Koala). Ho impiegato più di un anno e mezzo per capire quale fosse il problema ma l'importante è arrivarci (e da solo!): facevano conflitto i driver (o "moduli") delle due schede (anche se non so perché con le precedenti versioni di Ubuntu questo problema non si presentasse). I nomi dei moduli del kernel utilizzati dalle due schede possono essere letti nell'output del comando lspci -v: snd-intel8x0 per la scheda integrata (cioè quella che non uso) e snd-emu10k1 per la scheda esterna.

Per mettere in blacklist un modulo del kernel chiamato modulo bisogna mettere in un file con estensione .conf della cartella /etc/modprobe.d la riga
blacklist modulo
Dunque per far tornare magicamente l'audio sul mio computer ho dato il seguente comando da terminale
echo "blacklist snd_intel8x0" | sudo tee /etc/modprobe.d/blacklist-audio.conf
È possibile aggiungere un commento, per ricordarsi perché si è aggiunto un modulo alla blacklist, facendo iniziare le righe di commento con #. Per esempio ho modificato il file appena creato (con i diritti di amministratore perché si trova sotto /etc) aggiungendo il seguente commento
# Metto il modulo della scheda audio integrata nella blacklist per
# evitare che entri in conflitto con quello della scheda esterna
blacklist snd_intel8x0