我不相信这是Ubuntu 暂停后更改默认音频输出,因为我没有暂停 PC。
我的台式电脑上有 3 个音频输出(模拟耳机、USB 数字放大器、USB 耳机)和 2 个音频输入(耳机、网络摄像头麦克风)。
当我解锁电脑时,它将默认音频输出切换为 USB 耳机,尽管我更喜欢使用模拟耳机。
然而,奇怪的是,音乐(通过 Clementine)继续从我的耳机中传出;只是键盘上的音量控制改变了 USB 耳机的音量。
我怀疑(但不知道)这可能是因为 USB 耳机通过我显示器上的集线器连接,当 PC 锁定时它会关闭,并且大概在重新打开电源时会导致 USB 连接事件。
我怎样才能解决这个问题?
(Ubuntu 18.04)
答案1
总结一下?滚动到末尾。
监控屏幕锁定/解锁
改编自这里,监控屏幕锁定/解锁:
#!/bin/bash
watch="type=signal,interface=org.gnome.ScreenSaver"
screen_locked_signal="boolean true"
screen_unlocked_signal="boolean false"
dbus-monitor --session "$watch" | ( \
while read signal; do
if [[ "$signal" =~ "$screen_locked_signal" ]]; then
echo "Screen Locked"
elif [[ "$signal" =~ "$screen_unlocked_signal" ]]; then
echo "Screen Unlocked"
fi
done)
脉冲音频
您可以通过以下方式找出当前正在使用的源和接收器:
$ pactl info | grep -E 'Default (Source|Sink):'
Default Sink: alsa_output.usb-Logitech_Inc._Logitech_USB_Headset_H340-00.analog-stereo
Default Source: alsa_input.usb-Logitech_Inc._Logitech_USB_Headset_H340-00.analog-stereo
(这是我的 USB 耳机)
您可以按如下方式切换源和接收器:
$ pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
$ pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo
(使用模拟输出和输入)
pactl list short sinks
您可以使用和获得源和接收器的完整列表pactl list short sources
,但其中还有额外的条目。最好使用 UI 工具进行切换,然后使用pactl info
来发现合适的条目。
最终脚本
生成的脚本如下所示:
#!/bin/bash
# GNOME
watch="type=signal,interface=org.gnome.ScreenSaver"
# XFCE
# watch="type='signal',interface='org.xfce.ScreenSaver'"
screen_locked_signal="boolean true"
screen_unlocked_signal="boolean false"
# PulseAudio: use pactl
_get_default_sink() {
pactl info | sed -n 's/^Default Sink: \(.*\)/\1/p'
}
_get_default_source() {
pactl info | sed -n 's/^Default Source: \(.*\)/\1/p'
}
_set_default_sink() {
pactl set-default-sink "$1"
}
_set_default_source() {
pactl set-default-source "$1"
}
last_sink=$(_get_default_sink)
last_source=$(_get_default_source)
echo "sink is $last_sink; source is $last_source"
# Watch for screensaver D-Bus signals
dbus-monitor --session "$watch" | ( \
while read signal; do
if [[ "$signal" =~ "$screen_locked_signal" ]]; then
# Screen locked: remember the current default sink and source
last_sink=$(_get_default_sink)
last_source=$(_get_default_source)
echo "Screen Locked; sink was $last_sink; source was $last_source"
elif [[ "$signal" =~ "$screen_unlocked_signal" ]]; then
# Screen unlocked: restore the last default sink and source
_set_default_sink "$last_sink"
_set_default_source "$last_source"
echo "Screen Unlocked; sink is $(_get_default_sink); source is $(_get_default_source)"
fi
done)
自动启动脚本
为了确保此脚本在您登录后立即运行,您可以使用gnome-session-properties
并添加指向该脚本的启动应用程序(我将其命名为“监控屏幕保护程序”)。它将创建一个~/.config/autostart/monitor-screensaver.desktop
包含以下内容的文件:
[Desktop Entry]
Type=Application
Exec=/home/roger/bin/monitor-screensaver
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_GB]=Monitor Screensaver
Name=Monitor Screensaver
Comment[en_GB]=
Comment=
答案2
解决此问题的另一种方法是通过 PulseAudio 配置。
你可以跑
pactl unload-module module-switch-on-connect
锁定之前,
pactl load-module module-switch-on-connect
解锁后。 (pacmd
可以代替pactl
。)
或者,您可以禁用(阅读:注释掉)default.pa
配置文件中的模块加载;请参阅man 5 default.pa
。然后您必须手动切换默认设备。
答案3
一个更简单的解决方案是注释掉一行load-module module-switch-on-port-available
,/etc/pulse/default.pa
然后使用以下命令重新启动脉冲pulseaudio -k