Pull to refresh

Как драйвер Windows коварно ломает звук в Linux или мучительные поиски бага

Configuring Linux *System administration *

Вместо вступления

Дешевая «комната страха» — темно и везде грабли.
Задумчиво поглядывая на падение в глубокие бездны коррекцию курса рубля, я решил, что оставаться со стремительно девальвирующей бумагой на руках смысла нет и пора обновить устаревшее железо. Выбор остановился на Gigabyte GA-Z97-D3H, так как хотелось иметь интерфейсы для SSD «на вырост». M.2 и Sata Express обещают до 10 Гбит/с на порт, что не может не радовать на фоне стремительного роста скорости накопителей. Собрал, совершил обряд нанесения термопасты и торжественно окропил пивом системный блок, как положено и немедленно погрузился в волнующий мир граблей и загадочных багов.Виновник торжества.

Простые радости линуксоида

Сразу хочу сказать — я не суровый бородатый железячник, исцеляющий контроллеры возложением рук. Максимум — слегка щетинистый linux-user, использующий открытое ПО в работе и жизни. В тайной подземной лаборатории по выращиванию хедкрабов, в которой я работаю, часто возникают задачи по обработке аудио- и видеоматериалов, полученных в результате работы. Писки вылупляющегося зерглинга там обработать или еще что-то… Короче, без Audacity и Kdenlive никуда. Realtek ALC1150 на материнской плате как всегда обещал неземное блаженство и хрустальные колокольчики, трепещущие под весенним ветром на вершине Гималаев.

В поисках грабель

И вот, я привычно разбил SSD на разделы для Windows 7 (да, я не люблю плитки) и Kubuntu 14.04 LTS. После поверхностной конфигурации Windows ребутнулся в Linux и удивился отсутствию звука. Решив, что ядро как всегда не успевает за свежим железом, я полез искать известные баги по z97-чипсету. Первый баг, который попался, печально повествовал об искажениях и хрипах на этом чипсете у пользователей Ubuntu 14.04. Я поверхностно просмотрел рекомендации и попробовал выполнить это:
echo "options snd-hda-intel vid=8086 pid=8ca0 snoop=0" >> /etc/modprobe.d/alsa-base.conf
После ребута тишина по прежнему наполняла динамики. Не сильно расстроившись, я заметил, что в версии ядра >3.16 проблема должна быть устранена. Видимо, несмотря на обещания сидеть на стабильных LTS релизах, Вселенная подталкивала меня в прежней череде непрерывных обновлений и поисков того, что отвалилось на этот раз. Выполнив do-release-upgrade, я порадовался отсутствию кардинальных изменений, но проблема по-прежнему оставалась. Тогда я решил внести свою лепту в развитие открытого ПО и запилить положенный баг-репорт. Помимо стандартных логов, я решил попробовать подать звук вручную, без использования прокладок типа Phonon и PulseAudio.Вначале определяем устройства:
meklon@meklon-desktop:~/Музыка$ aplay -l
**** Список PLAYBACK устройств ****
карта 0: PCH [HDA Intel PCH], устройство 0: ALC1150 Analog [ALC1150 Analog]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
карта 0: PCH [HDA Intel PCH], устройство 1: ALC1150 Digital [ALC1150 Digital]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
карта 1: HDMI [HDA ATI HDMI], устройство 3: HDMI 0 [HDMI 0]
  Подустройства: 1/1
  Подустройство №0: subdevice #0
Первым делом проверяем, что у нас не стоит mute на низком уровне (спасибо за подсказки ValdikSS):
meklon@meklon-desktop:~/Музыка$ amixer set Master 100 unmute
Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 87
  Mono: Playback 87 [100%] [0.00dB] [on]
Теперь пытаемся подать звук напрямую, используя консольный всеядный mplayer:
meklon@meklon-desktop:~/Музыка$ amixer set Master 100 unmute
Simple mixer control 'Master',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 87
  Mono: Playback 87 [100%] [0.00dB] [on]

meklon@meklon-desktop:~/Музыка$ mplayer --ao=alsa:device=hw=0.0 0.mp3
MPlayer2 2.0-728-g2c378c7-2ubuntu3 (C) 2000-2012 MPlayer Team
Cannot open file '/home/meklon/.mplayer/input.conf': No such file or directory
Failed to open /home/meklon/.mplayer/input.conf.
Cannot open file '/etc/mplayer/input.conf': No such file or directory
Failed to open /etc/mplayer/input.conf.

Playing 0.mp3.
Detected file format: MP2/3 (MPEG audio layer 2/3) (libavformat)
[mp3 @ 0x7f43bdf90b40]max_analyze_duration 5000000 reached
[mp3 @ 0x7f43bdf90b40]Estimating duration from bitrate, this may be inaccurate
[lavf] stream 0: audio (mp3), -aid 0
Clip info:
 album_artist: Emma Chapplin
 track: 17
 title: Spente Le Stelle (Live Version)
 artist: Emma Shapplin
 album: Forever Gold
 genre: Classical
 date: 2000
Load subtitles in .
Selected audio codec: MPEG 1.0/2.0/2.5 layers I, II, III [mpg123]
AUDIO: 44100 Hz, 2 ch, s16le, 320.0 kbit/22.68% (ratio: 40000->176400)
AO: [alsa] 44100Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A: 6.5 (06.5) of 334.7 (05:34.7) 0.4%
И опять слушаем тишину. Тлен и безысходность. Windows при этом продолжает радовать нормальным звуком, исключая аппаратные проблемы. Ощутив в себе пробуждение бородатого тестера ПО, решаю перебрать все возможные варианты:
  • Ни один из дистрибутивов в live-cd версии не работает
  • Замена ядра на 3.17 сделало систему менее адекватной, но звук не появился
  • Поотключал физически видеокарту и SSD
  • Протер пыль на колонках
  • Повтыкал кабель в разные разъемы
  • Воскурил мануал перед портретиком Столлмана

Убийца — дворник

Как вы уже догадались из названия поста — проблема в Windows. И пофиг, что был миллион перезагрузок, включения и выключения, запуски со всех возможных носителей. Итак, барабанная дробь и решение проблемы в виде огромного костыля, перемотанного изолентой:Чтобы появился звук, нужно физически обесточить системный блок. Да. Именно обесточить. Если вы хотя бы один раз запустите Windows, то звук снова пропадет.Ребуты и обычное выключение не помогают. Windows при запуске что-то самым подлым образом делает с железом контроллера на материнской плате, делая его недоступным в Linux-системах. Вражеские происки не иначе. Так, как я не специалист в области низкоуровневого железа и ядра — оставляю поиски решения для более бородатых товарищей по несчастью. Кстати, я все-таки наткнулся потом на описание моего же бага уже после того, как выявил его причину. Пользуясь случаем хочу уточнить, что мне делать со своим баг-репортом? Как его смерджить с более ранним?UPD 4 Баг внесен в базу kernel.orgПросьба отписываться всех затронутых. Ссылка на BugzillaUPD 5 В процессе дебага с помощью темной магии вроде нащупали проблемуПосле ввода следующего в консоль звук появляется:
apt-get install alsa-tools
root@meklon-desktop:/home/meklon# hda-verb /dev/snd/hwC0D2 0x20 SET_COEF_INDEX 0x07
nid = 0x20, verb = 0x500, param = 0x7
value = 0x0
root@meklon-desktop:/home/meklon# hda-verb /dev/snd/hwC0D2 0x20 SET_PROC_COEF 0x7cb0
nid = 0x20, verb = 0x400, param = 0x7cb0
value = 0x0
UPD 6 Баг отмечен как решенныйФикс будет включен в ядро 3.18-rc5. Если кто-то может помочь в бэкпортировании — было бы замечательно.
Tags: звукlinuxядро linuxграбли повсюду
Hubs: Configuring Linux System administration
Total votes 121: ↑108 and ↓13 +95
Comments 146
Comments Comments 146

Popular right now