Ярлык для переключения между аналоговым стерео выходом и усилителем; Аудио выход HDMI

Чтобы переключиться на аудиовыход HDMI (монитора) и вернуться к обычному аудиовыходу из системного аудиоразъема (для наушников, поскольку на моем мониторе нет аудиовыхода), я обнаруживаю, что открываю настройки звука и выбираю правильный канал. каждый раз. Есть ли способ, которым я могу создать кнопку переключения на панели или назначить некоторую комбинацию клавиш для переключения, так как я делаю переключение так часто.

:aplay -l 
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

enter image description here

19
задан 8 February 2017 в 05:01

10 ответов

В моем случае аналоговые параметры отсутствовали в списке. Установите pavucontrol: sudo apt install pavucontrol

Можно решить проблему, запустив приложение:

  1. Запустите приложение через терминал, введя: pavucontrol (введите)
  2. Перейдите в 'Конфигурация Вкладка
  3. Выберите профиль аналогового стереовыхода в Intern Sound

enter image description here

Теперь я могу здесь звучать и выбирать различные профили (под Linux Mint):

enter image description here

0
ответ дан 8 February 2017 в 05:01

Могу ли я каким-либо образом создать кнопку переключения на панели

Я написал индикаторный апплет, который позволяет переключать звуковой выход.

0
ответ дан 8 February 2017 в 05:01

С помощью pulseaudio мы можем выбрать выходную раковину из командной строки:

pacmd set-default-sink "SINKNAME"

Эта команда может быть использована в пусковом устройстве, скрипте или даже назначена на клавиатурную комбинацию для быстрого переключения между различными раковинами. Пожалуйста, замените "SINKNAME" на имя или номер желаемой мойки. Список известных моек с их ассоциированными номерами и именами дается командой:

pacmd list-sinks

Примечание: Изменение выходной мойки через интерфейс командной строки может вступить в силу только в том случае, если считывание информации о целевом устройстве потока отключено. Это можно сделать, отредактировав соответствующую строку в /etc/pulse/default.pa на:

load-module module-stream-restore restore_device=false

Альтернативно мы можем запустить импульсный звук для одновременного вывода звука на внутреннее аудиоустройство, и на hdmi-устройство, запустив paprefs с возможностью добавления виртуального выходного устройства:

paprefs

11
ответ дан 8 February 2017 в 05:01

Так как на скриншоте видна только одна звуковая карта, я думаю, что выход /выход этой звуковой карты должен быть переключен.

Например: У меня есть ноутбук с одной встроенной звуковой картой, но при стыковке он имеет цифровой выход (SPDIF).

Поэтому я хотел переключить активный выход или "Профиль" в pulseaudio.

Я нашел команды, которые делают именно так:

pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo

То, что я сделал, чтобы получить правильные имена для желаемого выхода - нигде, цифровой выход, но аналоговый (микро) вход - было:

pacmd list | grep output
1
ответ дан 8 February 2017 в 05:01

На основе многих предыдущих ответов я написал сценарий, который устанавливает приемник воспроизведения, чередующийся между доступные.

Лучший способ использовать его - создать сочетание клавиш для его запуска, чтобы каждый раз, когда вы нажимаете эту комбинацию клавиш, звук перенаправлялся на следующий доступный приемник.

Код доступен здесь: https : //gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c

1
ответ дан 8 February 2017 в 05:01

Я тоже пытался найти решение этой проблемы. По состоянию на Ubuntu 11.04 это не представляется возможным напрямую, я только нашел это руководство, чтобы добавить и HDMI и Analog в качестве отдельных выходов, так что pacmd показывает 3 раковины сейчас. Тогда можно переключаться между раковинами, используя вышеуказанные команды. (см. также)

Но, по-видимому, Ubuntu 11.11 получит PulseAudio с системой обнаружения джеков. Согласно сайту ниже, Дэвид Хеннингссон закодировал детектор через udev, так что импульсный аудио автоматически переключается на последний добавленный выход, включая переключение между различными профилями одной и той же звуковой карты (как и в случае с вашей и моей установкой). (см. здесь)

Так что я надеюсь, что это сработает, когда я попробую окончательную версию в следующую пятницу.

1
ответ дан 8 February 2017 в 05:01

Wann Dir Gnome Shell benotzt anstatt Unity, kënnt Dir d'Extensioun hei ënnen installéieren. Dir kënnt dann aus dem Volume Ofkierzungen am Top Panel wiesselen. https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/

1
ответ дан 8 February 2017 в 05:01

Я нашел это очень раздражающим и написал сценарий для переключения вывода:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else 
  pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"        
fi

И затем привязал неиспользуемая клавиша на моей клавиатуре для его выполнения (см. this ).

9
ответ дан 8 February 2017 в 05:01

Альтернативой Sound Switcher Indicator (который требует добавления PPA) является создание команды (или скрипта) и вызов ее с помощью ярлыка:

В моем случае это был hdmi-stereo-extra1+input профиль, то есть в одной строке:

[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
     pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
     pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"

Вы можете использовать пользовательское сочетание клавиш ( клавиатура гнома-центра управления ). чтобы выполнить его с bash -c (предупредит, если возникнет конфликт с другим ярлыком):

screenshot

screenshot

Я использую:

  • Super + Alt + o: Переключите выход между наушниками и HDMI.
  • Super + Alt + Up: Вверх по громкости
  • Супер + Alt + вниз: Vol Down

Также, вы можете добавить псевдоним к вашему .bashrc.

Проверено на Ubuntu 16.04 и 18.04


Если вы хотите, чтобы поведение в скрипте было выше, я внес некоторые изменения, основанные на @user829996 ответе:

#!/bin/bash
set -euo pipefail # strict mode

activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"

# If it doesn't work run  pacmd list-cards  and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
  pacmd set-card-profile 0 "$HDMI_PROFILE"
fi

activeProfile
1
ответ дан 8 February 2017 в 05:01

Изменить

код для этого ответа / объяснения устарел и содержит некоторые ошибки. Я держу это в актуальном состоянии здесь: https://github.com/madacol/sinkSwitcher


Еще один скрипт переключателя приемника

, протестированный на Ubuntu 16 и 18


Но этот позволяет вы переключаете только звук того приложения, которое хотите.

ИСПОЛЬЗОВАНИЕ: Сфокусируйте приложение, которое вы хотите изменить, и запустите этот сценарий. Вот и все !!!

Этот сценарий определяет приложение, которое находится в фокусе, находит все аудио, воспроизводимые из него, и переключает их на следующий доступный приемник.

https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3

Объяснение сценария

Нам нужно найти PID приложения в фокусе

Но сначала нам нужен xid

xprop -root _NET_ACTIVE_WINDOW 

Затем вставьте его сюда $ xid , чтобы получить pid application

xprop -id $xid _NET_WM_PID

Теперь нам нужно найти входы-приемники, связанные с этим PID

Сначала давайте линеаризуем вывод команды pacmd list-receiver-inputs , чтобы перечислить по одному входу-приемнику в каждой строке, показывая его индекс, приемник и pid в одной строке

pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2

давайте проанализируем его шаг за шагом:

grep -E 'index: | раковина: | process.id сохранить только строки, содержащие index: , приемник: или process.id

tr '\ n' '' объединяет все строки

tr -d '"' удаляет все " символов. Необходимо получить pid без кавычек

sed -e 's / index: / \ n / g' заменяет все вхождения index: символом новой строки \ n

tail -n +2 удаляет первую строку, потому что она пуста

И результат примерно такой:

  180 раковина: 0  application.process.id = 3521
  181 приемник: 1  application.process.id = 2733
  182 приемник: 0  application.process.id = 13752
 

Давайте проанализируем одну строку, чтобы понять, что она означает:

  # 182 раковина: 0  application.process.id = 13752
 

182 - это индекс входа-приемника, 0 - индекс приемника, и 13752 в конце - это идентификатор соответствующего приложения.

Затем мы итерация по каждой строке

... | while IFS= read -r line || [ -n "$line" ]; do
  sink_input_pid=$(echo $line | awk '{print $NF}')

И, наконец, фильтрация только pid приемника-входа, который соответствует pid фокусируемого приложения

  if [ $sink_input_pid = $app_pid ]; then

Извлечение данных

С помощью awk мы можем получить нужные нам элементы

sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')

Получить числа приемников, чтобы узнать, когда вращение приемников должно начаться с 0.

sink_list_size=${#sink_list_array[@]}

Находя следующий приемник, мы должны пройти по списку приемников, чтобы узнать, какой из них соответствует current_sink_index , и узнать индекс следующий приемник.

i=0
for sink in "${sink_list_array[@]}"; do
  i=$((($i+1)%sink_list_size))  # i++ mod(#sinks)
  if [ $sink = $current_sink_index ]; then
    next_sink_index=${sink_list_array[i]}
    break
  fi
done

И, наконец, мы перемещаем вход-приемник для воспроизведения в next_sink_index

pacmd move-sink-input $sink_input_index $next_sink_index

Примечание для Ubuntu 16.04:

При настройке сочетания клавиш я не мог заставить его работать с ярлыком ubuntu управляющий делами. Поэтому мне пришлось установить compizconfig-settings-manager

sudo apt-get install compizconfig-settings-manager
2
ответ дан 8 February 2017 в 05:01

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

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