Как Windows коварно ломает звук в Linux или мучительные поиски бага
Вместо вступления Дешевая «комната страха» — темно и везде грабли.
Задумчиво поглядывая на падение в глубокие бездны коррекцию курса рубля, я решил, что оставаться со стремительно девальвирующей бумагой на руках смысла нет и пора обновить устаревшее железо. Выбор остановился на 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 © 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 @ 0×7f43bdf90b40]max_analyze_duration 5000000 reached [mp3 @ 0×7f43bdf90b40]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-системах. Вражеские происки не иначе. Так, как я не специалист в области низкоуровневого железа и ядра — оставляю поиски решения для более бородатых товарищей по несчастью. Кстати, я все-таки наткнулся потом на описание моего же бага уже после того, как выявил его причину. Пользуясь случаем хочу уточнить, что мне делать со своим баг-репортом? Как его смерджить с более ранним?