Bash 如何使用Ubuntu上的脚本在扬声器和USB耳机之间切换?

Bash 如何使用Ubuntu上的脚本在扬声器和USB耳机之间切换?,bash,ubuntu,audio,alsa,Bash,Ubuntu,Audio,Alsa,我正在尝试编写一个脚本,在扬声器和耳机之间切换。我希望能够通过快捷方式更改输出和输入 我使用以下命令查看我的音频设备: $ pacmd list-sinks | grep alsa_output name: <alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo> name: <alsa_output.pci-0000_00_1b.0.analog-stereo> $ pacmd list-so

我正在尝试编写一个脚本,在扬声器和耳机之间切换。我希望能够通过快捷方式更改输出和输入

我使用以下命令查看我的音频设备:

$ pacmd list-sinks | grep alsa_output 

name: <alsa_output.usb-Logitech_Logitech_USB_Headset-00.analog-stereo>
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>

$ pacmd list-sources | grep alsa_input

name: <alsa_input.usb-Logitech_Logitech_USB_Headset-00.analog-mono>
name: <alsa_input.usb-093a_262c-01.analog-mono>
name: <alsa_input.pci-0000_00_1b.0.analog-stereo>
当我用命令运行它时

 sudo ./usb-speakers.sh 
我收到以下信息:

没有正在运行的PulseAudio守护程序,或者没有作为会话守护程序运行。
主目录不可访问:权限被拒绝
没有正在运行的PulseAudio守护程序,或者没有作为会话守护程序运行

我发现有几个问题与我的问题相似,但我无法让任何问题对我起作用。

说:

有点像alsamixer,它不关注接收器音量(实际上可以通过alsamixer和alsa pulse插件来控制),而是关注单个流的音量,所以你可以关掉音乐来听游戏、咕哝、skype或浏览器中的内容

除了交互式UI之外,脚本还允许通过配置文件匹配和配置接收器/流参数,以便在出现特定接收器或流时,例如,可以限制其音量、更改端口、调整UI标题、在UI中隐藏等等

我发现这个脚本(我不记得在哪里)解决了我所有的问题

#!/bin/bash

declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}

#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
    next_sink_index=${sinks[$ord]}
    break
fi
let ord++
done

#change the default sink
pacmd "set-default-sink ${next_sink_index}"

#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done

#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
    notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-synchronous: "Sound output switched to" "$line"
    exit
fi
let ndx++
done;
只需复制并粘贴到一个空文档中,然后另存为
音频设备开关.sh

然后将其保存到您的
usr/local/bin
目录中

如果要添加快捷键,请转到
键盘和快捷键
,然后添加新的快捷键。 作为命令,只需将您的
音频设备切换器.sh
文件

这就是所有为我工作的人。
谢谢您的回答。

您好,谢谢您的回答我尝试安装此插件,但出现以下错误:
文件“/pa-mixer-mk3.py”,第10行,从pulsectl导入脉冲,PulseLoopStop,PulseDisconnected,PulseIndexError ImportError:没有名为“pulsectl”的模块
,我使用以下命令安装了
pulsectl
apt get install python pip pip install pulsectl
对不起,我不知道它为什么不工作。当我面前有一个Ubuntu盒子而不是手机时,我会尝试复制。
#!/bin/bash

declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}

#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
    next_sink_index=${sinks[$ord]}
    break
fi
let ord++
done

#change the default sink
pacmd "set-default-sink ${next_sink_index}"

#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done

#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
    notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-synchronous: "Sound output switched to" "$line"
    exit
fi
let ndx++
done;