当前位置: 首页 > news >正文

树莓派4B+Ubuntu20.04播放开机音乐

开机音乐需求介绍

需求:为了方便确认树莓派已经正常启动,希望播放开机音乐来提示。

硬件:没有耳机线的USB音箱

软件:mplayer, 或其他的无需界面的软件

设置流程(踩坑记录)

步骤一:验证问题,手动切换默认输出设备

使用PulseAudio命令行工具列出所有音频设备:pactl list short sinks

你会看到类似这样的输出,其中 alsa_output.usb-... 很可能是你的USB音箱:0	alsa_output.pci-0000_01_00.1.hdmi-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED
1	alsa_output.usb-Generic_USB_Audio_Device-00.analog-stereo	module-alsa-card.c	s16le 2ch 44100Hz	SUSPENDED
第一列是设备编号,第二列是设备名称。将默认输出设备切换到你的USB音箱的设备名称:pactl set-default-sink alsa_output.usb-Generic_USB_Audio_Device-00.analog-stereo
这种方式比使用编号更可靠,不必担心换到其他USB口插入。

如果这个方法能播放声音,说明根本原因就是系统开机时选错了默认设备。请继续下面的步骤。


步骤二:配置PulseAudio自动切换到USB设备

建一个PulseAudio的配置文件,当检测到某个特定的USB声卡时,自动将其设置为默认设备。

需要获取你USB音箱的唯一标识符:pactl list short sinks | grep usb记下完整的设备名称,例如 alsa_output.usb-Generic_USB_Audio_Device-00.analog-stereo。你只需要品牌和型号部分,比如 Generic_USB_Audio_Device。创建PulseAudio的默认设备规则文件:sudo nano /etc/pulse/default.pa在文件末尾,添加以下规则。请将 YOUR_DEVICE_IDENTIFIER 替换为你上一步记下的标识符(例如 Generic_USB_Audio_Device)。# 自动将特定USB音频设备设为默认
.ifexists module-switch-on-connect.so
load-module module-switch-on-connect
.endif
重要提示: 现代PulseAudio版本通常已经加载了 module-switch-on-connect 模块。你只需要确保它没有被注释掉(行首没有#)。如果已经有了,就无需重复添加。如果添加后无效,可以尝试更精确的匹配规则:# 更精确地匹配USB音箱并设为默认
set-default-sink alsa_output.usb-YOUR_DEVICE_IDENTIFIER-00.analog-stereo
保存并退出(在nano中按 Ctrl+X,然后按 Y,最后按回车)。重启PulseAudio服务以使配置生效:pulseaudio -k
等待几秒钟,PulseAudio会自动重启。或者最简单的方法是注销并重新登录。

步骤三:解决“断电后设备消失”问题,禁止USB端口电源管理

有时,操作系统为了省电,会在关机或休眠时给USB端口断电,导致下次启动时设备未能及时初始化。

编辑GRUB配置文件:sudo nano /etc/default/grub找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,在引号内的现有参数后面添加 usbcore.autosuspend=-1。例如,修改后可能看起来像这样:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"
这个参数告诉内核禁止所有USB设备的自动挂起功能。保存文件后,更新GRUB配置:sudo update-grub重启系统。

问题1.  开机完成后插上音箱正常响,再次开机却不响,再次重新拔掉插入又能响了,为什么?

带耳机和不带耳机就差在这里了。

带耳机的,USB只是作为供电。系统开机时,已经自动加载了耳机的驱动。

不带耳机的,USB既要供电还要传输数据。因此需要在系统开机的时候,启动USB音箱的驱动。

问题2. 为什么开机音乐响了两次?在初次打开浏览器时又播放了一次?

原因:PulseAudio 守护进程的按需启动

第一次有程序请求音频时(如浏览器),PulseAudio 才真正启动。PulseAudio启动触发了音乐播放脚本。

经过排查发现,如下的设置会导致上面的问题:

pi@raspberrypi:~/.config/autostart$ ll
总用量 16
drwxrwxr-x  2 pi pi 4096 9月  26 16:18 ./
drwx------ 17 pi pi 4096 9月  25 20:38 ../
-rw-rw-r--  1 pi pi  191 9月  26 16:12 startup-sound.desktop
-rwxrwxr-x  1 pi pi  467 9月  26 15:58 play_sound.sh*

play_sound.sh是播放音乐的脚本。在脚本开头添加详细日志以定位问题。

echo "$(date): 脚本被调用,进程树: $(pstree -s $$)" >> /tmp/audio_debug.log
echo "环境变量: $DESKTOP_SESSION $XDG_CURRENT_DESKTOP" >> /tmp/audio_debug.log

再次开机并查看日志发现,打开音乐的脚本被调用的流程如下:

2025年 09月 26日 星期五 15:59:26 CST: 脚本被调用,进程树: systemd---systemd---gnome-session-b---play_startup_so---pstree

启动这个流程的程序在~/.config/autostart/,就是startup-sound.desktop。其中的设置和下面的重复了。在startup-sound.desktop中注释掉启动play_sound.sh的代码即可。

pi@raspberrypi:~/.config/systemd/user$ ll
总用量 16
drwxrwxr-x 3 pi pi 4096 9月  26 16:46 ./
drwxrwxr-x 3 pi pi 4096 9月  25 19:30 ../
drwxr-xr-x 2 pi pi 4096 9月  25 19:32 default.target.wants/
-rw-rw-r-- 1 pi pi  357 9月  25 19:59 startup-sound.service


http://www.dtcms.com/a/411932.html

相关文章:

  • 贵州 做企业网站的流程建设网站的岗位职责
  • 运筹学——整数规划之0-1型整数线性规划,分支定界法,割平面法
  • 鹤岗商城网站建设wordpress置顶重复了
  • ROS节点控制实体机械臂运动
  • 做cpa推广的网站怎么弄怎么做企业招聘网站
  • 2015年手机网站需要主机 空间centos 7.3 wordpress
  • 小程序有做门户网站网站seo外链
  • 搭设企业网站教程东莞市品牌网站建设价格
  • 做网站数据库坏了太原市建设工程安全监督站网站
  • 网站建设一般需要几个步骤室内设计网址
  • SpreadJS:JavaScript 生态下高性能纯前端表格控件技术解析与实践
  • 天津中冀建设集团有限公司网站logo注册网站
  • 苏州教育学会网站建设龙岩百度推广
  • Qt常用控件之QProgressBar
  • 从机械齿轮到硅基大脑:计算机起源探秘
  • 网站怎么做登录电商网站的支付模块怎么做
  • 建设干部培训中心网站有没有哪种网站推荐一下
  • 东莞个人免费建网站WordPress去掉由开发
  • 做自己的博客网站WordPress调用不同主题
  • 深度学习Pytorch入门(2):手撕MNIST 手写数字分类
  • 新建网站网络空间网站整体框架
  • 网站设计对网站建设有哪些意义?中小企业电子商务网站建设
  • 做网站用的主机多少合适网站备案需要那些资料
  • Linux网关配置(转载)
  • 要屏蔽一个网站要怎么做中小企业网站建设问题
  • 推荐电商网站建设品牌策划公司介绍
  • 保定网站建设费用深圳市建工建设集团有限公司官网
  • 上海专业网站建站公司北京seo优化多少钱
  • 佛山设计网站公司高仿酒网站怎么做
  • 营销型网站建设需要注意什么建设云个人证件查询系统