Чтобы переключиться на аудиовыход 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
В моем случае аналоговые параметры отсутствовали в списке. Установите pavucontrol:
sudo apt install pavucontrol
Можно решить проблему, запустив приложение:
pavucontrol
(введите) Теперь я могу здесь звучать и выбирать различные профили (под Linux Mint):
Могу ли я каким-либо образом создать кнопку переключения на панели
Я написал индикаторный апплет, который позволяет переключать звуковой выход.
С помощью pulseaudio мы можем выбрать выходную раковину из командной строки:
pacmd set-default-sink "SINKNAME"
Эта команда может быть использована в пусковом устройстве, скрипте или даже назначена на клавиатурную комбинацию для быстрого переключения между различными раковинами. Пожалуйста, замените "SINKNAME" на имя или номер желаемой мойки. Список известных моек с их ассоциированными номерами и именами дается командой:
pacmd list-sinks
Примечание: Изменение выходной мойки через интерфейс командной строки может вступить в силу только в том случае, если считывание информации о целевом устройстве потока отключено. Это можно сделать, отредактировав соответствующую строку в /etc/pulse/default.pa
на:
load-module module-stream-restore restore_device=false
Альтернативно мы можем запустить импульсный звук для одновременного вывода звука на внутреннее аудиоустройство, и на hdmi-устройство, запустив paprefs с возможностью добавления виртуального выходного устройства:
Так как на скриншоте видна только одна звуковая карта, я думаю, что выход /выход этой звуковой карты должен быть переключен.
Например: У меня есть ноутбук с одной встроенной звуковой картой, но при стыковке он имеет цифровой выход (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
На основе многих предыдущих ответов я написал сценарий, который устанавливает приемник воспроизведения, чередующийся между доступные.
Лучший способ использовать его - создать сочетание клавиш для его запуска, чтобы каждый раз, когда вы нажимаете эту комбинацию клавиш, звук перенаправлялся на следующий доступный приемник.
Код доступен здесь: https : //gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c
Я тоже пытался найти решение этой проблемы. По состоянию на Ubuntu 11.04 это не представляется возможным напрямую, я только нашел это руководство, чтобы добавить и HDMI и Analog в качестве отдельных выходов, так что pacmd показывает 3 раковины сейчас. Тогда можно переключаться между раковинами, используя вышеуказанные команды. (см. также)
Но, по-видимому, Ubuntu 11.11 получит PulseAudio с системой обнаружения джеков. Согласно сайту ниже, Дэвид Хеннингссон закодировал детектор через udev, так что импульсный аудио автоматически переключается на последний добавленный выход, включая переключение между различными профилями одной и той же звуковой карты (как и в случае с вашей и моей установкой). (см. здесь)
Так что я надеюсь, что это сработает, когда я попробую окончательную версию в следующую пятницу.
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/
Я нашел это очень раздражающим и написал сценарий для переключения вывода:
#!/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 ).
Альтернативой 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
(предупредит, если возникнет конфликт с другим ярлыком):
Я использую:
Также, вы можете добавить псевдоним
к вашему .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
код для этого ответа / объяснения устарел и содержит некоторые ошибки. Я держу это в актуальном состоянии здесь: https://github.com/madacol/sinkSwitcher
, протестированный на Ubuntu 16 и 18
Но этот позволяет вы переключаете только звук того приложения, которое хотите.
ИСПОЛЬЗОВАНИЕ: Сфокусируйте приложение, которое вы хотите изменить, и запустите этот сценарий. Вот и все !!!
Этот сценарий определяет приложение, которое находится в фокусе, находит все аудио, воспроизводимые из него, и переключает их на следующий доступный приемник.
https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3
Но сначала нам нужен xid
xprop -root _NET_ACTIVE_WINDOW
Затем вставьте его сюда $ xid
, чтобы получить pid application
xprop -id $xid _NET_WM_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
pacmd move-sink-input $sink_input_index $next_sink_index
При настройке сочетания клавиш я не мог заставить его работать с ярлыком ubuntu управляющий делами. Поэтому мне пришлось установить compizconfig-settings-manager
sudo apt-get install compizconfig-settings-manager