Ubuntu自定义1%音量调节快捷键后,如何调出音量等级提示框?
解决Ubuntu自定义音量快捷键无音量提示框的问题
我明白你的痛点——自定义了1%步进的音量快捷键,但没了系统自带的音量提示确实很不方便。其实原因很简单:默认的音量按键是调用系统桌面环境的通知组件来显示提示,而你直接用amixer命令的话,它本身不会触发这个提示框,得手动把通知逻辑加进去。
下面给你两种实用的解决方案,选适合你的就行:
方案一:结合amixer和notify-send显示自定义通知
这个方法是在执行音量调节命令后,用Ubuntu自带的notify-send工具弹出包含当前音量的提示框,还能搭配对应音量级别的图标,直观又好用。
1. 创建音量调节脚本
先把调节逻辑和通知逻辑打包成可执行脚本:
- 打开终端,创建增加音量的脚本:
nano ~/.local/bin/volume-up.sh - 粘贴以下内容:
#!/bin/bash # 增加1%音量,屏蔽多余输出 amixer -D pulse sset Master 1%+ > /dev/null # 提取当前音量百分比 VOLUME=$(amixer -D pulse get Master | grep -oP '\d+%' | head -n1) # 弹出带图标的通知,停留1秒 notify-send -i audio-volume-high "音量调节" "当前音量: $VOLUME" -t 1000 - 同理创建减少音量的脚本
volume-down.sh:
内容替换为:nano ~/.local/bin/volume-down.sh#!/bin/bash # 减少1%音量,屏蔽多余输出 amixer -D pulse sset Master 1%- > /dev/null # 提取当前音量百分比 VOLUME=$(amixer -D pulse get Master | grep -oP '\d+%' | head -n1) # 根据音量匹配对应图标 VOLUME_NUM=${VOLUME%?} if [ $VOLUME_NUM -eq 0 ]; then ICON="audio-volume-muted" elif [ $VOLUME_NUM -lt 30 ]; then ICON="audio-volume-low" elif [ $VOLUME_NUM -lt 70 ]; then ICON="audio-volume-medium" else ICON="audio-volume-high" fi # 弹出通知 notify-send -i $ICON "音量调节" "当前音量: $VOLUME" -t 1000 - 给两个脚本添加执行权限:
chmod +x ~/.local/bin/volume-up.sh ~/.local/bin/volume-down.sh
2. 重新设置自定义快捷键
打开系统设置 → 键盘 → 快捷键 → 自定义快捷键,把原来的amixer命令替换成脚本路径:
- 增加音量:
~/.local/bin/volume-up.sh - 减少音量:
~/.local/bin/volume-down.sh
这样每次按快捷键,不仅会精准调节1%音量,还会弹出带图标的提示框,停留1秒后自动消失。
方案二:用pactl调用原生OSD提示(贴近系统默认体验)
如果你想要和系统默认音量提示完全一致的样式,可以用pactl调节音量,同时调用桌面环境的原生屏幕显示(OSD)组件。
1. 自定义增加音量的命令
直接把快捷键的命令改成:
pactl set-sink-volume @DEFAULT_SINK@ +1% && dbus-send --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.ShowOSD string:'{"icon": "audio-volume-high", "level": '$(( $(pactl get-sink-volume @DEFAULT_SINK@ | grep -oP '\d+%' | head -n1 | sed 's/%//') ))'}'
2. 自定义减少音量的命令
减音量的命令替换为:
pactl set-sink-volume @DEFAULT_SINK@ -1% && dbus-send --print-reply --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.ShowOSD string:'{"icon": "audio-volume-low", "level": '$(( $(pactl get-sink-volume @DEFAULT_SINK@ | grep -oP '\d+%' | head -n1 | sed 's/%//') ))'}'
这个方法会调出和系统默认完全一样的OSD提示,样式、动画都和原生按键一致,适合追求统一体验的用户。
额外说明
- 如果你用的是KDE桌面环境,方案一的
notify-send依然有效;方案二则需要换成KDE对应的命令,比如用qdbus org.kde.plasmashell /org/kde/osdService org.kde.osdService.showVolume来调用原生OSD。 - 脚本里的
-t 1000是通知停留时间(单位:毫秒),可以根据喜好调整,比如改成2000就是停留2秒。
内容的提问来源于stack exchange,提问作者zupazt3




