LINUX.ORG.RU

После перезагрузки нет звука

 , , ,


0

1

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’». После её выполнения:

  1. При выключенном gentoo-pipewire-launcher плееры нормально играют через ALSA, Firefox при проигрывании видео выдаёт ошибку «OpenCubeb() failed to init cubeb».
  2. При включённом от рута 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 дважды.
  3. При включённом от пользователся gentoo-pipewire-launcher MPV играет через Pipewire, Firefox играет видео без ошибок cubeb. Но ничего не слышно.
  4. В последнем случае 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 и перезагрузиться.

★★★★★

Последнее исправление: question4 (всего исправлений: 9)

Ответ на: комментарий от XMs

Системное дефолтное, судя по alsamixer, было PulseAudio.

После того, как я прибил процессы pipewire, дефолтным в alsamixer показывается HDA ATI SB, и медиаплееры заработали.

question4 ★★★★★
() автор топика
Ответ на: комментарий от XMs

При запуске из консоли:

# pipewire 
[E][10717.370216] spa.dbus     | [          dbus.c:  332 impl_connection_get()] Failed to connect to session bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
[E][10717.370364] mod.portal   | [ module-portal.c:  330 pipewire__module_init()] Failed to connect to session bus: Ошибка ввода/вывода
question4 ★★★★★
() автор топика
Ответ на: комментарий от XMs
$ equery u pipewire
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for media-video/pipewire-1.0.0-r1:
 U I
 - - X             : Enable audible bell for X11
 + + abi_x86_32    : 32-bit (x86) libraries
 + + bluetooth     : Enable Bluetooth Support
 + + dbus          : Enable dbus support for anything that needs it (gpsd, gnomemeeting, etc)
 + + doc           : Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
 - - echo-cancel   : Enable WebRTC-based echo canceller via media-libs/webrtc-audio-processing
 + + extra         : Build pw-cat/pw-play/pw-record
 + + ffmpeg        : Enable ffmpeg/libav-based audio/video codec support
 + + flatpak       : Enable Flatpak support
 - - gsettings     : Use gsettings (dev-libs/glib) to read/save used modules (useful for e.g. media-sound/paprefs
 + + gstreamer     : Add support for media-libs/gstreamer (Streaming media)
 - - ieee1394      : Enable FireWire/iLink IEEE1394 support (dv, camera, ...)
 - - jack-client   : Install a plugin for running PipeWire as a JACK client
 - - jack-sdk      : Use PipeWire as JACK replacement
 - - liblc3        : Allow loading LC3 plugins via media-sound/liblc3
 - - lv2           : Allow loading LV2 plugins via media-libs/lv2
 + + man           : Build and install man pages
 - - modemmanager  : Combined with USE=bluetooth, allows PipeWire to perform telephony on mobile devices.
 + - pipewire-alsa : Replace PulseAudio's ALSA plugin with PipeWire's plugin
 + + readline      : Enable support for libreadline, a GNU line-editing library that almost everyone wants
 - - roc           : Enable roc support for real-time audio streaming over the network, using media-libs/roc-toolkit. See
                     https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Network#roc
 + + sound-server  : Provide sound server using ALSA and bluetooth devices
 + + ssl           : Enable raop-sink support (needs dev-libs/openssl)
 - - systemd       : Enable use of systemd-specific libraries and features like socket activation or session tracking
 - - test          : Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
 - - v4l           : Enable support for video4linux (using linux-headers or userspace libv4l libraries)
 - - zeroconf      : Support for DNS Service Discovery (DNS-SD)

Решил попробовать пересобрать с pipewire-alsa.

question4 ★★★★★
() автор топика

Пересобрал с USE='pipewire-alsa'.

Запустил ещё раз gentoo-pipewire-launcher, PulseAudio виден, но звук в firefox не работает.

$ LANG=C pactl info 
Server String: /run/user/1000/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 46
Tile Size: 65472
User Name: root
Host Name: jet
Server Name: PulseAudio (on PipeWire 1.0.0)
Server Version: 15.0.0
Default Sample Specification: float32le 2ch 48000Hz
Default Channel Map: front-left,front-right
Default Sink: @DEFAULT_SINK@
Default Source: @DEFAULT_SOURCE@
Cookie: 6872:98d1
$ LANG='C' alsamixer 
cannot open mixer: Host is down

Пересобрал с USE='-pipewire-alsa'. alsamixer заработал. Звука в браузере нет.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

Запускаю вручную startx.

if [ -x /usr/bin/dbus-launch ]
then
        eval `dbus-launch --sh-syntax --exit-with-session`
        export DBUS_SESSION_BUS_ADDRESS
        export DBUS_SESSION_BUS_PID
fi

runcmd() {
        command -v $1 >/dev/null 2>&1

        if [ $? -eq 0 ] ; then
                "$@" &
        fi
}

runcmd pipewire
runcmd pipewire-pulse
runcmd wireplumber
HomerSexual
()
Ответ на: комментарий от mittorn

cubeb поддерживает alsa (пускай и криво), возможно это тормрзилла в скриптах сборки накосячила

В Mozilla Firefox специально отключили поддержку ALSA в 53 или 58 версии. Чтобы меньше работать.

Поэтому и пришлось написать apulse.

question4 ★★★★★
() автор топика
Ответ на: комментарий от HomerSexual

export DBUS_SESSION_BUS_ADDRESS
export DBUS_SESSION_BUS_PID

$ echo $DBUS_SESSION_BUS_ADDRESS $DBUS_SESSION_BUS_PID
unix:path=/tmp/dbus-dK7LOGSmNd,guid=cff9f7120ff4bc098bec922f658cff66
$ echo $DBUS_SESSION_BUS_PID

runcmd pipewire

Запускается при запуске KDE из /etc/xdg/autostart/pipewire.desktop, который запускает /usr/bin/gentoo-pipewire-launcher restart

pipewire-pulse

# pipewire-pulse 
[W][20105.200128] mod.protocol-pulse | [        server.c:  589 start_unix_server()] server 0x55dacb94d700: socket '/run/user/1000/pulse/native' is in use
[W][20105.200306] mod.protocol-pulse | [        server.c: 1021 servers_create_and_start()] pulse-server 0x55dacb94cf50: failed to start server on 'unix:/run/user/1000/pulse/native': Адрес уже используется
[E][20105.200336] mod.protocol-pulse | [  pulse-server.c: 5526 pw_protocol_pulse_new()] 0x55dacb94cf50: no servers could be started: Адрес уже используется
[E][20105.200397] pw.conf      | [          conf.c:  573 load_module()] 0x55dacb927690: could not load mandatory module "libpipewire-module-protocol-pulse": Адрес уже используется
[E][20105.200615] default      | [      pipewire.c:  105 main()] failed to create context: Адрес уже используется

runcmd wireplumber

# wireplumber 
Failed to connect to bus: Соединение закрыто
M 13:28:44.475323        wireplumber ../wireplumber-0.4.14/src/main.c:364:on_disconnected: disconnected from pipewire
question4 ★★★★★
() автор топика
Ответ на: комментарий от grem

Сколько у тебя звуковых устройств (включая hdmi в видеокарте) и какое сейчас активно?

Ты про вывод lspci или про то, что видят программы? Первых — два.

# lspci | grep -i audio
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA)
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cayman/Antilles HDMI Audio [Radeon HD 6930/6950/6970/6990]

Без pipewire по умолчанию используется первое.

Когда запущен pipewire, собранный без pipewire-alsa, alsamixer видит 3 карты:
дефолтную PulseAudio на чипе PulseAudio,
HDA ATI SB на чипе Realtek ALC887-VD,
HDA ATI HDMI на чипе ATI R6xx HDMI.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

Уже давно нет никаких умолчаний: какая первая определиться, та и используется по умолчанию. Мне из-за этого пришлось явно конфиг настраивать, чтобы внешнюю звуковуху использовать, а не hdmi в видеокарте (встройку в биосе можно отключить хотя бы). Правда я на alsa сижу.

grem ★★★★★
()
Ответ на: комментарий от HomerSexual

gentoo-pipewire-launcher

гентупроблемы? что там в этом файле?

https://pastebin.com/JmjyaNUU

pipewire-pulse

пульсу надо отключить

pipewire-pulse — из пакета pipewire. Ты ж сам выше писал её запускать. pulseaudio нет и не было.

Failed to connect to bus: Соединение закрыто

dbus сервис запущен?

Да. Dynamic Runlevel: needed/wanted

question4 ★★★★★
() автор топика
Ответ на: комментарий от HomerSexual

кстати, а ты часом не от рута запускаешь?

Смотря что. /usr/bin/pipewire и /usr/bin/pipewire -c pipewire-pulse.conf при старте иксов запускаются от рута. Команды выше — видно по промпту: $ или #. Во всех случаях я сперва пытался без рута.

question4 ★★★★★
() автор топика
Ответ на: комментарий от grem

Уже давно нет никаких умолчаний: какая первая определиться, та и используется по умолчанию. Мне из-за этого пришлось явно конфиг настраивать, чтобы внешнюю звуковуху использовать, а не hdmi в видеокарте (встройку в биосе можно отключить хотя бы). Правда я на alsa сижу.

Значит у меня всегда первой определяется встроенная. Которая Intel и Realtek.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

я к тому, что pulseaudio не должен быть запущен, ни как сервис ни из автозапуска

pulseaudio нет и не было

как нету, ты же пипу с поддержкой пульсы собирал? или в генте зависимости времени сборки потом удаляются? в любом случае libpulse должна быть

и еще $ echo $XDG_RUNTIME_DIR, возможно в этом проблема. кстати говоря, когда я собирал без поддержки пульсы, приходилось настраивать ~/.asoundrc вручную, потому что аудиокарта так же неправильно определялась

HomerSexual
()
Последнее исправление: HomerSexual (всего исправлений: 1)
Ответ на: комментарий от question4

pipewire и все с ним связанное должно запускаться от имени пользователя, стартовавшего сессию, иначе не будет работать, т.к. оно взаимодействует с пользовательской сессией dbus.

Когда запускаешь, проверь что у pipewire есть доступ ко всем связанным с dbus переменным окружения. strings /proc/$pipewire_pid/environ например.

У меня вот так:

$ strings /proc/$(pgrep pipewire-pulse)/environ | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

также проверь, что у тебя больше не запускаются никакие pulseaudio, и что firefox собран с use-флагами dbus и pulseaudio.

Lrrr ★★★★★
()
Последнее исправление: Lrrr (всего исправлений: 4)
Ответ на: комментарий от Lrrr

$ strings /proc/$(pgrep pipewire-pulse)/environ | grep DBUS

Процесса pipewire-pulse у меня нет. Процессов pipewire 2 штуки. Оба от пользователя недоступны. От рута обоим выдаёт DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/dbus-dK7LOGSmNd,guid=cff9f7120ff4bc098bec922f658cff66. Эта же переменная доступна и без рута.

pipewire и все с ним связанное должно запускаться от имени пользователя, стартовавшего сессию, иначе не будет работать, т.к. оно взаимодействует с пользовательской сессией dbus.

От чьего имени запускаются файлы *.desktop?

также проверь, что у тебя больше не запускаются никакие pulseaudio, и что firefox собран с use-флагами dbus и pulseaudio.

Хорошее замечание. Я помню, что месяц назад пересобирал с его USE=«pulseaudio», но сейчас проверил — он почему-то с USE=«-pulseaudio».

И остаётся вопрос, что делать с медиаплеерами?

question4 ★★★★★
() автор топика
Ответ на: комментарий от HomerSexual

я к тому, что pulseaudio не должен быть запущен, ни как сервис ни из автозапуска

pulseaudio нет и не было

как нету, ты же пипу с поддержкой пульсы собирал? или в генте зависимости времени сборки потом удаляются? в любом случае libpulse должна быть

media-libs/libpulse есть. «Нет и не было» говорил про сервис.

echo $XDG_RUNTIME_DIR

$ echo $XDG_RUNTIME_DIR
/run/user/1000

Заглянул туда. Есть сокеты pipewire-0 и pipewire-0-manager, с правами root:root srwxr-xr-x Этого достаточно, или нужно право на запись?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

выше правильно сказали, должно быть запущено от пользователя

Заглянул туда. Есть сокеты pipewire-0 и pipewire-0-manager, с правами root:root srwxr-xr-x Этого достаточно, или нужно право на запись?

честно говоря не знаю, я экспортирую переменную в профиле оболочки:

export XDG_RUNTIME_DIR="/tmp/$(id -u)-xdg_runtime_dir"
[ -d "${XDG_RUNTIME_DIR}" ] || (
        mkdir -p "${XDG_RUNTIME_DIR}"
        chmod 0700 "${XDG_RUNTIME_DIR}"
)
~$ ls -l /tmp/1000-xdg_runtime_dir/|grep pipe
srwxr-xr-x 1 mf mf  0 Dec 28 14:48 pipewire-0=
srwxr-xr-x 1 mf mf  0 Dec 28 14:48 pipewire-0-manager=
-rw-r----- 1 mf mf  0 Dec 28 14:48 pipewire-0-manager.lock
-rw-r----- 1 mf mf  0 Dec 28 14:48 pipewire-0.lock
HomerSexual
()
Последнее исправление: HomerSexual (всего исправлений: 1)
Ответ на: комментарий от question4

по идее без разницы. Firefox и прочие обычно стучатся по пульсовому сокету, который создается процессом pipewire-pulse и по умолчанию должен быть доступен по адресу /run/user/1000/pulse/native

Lrrr ★★★★★
()
Ответ на: комментарий от question4

И ещё раз: что делать с media-video/mplayer и media-video/vlc? Пересобрать с USE=pulseaudio?

чаще всего так делают. Но к пайпвари можно и через alsa стучаться, там есть флаг pipewire-alsa.

А вообще в гентушной вики очень хорошо все описано, как я смотрю. https://wiki.gentoo.org/wiki/PipeWire

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Но к пайпвари можно и через alsa стучаться, там есть флаг pipewire-alsa.

С ним mplayer тоже не работает.

https://wiki.gentoo.org/wiki/PipeWire

В ноябре я делал по этой инструкции, но сейчас обнаруживаю сильное расхождение между описанным там, и тем, что у меня. Не знаю, в чём проблема. Возможно, закрыл make.conf без сохранения.

Делаю по новой.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от HomerSexual

Вроде как для использования с альсой надо установить alsa-ucm-conf. Есть что-то в /etc/alsa/conf.d/?

8 файлов. Из них 7 — симлинки на файлы в /usr/share/alsa/alsa.conf.d/

question4 ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

И что это должно мне сказать? Я этим документом пользовался с самого начала.

Как диагностировать неправильно выданные права?
Зачем нужен rtkit?
Что дают pipewire-alsa и -pipewire-alsa?
Как использовать TiMidity++, чтобы они не конфликтовали с PipeWire?
Как установить, который из перечисленных способов запуска gentoo-pipewire-launcher работает правильно?

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)

С ALSA MPV перкращал проигрывать звук при скорости воспроизведения выше 4-кратной. Сейчас звук есть до 8.00-кратной включительно. Не знаю, дело в PipeWire, или в новых версиях MPV.

question4 ★★★★★
() автор топика
Ответ на: комментарий от HomerSexual

Да, работает. Нужно было остановить TiMidity и добавить пользователя в группу pipewire. Но остался ряд вопросов.

  1. Какая разница между pipewire-alsa и -pipewire-alsa?
  2. Необходим ли rtkit?
  3. Как проявляется баг wireplumber, мешающий пользоваться nohup? Всё отваливается при закрытии терминала?
  4. Как использовать сервер timidity с pipewire?
question4 ★★★★★
() автор топика