记录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 "演奏完成!"
posted @ 2025-08-10 20:44  最懒的小羊  阅读(33)  评论(0)    收藏  举报