有没有办法在插入电缆时自动将声音输出设置为 HDMI,在拔出电缆时自动关闭?

有没有办法在插入电缆时自动将声音输出设置为 HDMI,在拔出电缆时自动关闭?

如果有软件帮我做这件事就太好了,但我想 Bash 脚本是不可避免的。然而,作为一个从未写过一行 Bash 代码的人,我可能需要很多帮助。从哪里开始呢?

答案1

抱歉,我没有正确的答案给您,但我可以为您提供下一个最好的选择:
单击鼠标即可创建到下一个音频输出接收器的切换。

解决方案的动机:
我的系统有一个 HDMI 端口+音频、一个 USB 音频条和绿色音频插孔。选择 USB 音频时,我的系统无法检测耳机的音频插孔是否已插入(拔出)。因此,我无法使用硬件事件并对其做出反应。
因此,我决定使用pacmd;一种操纵音频系统的工具。
它可以交互使用(pacmd),也可以带参数使用(pacmd——帮助)。

简短的介绍:
我的 Xubuntu 面板上的脚本和启动器。单击启动器将切换到下一个音频输出接收器。如果有任何程序正在播放音频,则其音频输入接收器将被强制到输出接收器,并且通知发送用于通知哪个音频输出接收器处于活动状态。

措施:
您的系统上的音频设备数量及其名称可能有所不同,因此需要对脚本进行一些(微小的)更改。我在脚本中添加的注释(在下面)将有助于对其进行自定义。
将脚本复制并粘贴到名为 ToggleAudioOutput 的文件中。
使其可执行。文件管理器 -> 右键单击​​ -> 权限 -> 勾选允许...
在终端 -> 将目录更改为文件的位置。

$ chmod +x 切换音频输出

面板上的启动器:
右键单击面板 -> 面板 > 添加新项目 -> 启动器。
单击添加并关闭。
右侧出现空的启动器;右键单击它。
属性 -> 单击小加号
名称:ToggleAudioOutput
命令:浏览到您存储文件的位置并单击它
图标:选择一个不错的图标
单击创建并关闭
再次右键单击启动器 -> 将其移动到面板上的合适位置。

桌面上的链接:
打开文件管理器并浏览到 ToggleAudioOutput 的位置。
右键单击它 -> 发送到桌面(创建链接)

如果它对你有用请告诉我!

#!/bin/bash
# -- ToggleAudioOutput -- Script to change audio output sink.
#
# The script is based on the output of this command line.
# Of course the output varies per system. Copy & paste this command line
# in a terminal to find the number of devices and their names.
#
# $ pacmd list-sinks | grep -e 'index:' -e 'alsa.name' | awk 'NR%2{printf "%s",$0;next;}1'
#   index: 0                alsa.name = "HDMI 0"
# * index: 1                alsa.name = "USB Audio"
#   index: 2                alsa.name = "ALC662 rev3 Analog"
#
# Output sequence doesn't change except for the asterix (active device)
# and after (un)plugging usb audio devices. If your system has more or
# less devices, change the case statement accordingly.
##############################################################################
# Determine the current audio output sink, 0, 1 or 2.
OutputIndex=$(pacmd list-sinks | grep '\* index:' | awk '{ print $3 }')

# To force output to USB Audio add the command:  ToggleAudioOutput 1
# in an entry in Session and Startup -> Application Autostart.
if [ "$1" == "1" ]
then OutputIndex=1; Name="USB Audio"
else
   case $OutputIndex in
   0) OutputIndex=1; Name="USB Audio"
      ;;
   1) OutputIndex=2; Name="Speaker/Headphones"
      ;;
   2) OutputIndex=0; Name="HDMI 0"
# I don't use HDMI audio, so delete this and the following line if needed.
      OutputIndex=1; Name="USB Audio"
      ;;
   esac
fi
##############################################################################
# Do the work...
pacmd set-default-sink $OutputIndex
notify-send "Audio output device set to:   >$Name<" -t 5000

# Any programs playing audio? Force them to the current audio output sink.
for InputIndex in $(pacmd list-sink-inputs | grep 'index:' | awk '{print $2}')
do
   pacmd move-sink-input $InputIndex $OutputIndex
done
##############################################################################
#EOF

相关内容