我不相信这与Ubuntu 在 suspend 之后更改默认音频输出的重复,因为我没有暂停 PC。
我的台式电脑上有 3 个音频输出(模拟耳机、USB 数字放大器、USB 耳机)和 2 个音频输入(耳机、网络摄像头麦克风)。
当我解锁电脑时,它已将默认音频输出切换到 USB 耳机,尽管我更喜欢使用模拟耳机。
然而奇怪的是,音乐(来自 Clementine)继续从我的耳机中传出;只是键盘上的音量控制改变了 USB 耳机的音量。
我怀疑(但不知道)这可能是因为 USB 耳机是通过我的显示器上的集线器连接的,当 PC 锁定时,集线器会关闭,并且可能会在重新开机时导致 USB 连接事件。
我怎样才能解决这个问题?
(乌班图18.04)
太长了;博士?滚动到最后。
改编自这里,它监视屏幕锁定/解锁:
#!/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)
Run Code Online (Sandbox Code Playgroud)
您可以按如下所示找出当前正在使用哪个源和接收器:
$ 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
Run Code Online (Sandbox Code Playgroud)
(这是我的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
Run Code Online (Sandbox Code Playgroud)
(使用模拟输出和输入)
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)
Run Code Online (Sandbox Code Playgroud)
为了确保该脚本在您登录后立即运行,您可以使用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=
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |