mpd 仅当以 root 身份运行时才能使用 alsa 声音设备 - 我如何以非 root 身份运行它

mpd 仅当以 root 身份运行时才能使用 alsa 声音设备 - 我如何以非 root 身份运行它

我尝试使用 alsa(pulseaudio 已移除)在 fedora 23 上运行 mpd。但是,当我以用户“mpd”身份运行 mpd 时,我得到了

alsa_output: Error opening default ALSA device: Permission denied

所以我以 root 用户身份运行它,一切都很好。好吧,权限问题 - 我只是不明白为什么它不能以 mpd 用户身份运行 - 权限对我来说看起来没问题:

/dev/snd:
total 0
crw-rw----+ 1 root audio 116,  0 Jan  1  1970 controlC0
crw-rw----+ 1 root audio 116, 16 Jan  8 20:38 pcmC0D0p
crw-rw----+ 1 root audio 116, 17 Jan  1  1970 pcmC0D1p
crw-rw----+ 1 root audio 116,  1 Jan  1  1970 seq
crw-rw----+ 1 root audio 116, 33 Jan  1  1970 timer
[root@sh02 ~]# grep audio /etc/group
audio:x:63:isaac,mpd
[root@sh02 ~]# getenforce 
Permissive

当然,我已经重新启动以确保一切都正确初始化。有人知道缺少什么才能让 mpd 访问我的音频设备吗?我可能会添加一些 acl 以允许 mpd 显式访问 - 但据我所知,组成员身份应该足够了???

编辑 这是 mpd 配置文件的权限:

-rw-r-----. 1 root root system_u:object_r:mpd_etc_t:s0 13585 Jan  8 22:04 /etc/mpd.conf

请注意,如果使用脉冲输出插件,mpd 可以以用户 mpd 身份运行。但由于脉冲确实会卡顿,有时也无法启动,因此我决定不使用脉冲,而是使用 alsa 输出。

任何家庭中都没有.mpdconf 文件。

答案1

添加 acls 以明确允许 mpd 访问声音设备解决了该问题:

sudo setfacl -m u:mpd:rw /dev/snd/*

在执行此操作之前,acl 是这样的:

# file: dev/snd/controlC0
# owner: root
# group: audio
user::rw-
user:lightdm:rw-
group::rw-
mask::rw-
other::---

# file: dev/snd/pcmC0D0p
# owner: root
# group: audio
user::rw-
user:lightdm:rw-
group::rw-
mask::rw-
other::---

# file: dev/snd/pcmC0D1p
# owner: root
# group: audio
user::rw-
user:lightdm:rw-
group::rw-
mask::rw-
other::---

# file: dev/snd/seq
# owner: root
# group: audio
user::rw-
user:lightdm:rw-
group::rw-
mask::rw-
other::---

# file: dev/snd/timer
# owner: root
# group: audio
user::rw-
user:lightdm:rw-
group::rw-
mask::rw-
other::---

由于 mpd 已经是 audio 组的成员,这些 acl 应该已经足够了。我会给能解释这里发生了什么的人悬赏。

答案2

您必须将用户添加到音频组:

usermod -aG 音频 [用户]

注销并重新登录。您应该能够使用音频。

相关内容