非root用户无法使用pipewire播放音频

非root用户无法使用pipewire播放音频

我有一台使用管道线的AlmaLinux 9主机。以 root 身份登录我可以毫无问题地播放音频文件。但与任何其他用户发出相同的命令会导致“主机已关闭”错误,并且不会播放音频;例如:

pw-play -v /data/sounds/intercom-bong.wav
error: pw_context_connect() failed: Host is down

另外,如果作为根用户我跑

sudo /usr/bin/pw-play -v /data/sounds/intercom-bong.wav
error: pw_context_connect() failed: Host is down

我得到完全相同的错误。我不明白这是怎么可能的,因为 sudo 意味着以 root 身份运行它。

关于如何解决这个问题的想法?

答案1

我不知道 RHEL 或 Alma Linux 是如何做到这一点的,但在 Debian 上,创建的音频设备由udev拥有root,属于audio具有 660 权限的组。

在我的系统上,看起来像这样:

$ ls -lF /dev/snd/
total 0
drwxr-xr-x  2 root root      100 Jul 30 20:51 by-path/
crw-rw----+ 1 root audio 116, 13 Aug  1 21:25 controlC0
crw-rw----+ 1 root audio 116, 12 Aug  1 21:25 controlC1
crw-rw----+ 1 root audio 116, 18 Aug  1 21:25 controlC2
crw-rw----+ 1 root audio 116, 11 Aug  1 21:25 hwC0D0
crw-rw----+ 1 root audio 116,  8 Aug  1 21:25 hwC1D0
crw-rw----+ 1 root audio 116, 17 Aug  1 21:25 hwC2D0
crw-rw----+ 1 root audio 116,  4 Aug  6 19:26 pcmC0D3p
crw-rw----+ 1 root audio 116,  5 Aug  6 19:26 pcmC0D7p
crw-rw----+ 1 root audio 116,  9 Aug  6 19:26 pcmC0D8p
crw-rw----+ 1 root audio 116, 10 Aug  6 19:26 pcmC0D9p
crw-rw----+ 1 root audio 116,  2 Aug  6 19:26 pcmC1D3p
crw-rw----+ 1 root audio 116,  3 Aug  6 19:26 pcmC1D7p
crw-rw----+ 1 root audio 116,  6 Aug  6 19:26 pcmC1D8p
crw-rw----+ 1 root audio 116,  7 Aug  6 19:26 pcmC1D9p
crw-rw----+ 1 root audio 116, 15 Aug  6 19:26 pcmC2D0c
crw-rw----+ 1 root audio 116, 14 Aug 10 09:34 pcmC2D0p
crw-rw----+ 1 root audio 116, 16 Aug  6 19:26 pcmC2D1p
crw-rw----+ 1 root audio 116,  1 Jul 30 20:51 seq
crw-rw----+ 1 root audio 116, 33 Aug  1 21:25 timer

你应该:

  1. 检查您的系统以找出 /dev/snd 设备节点的组和权限(可能是audio660,与 debian 上的相同),

  2. 确保应该有权访问音频设备的用户位于该组中。 (对组成员身份的更改将需要使用newgrp或注销并在将当前登录的用户添加到该组后再次登录)

  3. 确保 pipelinewire 实际上正在为用户运行。例如,在我的一台运行 pipelinewire 的机器上:

$ ps u -C pipewire
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
username    6914  0.0  0.0 105708  8836 ?        S<sl Jul30   0:00 /usr/bin/pipewire
username    6915  0.0  0.0  94680  4948 ?        Ssl  Jul30   0:00 /usr/bin/pipewire -c filter-chain.conf

pipewire应该在用户登录时自动启动。如果它没有运行,请检查用户的~/.xsession-errors文件 - 如果它启动然后死掉,那里可能有线索。

如果它根本没有启动,请检查该用户的窗口管理器的会话启动配置。如果您使用 xfce,那将位于Settings Manager -> Settings and Startup -> Application Autostart.如果您正在使用 gnome 或其他一些 WM,我不知道 - 自从我使用 gnome 以来已经有 10 多年了……但它可能会是类似名称的东西。

相关内容