在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。
我想我已经解决了。它是设计和权限问题的混合体。
根据/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-access
。timidity
将以他自己的用户身份运行,因此我们也需要添加它。在我的情况下,我希望用户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] 删除。
我来说两句