另一个接收器切换脚本
在Ubuntu 16.04上测试
但是,这一功能仅允许您切换所需应用程序的音频。
用法:集中您要更改其接收器的应用程序并运行此脚本。而已!!!
此脚本检测正在关注的应用程序,找到从中播放的所有音频,然后将它们切换到下一个可用的接收器。
https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3
解释脚本
我们需要重点找到应用程序的PID
但是首先我们需要
xprop -root _NET_ACTIVE_WINDOW
然后将其插入此处$xid
以获取应用程序的pid
xprop -id $xid _NET_WM_PID
现在我们需要找到与该PID相关的接收器输入
首先让我们线性化命令的输出以在 pacmd list-sink-inputs
每行列出一个接收器输入,在同一行上显示其索引,接收器和PID
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
让我们逐步分析它:
grep -E 'index:|sink:|process.id
只保留包含线index:
,sink:
或process.id
tr '\n' ' '
连接所有行
tr -d '"'
删除所有"
字符。需要没有引号的pid
sed -e 's/index:/\n/g'
用index:
换行符替换所有出现的字符\n
tail -n +2
删除第一行,因为它是空的
结果是这样的:
180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
让我们分析一行以了解其含义:
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182
是接收器输入索引,0
是接收器索引,13752
最后是所属应用程序的pid
然后我们遍历每一行
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
最后仅过滤与焦点应用的pid匹配的接收器输入的pid
if [ $sink_input_pid = $app_pid ]; then
提取数据
有了awk
我们就可以获得我们需要的元素
sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')
获取接收器的数量,以了解接收器的旋转何时应从0重新开始。
sink_list_size=${#sink_list_array[@]}
找到下一个接收器,我们必须遍历接收器列表,知道哪个匹配current_sink_index并知道下一个接收器的索引。
i=0
for sink in "${sink_list_array[@]}"; do
i=$((($i+1)%sink_list_size)) # i++ mod(#sinks)
if [ $sink = $current_sink_index ]; then
next_sink_index=${sink_list_array[i]}
break
fi
done
最后,我们将接收器输入移至next_sink_index
pacmd move-sink-input $sink_input_index $next_sink_index
在Ubuntu 16.04上的注意事项:
配置快捷键时,我无法使其与ubuntu的快捷键管理器一起使用。所以我必须安装compizconfig-settings-manager
sudo apt-get install compizconfig-settings-manager