alsa / timidity无法在Debian 10上使用root用户和init.d识别默认设备

萨缪尔·狄拉(Samuele Diella)

在Debian 10中,当我timidity以普通用户身份以alsa音序器启动时,完全没有问题。它完美无瑕。

samuele@INSPIRON-17:~$ timidity -Os -iA
Requested buffer size 32768, fragment size 8192
ALSA pcm 'default' set buffer size 32768, period size 8192 bytes
TiMidity starting in ALSA server mode
Opening sequencer port: 128:0 128:1 128:2 128:3

当我切换到root用户时,它不再起作用:

root@INSPIRON-17:~# timidity -Os -iA
ALSA lib pcm_dmix.c:1108:(snd_pcm_dmix_open) unable to open slave
Can't open pcm device 'default'.
Couldn't open ALSA pcm device (`s')

似乎找不到“默认”设备。我知道我可以强迫它创建~/.asoundrc文件或全局文件/etc/asound.conf,但普通用户不需要它。似乎它正在访问global /usr/share/alsa/alsa.conf,而没有访问root

所以我的问题是:如何在不编写新配置文件的情况下解决该问题?是否可以root访问全局文件,或者我丢失了什么?

系统正在运行Debian 10。

萨缪尔·狄拉(Samuele Diella)

我想我已经解决了。它是设计和权限问题的混合体。

根据/usr/share/alsa/alsa.conf,所有conf均从/etc/alsa/conf.d加载。在那里,有一个99-pulse.conf链接到/usr/share/alsa/pulse-alsa.conf在最后一个文件中,启动pulse时将其设置为默认的alsa设备pulseaudio,并且它不会在启动时启动,而仅在用户登录时启动。

根无法使用胆小,主要是因为他缺乏访问脉冲的特权,这是第一个权限问题。

尝试在用户登录后启动怯as作为服务的事件不起作用,因为程序包提供的init脚本timidity-daemon正在尝试(通过start-stop-daemon)以用户怯的方式启动该进程,但是这种行为是不允许的,这是第二个权限问题。而且由于缺少根权限,即使更改脚本也会切断用户更改部分,因此该部分不起作用。(对我而言)唯一的困扰是,在安装软件包timidity-daemon之后,权限问题就没有发生,但是在第一次重新启动后,它就停止了工作。

无论如何,它可以通过两种方式修复。

第一种简单且侵入性较小的解决方案是根本不使用该程序包timidity-daemon,而是timidity.service在下创建一个自定义文件/usr/lib/systemd/user/

在安装所需的软件包之前

sudo apt-get install timidity fluid-soundfont-gm

然后/usr/lib/systemd/user/timidity.service使用此内容创建文件(使用sudo)

[Unit]
Description=Timidity
After=pulseaudio.service

[Service]
Type=simple
ExecStart=/usr/bin/timidity -Os -iA

[Install]
WantedBy=pulseaudio.service

现在安装并启动它

systemctl --user enable timidity.service
systemctl --user start timidity.service

完成了。

第二种解决方案是在整个系统的引导时间启动脉冲,并允许root和怯的人使用它,从安全角度来看,这不是最佳选择。无论如何,为了使pulse / timidity可以在整个系统范围内作为根工作,这些步骤是:(受https://raven4.cz/wp/pulseaudio-in-system-wide-mode/启发

首先安装基本软件包

sudo apt-get install timidity timidity-daemon fluid-soundfont-gm

编辑(使用sudo)/etc/pulse/daemon.conf,搜索行

; system-instance = no

取消注释并将其设置为是

system-instance = yes

现在删除文件/etc/pulse/system.pa并将符号链接default.pa作为system.pa

sudo rm /etc/pulse/system.pa
sudo ln -s /etc/pulse/default.pa /etc/pulse/system.pa

现在编辑(sudo)/etc/pulse/default.pa,找到行

load-module module-native-protocol-unix

并以这种方式进行更改

load-module module-native-protocol-unix auth-group-enable=true auth-group=pulse-access socket=/tmp/pulse-socket

现在编辑(sudo)/etc/pulse/client.conf,找到行

; default-server =

取消注释并以这种方式设置

default-server = unix:/tmp/pulse-socket

现在,我们需要在帐​​户中添加我们想要访问pulseaudio的每个用户pulse-accesstimidity将以他自己的用户身份运行,因此我们也需要添加它。在我的情况下,我希望用户root和我的主要用户samuele,所以我将这样做:

usermod -a -G pulse-access root
usermod -a -G pulse-access samuele
usermod -a -G pulse-access timidity

现在我们需要创建自定义pulseaudio.service文件。所以/etc/systemd/system/pulseaudio.service用这个内容创建一个文件

[Unit]
Description=Pulseaudio

[Service]
User=root
Type=forking
ExecStart=/bin/pulseaudio --realtime --daemonize
Restart=always

[Install]
WantedBy=graphical.target

现在该纠正怯tim了。

检查它是否与

aconnect -lo | grep -i timidity

如果没有,请启动它

sudo service timidity start

再次检查,如果一切正常,是否在其中生成了服务文件 /run/systemd/generator.late/timidity.service

复制到 /etc/systemd/system

sudo cp /run/systemd/generator.late/timidity.service /etc/systemd/system/timidity.service

现在对其进行编辑(sudo),然后在文件中开始搜索

After=remote-fs.target

并以这种方式进行更改

After=remote-fs.target pulseaudio.service

在文件末尾添加这两行以使其可安装

[Install]
WantedBy=multi-user.target

现在该进行清洁了。停止怯id并将其从init.d中删除

sudo service timidity stop
sudo update-rc.d -f timidity remove

停止每个用户的pulseaudio,禁用它并清理您的userdir配置

systemctl --user stop pulseaudio.socket
systemctl --user stop pulseaudio.service
systemctl --user disable pulseaudio.socket
systemctl --user disable pulseaudio.service
rm -Rf ~/.config/pulse/

现在启用新服务

sudo systemctl enable /etc/systemd/system/pulseaudio.service
sudo systemctl enable /etc/systemd/system/timidity.service

重新启动计算机aaaand ..完成!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Liquidsoap无法识别Alsa

ALSA:pcm设备和asoundrc

VLC:无法打开ALSA设备“默认”:连接被拒绝

使用ALSA设置虚拟捕获设备

alsa工具arecord无法识别Arch Linux上的plughw:1,0

如何使用 alsa 选择默认声卡?

ATI驱动程序和引导问题“启动Timidity alsa midi仿真”

使用ALSA和Pulseaudio录制来自多个设备的音频

所有ALSA设备的默认音量

为Pulseaudio设置默认的ALSA设备

Debian 10中的alsa-base.conf在哪里?

使Google Talk使用正确的Alsa声音设备进行输入

如何在同一音频设备上同时使用JACK和Pulseaudio / ALSA?

带插孔和Alsa的AmSynth 1.5.1(JACK初始化失败:错误:无法打开ALSA MIDI界面)

列出所有ALSA设备

默认的 pcm ALSA 设备究竟是什么?

在.asoundrc中为ALSA设置新的默认音频播放设备

mpd:无法读取“我的ALSA设备”的混音器:无此类混音器控件:PCM

setlistener:jack 和 alsa 错误

Debian虚拟输出Alsa挂钩失败

在纯 ALSA 中复制音频以在本地设备上播放并通过 trx 流式传输

如何创建同时输出到HDMI和耳机插孔的ALSA虚拟设备?

如何使PulseAudio和Ubuntu检测与Alsa驱动程序相同的音频设备

Alsa和Alsactl:控制文件的初始化,存储和默认配置

使用ALSA循环设备从基于Web的音频播放器录制音频

ALSA:如何临时更改输出设备

PulseAudio如何确定哪些ALSA设备可用?

UDP上的wav文件无法在Alsa-lib的unix中正确播放

无法在TI am335x上配置alsa-utils