Gentoo. Несколько недель аптайма, неоднократно апдейтился, не перезагружаясь. Помимо прочего, пересобирал Firefox с поддержкой pipewire вместо apulse, перезапускал, работало. Медиаплееры тоже апдейтил и перезапускал, работали.
На сутки выключил машину, сейчас включил, и звук нигде не работает. Куда копать?
Результат alsa-info.sh: https://pastebin.com/PAMmUP9v (Вкратце: чип на материнской плате и HDMI, колонки на первом.)
Фаерфокс при проигрывании звука пишет:
[Child 6948, MediaDecoderStateMachine #4] WARNING: 7f9929fbf280 Could not set cubeb stream name.: file /var/tmp/portage/www-client/firefox-115.5.0/work/firefox-115.5.0/dom/media/AudioStream.cpp:321
mplayer:
couldn't open play stream: Device or resource busy
ao2: can't open sndio
Дополнение: Пока выяснил, что при загрузке запустились 2 процесса pipewire, и было видно устройство PulseAudio. После того, как я убил pipewire, плееры смогли работать через ALSA. Звука в Фаерфоксе пока нет, так как ему нужен PulseAudio.
Дополнение 2: Каким-то образом я пропустил стадию «пересобрать мир с USE=‘pulseaudio’». После её выполнения:
- При выключенном gentoo-pipewire-launcher плееры нормально играют через ALSA, Firefox при проигрывании видео выдаёт ошибку «OpenCubeb() failed to init cubeb».
- При включённом от рута gentoo-pipewire-launcher MPV выдаёт ошибку «ALSA lib /var/tmp/portage/media-plugins/alsa-plugins-1.2.7.1-r1/work/alsa-plugins-1.2.7.1/pulse/pcm_pulse.c:758:(pulse_prepare) PulseAudio: Unable to create stream: Timeout», Firefox надолго задумывается и выдаёт ту же ошибку cubeb дважды.
- При включённом от пользователся gentoo-pipewire-launcher MPV играет через Pipewire, Firefox играет видео без ошибок cubeb. Но ничего не слышно.
- В последнем случае wpctl status выдаёт следующее:
$ wpctl status
PipeWire 'pipewire-0' [1.0.0, oleg@jet, cookie:679913454]
└─ Clients:
31. pipewire [1.0.0, oleg@jet, pid:14327]
33. WirePlumber [1.0.0, oleg@jet, pid:14320]
34. WirePlumber [export] [1.0.0, oleg@jet, pid:14320]
45. Firefox [1.0.0, oleg@jet, pid:13488]
55. mpv [1.0.0, oleg@jet, pid:18703]
61. wpctl [1.0.0, oleg@jet, pid:18721]
Audio
├─ Devices:
│ 44. Cayman/Antilles HDMI Audio [Radeon HD 6930/6950/6970/6990] [alsa]
│
├─ Sinks:
│ * 49. Cayman/Antilles HDMI Audio [Radeon HD 6930/6950/6970/6990] Цифровой стерео (HDMI) [vol: 1.00]
│
├─ Sink endpoints:
│
├─ Sources:
│
├─ Source endpoints:
│
└─ Streams:
50. Firefox
52. output_FL > HDMI 0 *:playback_FL [init]
54. output_FR > HDMI 0 *:playback_FR [init]
56. mpv
57. output_FR > HDMI 0 *:playback_FR [active]
59. output_FL > HDMI 0 *:playback_FL [active]
Video
├─ Devices:
│
├─ Sinks:
│
├─ Sink endpoints:
│
├─ Sources:
│
├─ Source endpoints:
│
└─ Streams:
Settings
└─ Default Configured Node Names:
Правильно ли я понимаю, что pipewire-pulseaudio играет звук через видеокарту вместо материнской платы? Как переключить? Как зафиксировать это перманентно?
И как запускать gentoo-pipewire-launcher под пользователем, если он запускается из *.desktop-файла при старте KDE?
Дополнение 3: Перезагрузил систему после пересборки. Теперь gentoo-pipewire-launcher запускается от того пользователя, который запускает иксы. Видимо, в прошлый раз не были прописаны какие-то права. Остался вопрос: как переключить PulseAudio на материнскую плату?
Дополнение 4: Как выяснилось, SDL2 была собрана с -pulseaudio и -pipewire.
Дополнение 5: fuser -v /dev/snd/*
показало, что все устройства держит timidity. После отключения демона Timidity++ стали видны другие карты:
$ wpctl status
PipeWire 'pipewire-0' [1.0.0, oleg@jet, cookie:48267698]
└─ Clients:
31. pipewire [1.0.0, oleg@jet, pid:20833]
33. WirePlumber [1.0.0, oleg@jet, pid:20826]
34. WirePlumber [export] [1.0.0, oleg@jet, pid:20826]
51. Firefox [1.0.0, oleg@jet, pid:3822]
60. mpv [1.0.0, oleg@jet, pid:7113]
71. wpctl [1.0.0, oleg@jet, pid:7138]
Audio
├─ Devices:
│ 42. Встроенное аудио [alsa]
│ 44. Cayman/Antilles HDMI Audio [Radeon HD 6930/6950/6970/6990] [alsa]
│
├─ Sinks:
│ * 41. Встроенное аудио Аналоговый стерео [vol: 0.40]
│ 49. Cayman/Antilles HDMI Audio [Radeon HD 6930/6950/6970/6990] Цифровой стерео (HDMI) [vol: 1.00]
│
├─ Sink endpoints:
│
├─ Sources:
│ * 40. Встроенное аудио Аналоговый стерео [vol: 1.00]
│
├─ Source endpoints:
│
└─ Streams:
58. Firefox
53. output_FR > ALC887-VD Analog:playback_FR [init]
55. output_FL > ALC887-VD Analog:playback_FL [init]
61. mpv
62. output_FL > ALC887-VD Analog:playback_FL [active]
63. output_FR > ALC887-VD Analog:playback_FR [active]
66. Firefox
67. output_FL > ALC887-VD Analog:playback_FL [active]
68. output_FR > ALC887-VD Analog:playback_FR [active]
Video
├─ Devices:
│
├─ Sinks:
│
├─ Sink endpoints:
│
├─ Sources:
│
├─ Source endpoints:
│
└─ Streams:
Settings
└─ Default Configured Node Names:
Фаерфокс, MPV и VLC стали нормально проигрывать звук. Mplayer почему-то стал играть один из файлов в 2 с небольшим раза быстрее. Потом пришёл в норму.
Следующий вопрос: как подружить pipewire с timidity? Не то, чтобы я им много пользовался, но перфекционизм давит.
Дополнение 6: И с media-video/pipewire[-pipewire-alsa], и с media-video/pipewire[pipewire-alsa], если они уже загружены, timidity не запускается.
Неполный ответ: Нужно убедиться, что всё сделано строго по https://wiki.gentoo.org/wiki/PipeWire (USE, группы, rtkit), отключить Timidity и перезагрузиться.