解锁后音频输出错误

解锁后音频输出错误

我不相信这是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

来源 :https://askubuntu.com/a/228623/654555

相关内容