通过命令行调整音量,以便弹出音量通知

有没有办法通过命令行调整系统音量,以便仍然显示默认音量弹出窗口(按下笔记本电脑上的媒体键时弹出的音量)。

我需要这个用于我的遥控器。 它将使用lircrc文件和irexec运行。

安装xdotool包,然后尝试发布

xdotool key XF86AudioLowerVolume 

 xdotool key XF86AudioRaiseVolume 

你可以绑定我在Arch论坛中找到的这个脚本的快捷方式(需要包libnotify-bin ):

 #!/bin/sh usage="usage: $0 -c {up|down|mute} [-i increment] [-m mixer]" command= increment=5% mixer=Master while getopts i:m:ho do case "$o" in i) increment=$OPTARG;; m) mixer=$OPTARG;; h) echo "$usage"; exit 0;; ?) echo "$usage"; exit 0;; esac done shift $(($OPTIND - 1)) command=$1 if [ "$command" = "" ]; then echo "usage: $0 {up|down|mute} [increment]" exit 0; fi display_volume=0 if [ "$command" = "up" ]; then display_volume=$(amixer set $mixer $increment+ unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1) fi if [ "$command" = "down" ]; then display_volume=$(amixer set $mixer $increment- unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1) fi icon_name="" if [ "$command" = "mute" ]; then if amixer get Master | grep "\[on\]"; then display_volume=0 icon_name="notification-audio-volume-muted" amixer set $mixer mute else display_volume=$(amixer set $mixer unmute | grep -m 1 "%]" | cut -d "[" -f2|cut -d "%" -f1) fi fi if [ "$icon_name" = "" ]; then if [ "$display_volume" = "0" ]; then icon_name="notification-audio-volume-off" elif [ "$display_volume" -lt "33" ]; then icon_name="notification-audio-volume-low" elif [ "$display_volume" -lt "67" ]; then icon_name="notification-audio-volume-medium" else icon_name="notification-audio-volume-high" fi fi notify-send " " -i $icon_name -h int:value:$display_volume -h string:synchronous:volume 

似乎在Ubuntu 10.10中正常工作。

控制音量

您可以使用amixer来控制音量,例如

 amixer set 'Master' 50% amixer set 'Master' 10%+ amixer set 'Master' 2dB- 

您可能需要使用例如-c 1为第二个声卡设置声卡,请参阅man amixer

播放声音

声音可以使用像aplaypaplay这样的播放器播放,例如

 paplay /usr/share/sounds/freedesktop/stereo/audio-volume-change.oga 

您可能想看看这个问题: 我在哪里可以找到系统声音?

显示屏幕通知

您可以使用X屏幕显示库XOSD重现屏幕上的通知。 该包称为xosd-bin ,命令osd_cat用于在屏幕上显示文本,状态栏等。

 osd_cat -b percentage -P 20 -T Status: -f "-adobe-helvetica-bold-*-*--34-*-*-*-*" 

显示器

在此处输入图像描述

有关选项和示例,请参阅此德语维基页面 ,有关更多信息,请参阅man osd_cat

我安装了xmacro并在.lircrc中添加了以下行:

 begin prog = irexec button = KEY_VOLUMEUP repeat = 1 delay = 2 config = echo KeyStrPress XF86AudioRaiseVolume KeyStrRelease XF86AudioRaiseVolume | xmacroplay $DISPLAY end begin prog = irexec button = KEY_VOLUMEDOWN repeat = 1 delay = 2 config = echo KeyStrPress XF86AudioLowerVolume KeyStrRelease XF86AudioLowerVolume | xmacroplay $DISPLAY end begin prog = irexec button = KEY_MUTE config = echo KeyStrPress XF86AudioMute KeyStrRelease XF86AudioMute | xmacroplay $DISPLAY end 

这是发布的htorque脚本的改进版本。

它适用于14.04。 如果它适用于16.04或更新版,请告诉我。

它需要安装libnotify-bin

 #!/bin/sh # Adjust the volume, play a sound, and show a notification. # # Replacement for default Ubuntu volume adjustment behaviour. # # Based on https://askubuntu.com/a/12769/301745 command="" device="pulse" display_volume=0 icon_name="error" increment=5 mixer="Master" usage="usage: $0 [-d device] [-i increment] [-m mixer] (up|down|mute)" # For compatibility with SSH sessions. export DISPLAY=:0 _amixer(){ # amixer alias local set_get="$1" shift amixer -D "$device" "$set_get" "$mixer" "$@" } _get_display_volume(){ # grep alias grep -Pom 1 '(?<=\[)[0-9]+(?=%\])' } while getopts d:hi:m: opt; do case "$opt" in d) device="$OPTARG" ;; h) echo "$usage" exit 0 ;; i) increment="$OPTARG" ;; m) mixer="$OPTARG" ;; ?) echo "$usage" exit 1 ;; esac done shift "$(($OPTIND - 1))" command="$1" case "$command" in down) display_volume="$( _amixer set "$increment%-" unmute | _get_display_volume )" ;; mute) if _amixer get | grep -q "\[on\]"; then display_volume=0 icon_name="notification-audio-volume-muted" _amixer set mute > /dev/null else display_volume="$( _amixer set unmute | _get_display_volume )" fi ;; up) display_volume="$( _amixer set "$increment%+" unmute | _get_display_volume )" ;; *) echo "$usage" exit 1 ;; esac if [ "$icon_name" = "error" ]; then if [ "$display_volume" = "0" ]; then icon_name="notification-audio-volume-off" elif [ "$display_volume" -lt "33" ]; then icon_name="notification-audio-volume-low" elif [ "$display_volume" -lt "67" ]; then icon_name="notification-audio-volume-medium" else icon_name="notification-audio-volume-high" fi # In a subshell in the background to minimize latency. ( canberra-gtk-play --id=audio-volume-change & ) fi notify-send "Volume: $display_volume%" -i "$icon_name" -h "string:synchronous:volume" -h "int:value:$display_volume"