我正在开发一个非常简单的树莓派项目,其中Python脚本在后台运行并播放mp3
键盘输入。当我通过 SSH 连接到设备时手动启动脚本时,一切正常。但我希望脚本始终运行。我最初将其添加到rc.local
,然后将其切换为通过 crontab 运行@reboot
。在这两种情况下,脚本肯定都在运行。每次成功识别按键时我都会收到日志,因此脚本正在运行并执行声音。但是,没有声音发出。我尝试过Python的playsound
模块并运行一个mpg321
子进程。手动运行时两者都会输出声音,但启动时都不工作。
仅当我使用 USB 扬声器启动时自动运行脚本时才会发生这种情况。如果我在登录时手动运行它,扬声器就会工作。如果我在启动时将扬声器插入 3.5 毫米端口来运行它,它也可以工作。只是当使用 USB 扬声器启动时运行时,它不起作用。
我在脚本运行时打印lsusb
并输出。 aplay -l
USB 扬声器(https://www.amazon.com/dp/B075M7FHM1) 在脚本运行时肯定存在。
lsusb
输出(杰力绝对是音箱):
2023-09-17 19:37:45.976133: Bus 001 Device 005: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory
Bus 001 Device 004: ID 4c4a:4155 Jieli Technology UACDemoV1.0
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
aplay -l
输出(一旦卡1:UACDemoV10是扬声器):
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: UACDemoV10 [UACDemoV1.0], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
我使用所有内容的绝对路径,脚本肯定会运行,并且可以找到音频文件。只是实际上没有声音发出来。脚本运行时会识别 USB 扬声器。有没有更好的方法在启动时自动启动脚本?rc.local
环境是否cron
缺乏对 USB 设备的权限或访问权限?关于我的其他问题之一的注释说“rc.local 由 root 运行,因此无法访问用户 I/O”,但我认为用户的 crontab 不会有这个问题。