Неправильный аудиовыход после разблокировки

Я не верю, что это дубликат Ubuntu, изменяющего аудиовыход по умолчанию после приостановки, потому что я не приостанавливаю ПК.

У меня есть 3 аудиовыхода (аналоговые наушники, USB цифровой усилитель, USB-гарнитура) и 2 аудиовхода (гарнитура, микрофон веб-камеры) на моем настольном ПК.

Когда я разблокирую ПК, он переключает аудиовыход по умолчанию на USB-гарнитуру, хотя я бы предпочел использовать аналоговые наушники.

Как ни странно, однако, музыка (через Клементину) продолжает выходить из моих наушников; Просто регуляторы громкости на моей клавиатуре изменяют громкость на USB-гарнитуре.

Я подозреваю (но не знаю), что это может быть связано с тем, что USB-гарнитура подключена через концентратор на моем мониторе, который выключается, когда ПК заблокирован, и, по-видимому, приводит к событию USB-соединения при повторном включении.

Как это исправить?

(Ubuntu 18.04)

0
задан 18 January 2020 в 20:31

2 ответа

tl; dr? Прокрутите до конца.

Мониторинг блокировки / разблокировки экрана

Адаптировано из здесь , это отслеживает блокировку / разблокировку экрана:

#!/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)

PulseAudio

Вы можете узнать, какой источник и приемник в настоящее время используются в качестве следующее:

$ 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 список коротких источников и pactl list short sources , но там есть дополнительные записи. Вероятно, лучше всего переключиться с помощью инструментов пользовательского интерфейса, а затем использовать pactl info , чтобы найти подходящие.


Окончательный сценарий

Результатом является сценарий, который выглядит следующим образом:

#!/bin/bash

# GNOME
watch="type=signal,interface=org.gnome.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
ответ дан 19 January 2020 в 10:09

Другой способ справиться с этим - через конфигурацию PulseAudio.

Вы можете запустить

pactl unload-module module-switch-on-connect

до блокировки и

pactl load-module module-switch-on-connect

после разблокировки. ( pacmd можно использовать вместо pactl .)

В качестве альтернативы вы можете отключить (прочитать: закомментировать) загрузку модуля в конфигурации default.pa файл; см. man 5 default.pa . Затем вам нужно вручную переключить устройство по умолчанию.

1
ответ дан 19 January 2020 в 22:05

Другие вопросы по тегам:

Похожие вопросы: