如何在 HDMI 切换后保持 Linux Mint 音量媒体键和托盘音量控制正常工作

如何在 HDMI 切换后保持 Linux Mint 音量媒体键和托盘音量控制正常工作

通常,在 Acer Aspire E15 笔记本电脑上最近全新安装 Linux Mint 19.3 x64 MATE 后,媒体键(使用内置键盘上的 Fn+箭头键,或外接键盘上的专用键)可以很好地更改音量:弹出一个模式,显示当前音量级别,并在不调节音量一段时间后消失。此外,当我拖动滑块时,默认音量控制托盘图标会影响相同的音量级别。

现在,有时我们会插入具有内置扬声器的 HDMI 设备,并希望音频通过扬声器。通常,软件音频源(例如浏览器)已经打开,这是我发现将其输出切换到 HDMI 的唯一方法没有必须重新启动浏览器,才能进入默认的声音小程序:

声音首选项小程序显示已启用模拟立体声双工,已选择和禁用 HDMI

...并将模拟输出设置为关闭,将 HDMI 输出设置为 HDMI。

问题是,一旦我完成了此操作(或相反 - 从 HDMI 开始,然后切换回模拟立体声),媒体键就不再对音量水平产生影响。 (但他们仍然会弹出一个显示级别变化的窗口...它实际上并不会影响听到的内容!)

此外,音量控制托盘小程序不再对听到的内容产生影响。滑块在视觉上仍然有效,但奇怪的是,似乎已经独立于媒体键产生的弹出窗口。然后,托盘小程序通常会完全消失(我猜是崩溃了。)

此时,更改音量的唯一(基于 GUI)方法是打开上图所示的声音小程序,然后从那里的滑块进行调整。

我的主要问题是,按照所述切换音频输出后如何让它们继续工作?

或者,如果碰巧有一种方法可以通过使用与强制音频输出更改所描述的方法不同的方法来避免此问题,那么这也将是一个受欢迎的答案。

答案1

下面的内容并不理想,因为它去掉了显示当前音量的漂亮屏幕显示,但即​​使在托盘小程序消失并且各种音量控件似乎彼此断开连接之后,它至少也能可靠地工作。

在某处创建一个脚本,其中包含以下内容:

#!/bin/bash
CURVOL=`pacmd list-sinks | grep 'volume: [^0-9]' | sed 's/.* \([0-9]\{1,3\}\)\%.*/\1/'`
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
VOLCHANGE=`cat $DIR/volume-increment`
if (($CURVOL > (100 - $VOLCHANGE))) ; then
  pactl set-sink-volume @DEFAULT_SINK@ 100% ;
else 
  pactl set-sink-volume @DEFAULT_SINK@ +$VOLCHANGE% ;
fi

在同一目录中,创建一个名为 的文件volume-increment,其中包含您希望在每次激活时更改的绝对音量百分比。例如,您可能有一个文件,其中包含一行,5其中包含该字符。

类似的脚本可用于降低音量:

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
VOLCHANGE=`cat $DIR/volume-increment`
pactl set-sink-volume @DEFAULT_SINK@ -$VOLCHANGE% ;

然后打开键盘快捷键小程序,禁用原始音量控制快捷键,并添加指向上述脚本的自定义快捷键。

“音量调高”部分较长的原因是其上限为 100%。如果没有这个,您将能够将音量设置得太高(高于声音小程序的 140% 上限),并且可能会损坏您的硬件(或至少损坏您的听力)。

(这也可以重构,但效果很好。)

答案2

设置耳机或蓝牙耳机时也会出现同样的问题。尝试重启声音:

pulseaudio --kill

pulseaudio -D

相关内容