Как переключаться между наушниками и динамиками, не отключая наушники


23

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

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

Когда я открываю «Настройки звука» и переключаюсь с «Наушники -> Встроенный звук» на «Линейный выход -> Встроенный звук», из динамика или наушников не выходит звук.

Я открыл alsamixer, чтобы посмотреть, что происходит, когда я подключаю / отключаю наушники.

Наушники в: Наушники в

Выход на наушники: Выход на наушники

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

Как примечание, изменение устройства вывода звука через «Настройки звука» вызывает те же изменения в alsamixer.


1
Насколько я знаю, это аппаратный переключатель внутри разъема для наушников, который не позволяет переключаться. Когда переключатель включен, динамики отключены. Вы думали о том, чтобы использовать наушники Bluetooth?
Терренс

Благодаря @Terrance, у меня было ощущение, что это может быть что-то подобное, я даже проверил BIOS, чтобы увидеть, есть ли что-то там. Я просто немного удивлен, что у них будет аппаратное решение для того, что должно быть программной проблемой.
user276318 22.12.15

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

@Terrance Я начал щедрость, может ты хочешь еще глубже вникнуть и написать ответ?
десерт

@dessert см . ответ GoodGuyNick ниже - он может работать не на всех аппаратных средствах, и, по моему опыту, он не разделяет выходы (что позволит вам одновременно передавать звук программы A на динамики и ProgramB на наушники), но если необходимо просто отключить автопереключение, это первое, что нужно попробовать.
quixotic

Ответы:


9

Подключение динамиков и наушников и включение программного обеспечения на лету

По замыслу Pulseaudio автоматически отключает линейный выход при подключении наушников и использует вместо этого слайдер для наушников. Вы можете наблюдать это поведение в alsamixer. Мы хотим, чтобы слайдеры для наушников и линейного выхода работали отдельно и одновременно. Это очень полезно, если вы хотите переназначить гнезда Realtek, чтобы иметь, скажем, Rear Green для наушников и Blue для динамиков (с помощью hdajackretask от alsa-tools).

Чтобы достичь этого, вы должны непосредственно отредактировать конфигурацию пульсометра.

1. Мы сообщаем pulseaudio, что наушники всегда подключены.

Редактировать:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-lineout.conf

Найти:

[Jack Headphone]
state.plugged = no
state.unplugged = unknown

Изменить noна yes.

Если вы используете гнезда на передней панели корпуса компьютера, измените их [Jack Front Headphone].

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

Мы хотим объединить Line Out с Мастером. Добавьте этот фрагмент в конец файла:

[Element Line Out]
switch = mute
volume = merge

3. Нам нужно полностью отключить Line Out, когда мы используем наушники.

Редактировать:

/usr/share/pulseaudio/alsa-mixer/paths/analog-output-headphones.conf

Добавьте этот фрагмент в конец файла:

[Element Line Out]
switch = off
volume = off

В некоторых системах вам также может потребоваться отключить Front, добавив этот фрагмент:

[Element Front]
switch = off
volume = off

4. Как и Pulseaudio, Alsa сама отключает динамики при подключении наушников.

Откройте alsamixer: alsamixer -c0илиalsamixer -c1

Используйте / для автоматического отключения звука. Отключить режим автоматического отключения звука с помощью . Закрыть alsamixer с Esc.

Сохраните ваши изменения с: alsactl store

5. Перезапустите Pulseaudio

$ pulseaudio -k
$ pulseaudio --start

Теперь у вас есть два отдельных порта на одном приемнике в pulseaudio. Они приглушают друг друга, поэтому вы можете переключиться на наушники, и это отключит линейный выход, и наоборот. Для переключения между портами вы можете использовать звуковой микшер Gnome или Plasma или установить соответствующее расширение рабочего стола.


Источник


2
Вы не должны редактировать файлы непосредственно в /usr/share. Если pulseaudio получит обновление (например, для исправления ошибок), ваши изменения будут уничтожены. Обычно есть механизм для предоставления файлов переопределения /etcили аналогичных, но я не знаю конкретно о pulseaudio.
Роби Басак

@RobieBasak Источник этой информации - веб-сайт Arch Linux. К сожалению, я не пользователь Arch Linux, поэтому я не могу опубликовать ваш комментарий на их сайте. Надеемся, что один из пользователей Arch Linux, плавающих здесь, прочитает ваш комментарий и перепишет его там.
WinEunuuchs2Unix

1
@RobieBasak, ну, можно написать скрипт-обертку, который делает это, и вызывать его после входа в систему
Роберт Ридл,

1
К сожалению, это не сработало для меня, но спасибо за ваш ответ!
десерт

1
@ dessert Мое удовольствие. Было интересно исследовать эту область. Я надеюсь, что вы найдете то, что ищете.
WinEunuuchs2Unix

9

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

  1. Беги alsamixer.
  2. При необходимости выберите свою звуковую карту с помощью F6.
  3. Перейдите к «Auto-Mute» с помощью стрелки вправо .
  4. Отключите его с помощью стрелки вниз .
  5. Нажмите Escдля выхода.

Или вы можете сделать все эти шаги с помощью одной команды:

  1. Открытый терминал
  2. бег amixer -c 1 set 'Auto-Mute Mode' Disabled

Теперь вы можете переключаться между динамиками и наушниками с помощью регулятора громкости PulseAudio.

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


2
Я не думаю, что это будет работать для всех аппаратных комбинаций - некоторые системы (например, моя) действительно используют аппаратный коммутатор некоторого разнообразия, который не является неизвестным. Например, если вы подключите наушники к гитарному усилителю, колонки в этом усилителе обычно отключаются - и в этих устройствах нет компьютера ...
Чарльз Грин,

Это сработало для меня на Realtek ALC887-VD
Пол Прает

Спасибо. Это сработало для меня. Есть ли способ сделать это с помощью bash-скрипта?
Ka3ak

1
@ ka3ak Я обновил ответ для тебя
GoodGuyNick

4

hdajackretask - это инструмент для переназначения функции, которую ваши гнезда используют для другого входа, выхода или отключения - например, превратить ваш микрофонный разъем в дополнительные наушники или почему бы не сделать их одновременно линейными выходами и подключить их к ресиверу объемного звучания?

Установите alsa-tools-gui

sudo apt-get update
sudo apt-get install alsa-tools-gui

Запустите то, hdajackretaskчтобы переопределить одно из ваших гнезд:

  1. Выберите кодек
  2. Установите флажок «Переопределить» для этого вывода и выберите новую нужную функцию.
  3. Нажмите «Применить сейчас».

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

Я обнаружил, что одновременная работа с наушниками и динамиками работает лучше всего.


Скриншот hdajackretask для переключения наушников на динамики:

введите описание изображения здесь


После того, как вы нажмете «Применить сейчас», будет создан сценарий оболочки для внесения изменений и запрос на ввод пароля суперпользователя. Также сохраняется сценарий, в /tmpкотором его можно скопировать, а затем выполнить с помощью sudo из командной строки.

введите описание изображения здесь

Выполнение командной строки

Как уже упоминалось ранее, hdajackretaskсоздает сценарий, script.shв /tmpаналогичен /tmp/hda-jack-retask-QW1EEZ/для функций домкратов вы желаете:

#!/bin/sh
echo "0x12 0x90a60140" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x14 0x90170150" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x17 0x40000000" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x18 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x19 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1a 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1b 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1d 0x40700001" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x1e 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo "0x21 0x40f000f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log
echo 1 | tee /sys/class/sound/hwC0D0/reconfig 2>>/tmp/hda-jack-retask-WFEIEZ/errors.log


Скопируйте этот скрипт куда-нибудь в вашей системе (кроме / tmp)

cd /tmp/hda-jack-retask-QW1EEZ
cp script.sh ~username/speaker.sh

Затем отредактируйте динамик

cd ~username
nano speaker.sh

Добавьте строку killall pulseaudio &в верхней части файла. Это необходимо, потому что функция домкрата не может быть изменена во время pulseaudioработы. По умолчанию pulseaudioбудет респаун. Также измените путь к errors.logфайлу /tmpили где вы хотите:

#!/bin/sh
killall pulseaudio &
echo "0x12 0x90a60140" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x14 0x90170150" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x17 0x40000000" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x18 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x19 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1a 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1b 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1d 0x40700001" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x1e 0x411111f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo "0x21 0x40f000f0" | tee /sys/class/sound/hwC0D0/user_pin_configs 2>>/tmp/errors.log
echo 1 | tee /sys/class/sound/hwC0D0/reconfig 2>>/tmp/errors.log


Чтобы запустить скрипт:

sudo ./speaker.sh



Из документации alsa-tools-1.1.5 / hdajackretask / README :

Документация для hdajackretask

Большинство звуковых карт HDA Intel в некоторой степени поддерживают повторную настройку, то есть могут использоваться для нескольких целей. Этот инструмент представляет собой графический интерфейс, который упрощает повторное подключение ваших гнезд - например, превратите ваш микрофонный разъем в дополнительные наушники или почему бы не сделать их одновременно линейными выходами и подключить их к ресиверу объемного звучания?

Быстрый старт

Запустите приложение "hdajackretask" из командной строки. Выберите кодек в верхней панели; у некоторых людей есть только один - если у вас их больше одного, один является «основным», а остальные, вероятно, являются кодеками HDMI.

Все разъемы (и другие входы / выходы) отображаются в разделе «Конфигурация контактов». Чтобы переопределить одно из ваших гнезд, установите флажок «Переопределить» для этого контакта и выберите нужную функцию. Примечание. Если вы выбрали переопределение «Line out (back)», вы также должны иметь переопределение «Line out (front)». Переопределение «Line out (Center / LFE)» будет работать только с двумя предыдущими переопределениями и т. Д.

Вы можете опробовать новую конфигурацию, нажав «Применить сейчас». Чтобы сделать вашу новую конфигурацию загрузочной по умолчанию, нажмите «Установить загрузочное переопределение». Выполнение любого из этих действий требует привилегий суперпользователя, поэтому вам, вероятно, будет предложен ваш пароль.

Quickend

Ты облажался? Нажмите кнопку «Удалить загрузку», и после завершения процесса выключите компьютер, немного подождите и включите его снова. Теперь вы должны вернуться туда, где вы начали.

Это сработало?

Если это так, будь счастлив, поделись радостью, сделай что-нибудь приятное!

Если этого не произошло, вот несколько вещей, которые можно попробовать:

  • Зайдите в alsamixer и посмотрите, есть ли новые регуляторы громкости, и посмотрите, не включены ли они и установлены ли разумные значения.

  • Иногда драйвер не отключает неподключенные контакты (если они не подключены, зачем беспокоиться?). Вы можете исправить это, выключив компьютер на некоторое время.

  • Смотрите опцию "модель = авто" ниже

Если это не помогает, велика вероятность того, что вы столкнетесь с драйверами или аппаратными ограничениями. Вы можете столкнуться с ошибками в драйвере (возможно, никто не тестировал четыре наушника раньше!). Если вы это сделаете, не стесняйтесь сообщать о них в списке рассылки alsa-devel: однако, из-за нехватки рабочей силы, есть вероятность, что это будет решаться с очень низким приоритетом (наличие стандартной работы звука для стандартной конфигурации важнее, чем поддержка странных конфигураций). Однако, если вы являетесь хакером ядра и придумали патч, который решает вашу проблему, не привлекая ничего другого, шансы довольно высоки, он будет объединен.

Если вы подозреваете, что проблема связана с этим приложением с графическим интерфейсом, а не с драйвером ядра, не стесняйтесь написать мне письмо (и, если хотите, добавьте патч!). Если это так, напишите на diwic@ubuntu.com.

Параметры

  • Показать неподключенные контакты Ваш BIOS отвечает за настройку того, какие контакты на кодеке действительно подключены к чему-либо, а какие нет. Иногда BIOS глючит и не показывает все ваши гнезда. Если у вас есть разъем, в BIOS которого нет, попробуйте включить случайные контакты и посмотреть, работает ли он.

  • Set Model = auto. Некоторые кодеки, особенно старые и в ядрах 3.8 и ниже, жестко запрограммированы для использования конкретной модели и, таким образом, не будут заботиться о ваших переопределениях. Во многих случаях и с достаточно новым ядром автоматический парсер теперь работает хорошо и для этих кодеков. Вы можете принудительно использовать автоматический анализатор, установив этот флажок. В некоторых случаях, однако, явная модель существует по причине, если так, вы застряли.

  • Расширенное переопределение Это только для экспертов. Это заставляет вас выбирать каждое поле конфигурации отдельно, а не только несколько предопределенных значений, которые имеют смысл. Обратите внимание, что большинство комбинаций здесь недопустимы тем или иным образом, поэтому вам, вероятно, не стоит связываться с этим, если вы не прочитали и не поняли раздел «Конфигурация по умолчанию» спецификации HD Audio. (Который на момент написания статьи доступен здесь: http://www.intel.com/content/dam/www/public/us/en/documents/product-specification/high-definition-audio-specification. pdf )

  • Подсказки синтаксического анализатора Это позволяет отправлять специальные «подсказки» драйверу, что приводит к разному поведению синтаксического анализа. Оставьте их в настройках «по умолчанию», если вы не прочитали документацию на драйвер. (Который на момент написания этой статьи доступен здесь: https://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio.txt - см. Раздел «Строки подсказок».)


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

3

В KDE это можно сделать:

настройки системы -> мультимедиа -> настройки аудио и видео -> вкладка настройки аудиооборудования> выберите соответствующую звуковую карту> в разделе Разъем вы увидите вариант наушников и колонок.

системные настройки


3
Я не использую kde, но Unity имеет аналогичные «Настройки звука». Переключение устройства вывода звука с наушников на динамики приведет к отключению наушников. Кажется, это аппаратный переключатель, когда наушники подключены.
user276318

1

Расширение Gnome-Shell Audio-Output-Switcher

Самый простой способ - установить расширение переключателя аудиовыхода.

или вы можете клонировать с git напрямую:

git clone https://github.com/adaxi/audio-output-switcher.git ~/.local/share/gnome-shell/extensions/audio-output-switcher@anduchs

Скриншот

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


К сожалению, это не сработало для меня, но спасибо за ваш ответ!
десерт

0

Вы можете использовать Sound Switcher Indicator , если вы не против добавить PPA.

Это даст вам индикатор в системном трее, по которому вы можете щелкнуть, чтобы изменить источник входного или выходного аудио. Вы можете прочитать больше на http://yktoo.com/en/software/indicator-sound-switcher .

Терминальный метод

Для установки с помощью терминала введите следующее.

sudo add-apt-repository ppa:yktooo/ppa
sudo apt-get update
sudo apt-get install indicator-sound-switcher

GUI метод

Для установки с помощью графического интерфейса выполните следующие действия:

  1. Запустите приложение Software & Updates из Unity Dash.

  2. Нажмите на вкладку «Другое программное обеспечение». Затем добавьте следующий новый источник:

    deb http://ppa.launchpad.net/yktooo/ppa/ubuntu vivid main
    

    (Не забудьте заменить «vivid» на ваш выпуск Ubuntu. Поддерживаемые выпуски перечислены по адресу http://ppa.launchpad.net/yktooo/ppa/ubuntu/dists/ ).

  3. Запустите Ubuntu Software Center из Unity Dash.

  4. Найдите «Селекторный индикатор входа / выхода звука» и установите его.

Примечание. Это решение не будет работать, если в вашей системе есть аппаратный переключатель внутри разъема для наушников, как предложено Terrance выше.


Я на самом деле уже установил это. Как и в вашей заметке, похоже, есть аппаратный переключатель.
user276318

0

Я сделал этот скрипт для этой проблемы:

https://github.com/biplobsd/Fixing-front-panel-audio

Просто запустите команды, указанные в файле README хранилища в вашем терминале. Это загружает и запускает скрипт.

Эти команды:

git clone https://github.com/biplobsd/Fixing-front-panel-audio.git
cd Fixing-front-panel-audio
chmod +x Fixing-front-panel-audio.sh
./Fixing-front-panel-audio.sh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.