树莓派开机音乐
我在开发树莓派时,通常会通过VNC远程连接。本文希望解决如下两个问题:
问题1:希望树莓派开机完成后播放一段音乐,以提示开机完成。
问题2:树莓派只要不插显示器就不能用VNC连接,插上就可以,为什么?
一、开机自动播放音乐
1. 创建播放脚本
新建一个脚本文件(如 /home/pi/play_boot_music.sh
):
#!/bin/bash# 等待音频系统就绪
sleep 5 aplay /home/pi/boot_music.wav
赋予执行权限:chmod +x /home/pi/play_boot_music.sh
2. 创建systemd
开机服务
新建服务文件:
sudo nano /etc/systemd/system/boot-music.service
内容如下:
[Unit]
Description=Play boot music
After=graphical.target # 在图形界面加载后运行
# 如果无图形界面,改用:After=multi-user.target[Service]
ExecStart=/home/pi/play_boot_music.sh
User=pi[Install]
WantedBy=default.target
3. 启用服务
sudo systemctl daemon-reload
sudo systemctl enable boot-music.service
sudo systemctl start boot-music.service
重启树莓派即可,亲测有效
二、VNC与虚拟桌面
树莓派在不连接显示器时无法使用 VNC,但插上显示器后可以正常连接,通常是由于 显示输出配置 和 虚拟显示驱动 的问题。以下是原因和解决方案:
1. 原因分析
缺省情况下树莓派依赖物理显示器: 树莓派的图形系统(尤其是旧版系统)默认需要检测到物理显示器才会初始化显示输出。如果没有检测到显示器,GPU 可能不会启动图形界面,导致 VNC 服务无法绑定到有效的显示设备。
未启用虚拟显示: 在无显示器(Headless)模式下,需要手动启用 虚拟显示驱动(
fake-hwdisp
或fbcp
),否则系统会认为没有可用的显示输出,从而关闭图形界面。HDMI 热插拔检测问题: 树莓派通过 HDMI 的 热插拔检测(HPD) 信号判断显示器是否连接。如果未强制启用 HDMI 输出,系统可能直接禁用图形输出。
2. 解决方案
方法 1:强制启用 HDMI 输出
编辑 /boot/config.txt
文件,添加以下配置 并保存, 然后重启:
hdmi_force_hotplug=1 # 强制启用 HDMI 输出(即使未检测到显示器)
hdmi_group=2 # 设置 HDMI 模式为 CEA(常用电视/显示器)
hdmi_mode=82 # 1080p 60Hz(可根据需要调整,如 mode=4 为 720p)
方法 2:手动配置 VNC 服务
如果仍无法连接,可能是 VNC 服务未正确绑定到虚拟显示。可以尝试以下步骤:
安装
xserver-xorg-video-fbdev
(虚拟帧缓冲驱动):sudo apt install xserver-xorg-video-fbdev
确保 VNC 服务已启用并开机自启:
sudo systemctl enable vncserver-x11-serviced sudo systemctl start vncserver-x11-serviced
(推荐)方法3:启动虚拟显示
如下是在 Ubuntu 20.04 上配置 虚拟显示(Headless 模式),可以让系统在没有物理显示器的情况下运行图形界面,并支持远程桌面(如 VNC、RDP 或 X11 转发)。以下是具体步骤:
1. 安装虚拟显示驱动
sudo apt update
sudo apt install xserver-xorg-video-dummy
2. 创建虚拟显示配置文件
编辑或创建 /usr/share/X11/xorg.conf.d/xorg.conf,
填入以下内容(设置虚拟分辨率为 1920x1080
,可调整):
Section "Device"Identifier "DummyDevice"Driver "dummy"Option "NoDDC" "true"VideoRam 256000
EndSectionSection "Monitor"Identifier "DummyMonitor"HorizSync 31.5-48.5VertRefresh 50-70
EndSectionSection "Screen"Identifier "DummyScreen"Device "DummyDevice"Monitor "DummyMonitor"DefaultDepth 24SubSection "Display"Depth 24Modes "1920x1080" "1280x720" "1024x768"EndSubSection
EndSection
保存并退出
3. 重启显示管理器
sudo systemctl restart lightdm # 如果使用 LightDM 遇到问题,可以尝试重启系统
4. 验证虚拟显示
运行以下命令检查虚拟显示是否生效:xdpyinfo | grep dimensions
输出类似:dimensions: 1920x1080 pixels (…)
说明虚拟显示已启用。
亲测有效!