记录Linux下beep命令不发声
环境
Linux gjj-iot-gateway 6.1.0-37-686 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) i686 GNU/Linux
错误
非root用户执行beep命令,提示:beep: Error: Could not open any device
加debug参数,打印如下:
beep: Verbose: evdev driver_detect 0x4316e0 (nil)
beep: Verbose: b-lib: could not open(2) /dev/input/by-path/platform-pcspkr-event-spkr: Permission denied
beep: Verbose: console driver_detect 0x4316a0 (nil)
beep: Verbose: b-lib: could not open(2) /dev/tty0: Permission denied
beep: Verbose: b-lib: could not stat(2) /dev/vc/0: No such file or directory
beep: Error: Could not open any device
解决方案,添加到当前用户组
sudo usermod -aG input gjj #将用户“gjj”追加添加到“input”组中。这样用户gjj就拥有了input组的权限,通常是为了能够访问输入设备。
su gjj - #重新登陆
送上《小星星》的演奏脚本
#!/bin/bash
# 检查beep命令是否存在
if ! command -v beep &> /dev/null; then
echo "错误:beep命令未安装,请先执行 'sudo apt install beep'"
exit 1
fi
# 音符频率定义(Hz)
DO=261
RE=293
MI=329
FA=349
SOL=392
LA=440
SI=493
# 音符时长定义(毫秒)
Q=300 # 四分音符
H=600 # 二分音符
# 演奏函数
play_note() {
beep -f $1 -l $2
sleep 0.01 # 音符间微小间隔
}
# 主旋律(小星星)
play_note $DO $Q
play_note $DO $Q
play_note $SOL $Q
play_note $SOL $Q
play_note $LA $Q
play_note $LA $Q
play_note $SOL $H
play_note $FA $Q
play_note $FA $Q
play_note $MI $Q
play_note $MI $Q
play_note $RE $Q
play_note $RE $Q
play_note $DO $H
play_note $SOL $Q
play_note $SOL $Q
play_note $FA $Q
play_note $FA $Q
play_note $MI $Q
play_note $MI $Q
play_note $RE $H
play_note $SOL $Q
play_note $SOL $Q
play_note $FA $Q
play_note $FA $Q
play_note $MI $Q
play_note $MI $Q
play_note $RE $H
play_note $DO $Q
play_note $DO $Q
play_note $SOL $Q
play_note $SOL $Q
play_note $LA $Q
play_note $LA $Q
play_note $SOL $H
play_note $FA $Q
play_note $FA $Q
play_note $MI $Q
play_note $MI $Q
play_note $RE $Q
play_note $RE $Q
play_note $DO $H
echo "演奏完成!"

浙公网安备 33010602011771号