Como alternar entre fones de ouvido e alto-falantes sem desconectar os fones de ouvido

23

Quando conecto meus fones de ouvido, o dispositivo de saída de áudio muda para os fones de ouvido dos meus alto-falantes.

Em vez de conectar / desconectar os fones de ouvido o tempo todo, o que acabará desgastando meu cabo / tomada, gostaria de usar apenas uma chave de software.

Quando abro as Configurações de som e alterno de "Fones de ouvido -> Áudio embutido" para "Saída de linha -> Áudio embutido", nenhum som sai do meu alto-falante ou fones de ouvido.

Abri o alsamixer para ver o que acontece quando conecto / desconecto os fones de ouvido.

Fones de ouvido em: Fones de ouvido em

Saída dos fones de ouvido: Saída de fones de ouvido

Com os fones de ouvido conectados, eu mudei manualmente todas as configurações para corresponder às quando os fones de ouvido estão fora e ainda não obtive nenhum som pelo alto-falante.

Como observação, a alteração do dispositivo de saída de áudio através das "Configurações de som" causa as mesmas alterações no alsamixer.

user276318
fonte
11
Tanto quanto eu sei, é uma chave de hardware dentro do fone de ouvido que não permitirá a troca. Quando o interruptor é acionado, os alto-falantes são desativados. Você já pensou em usar fones de ouvido Bluetooth?
Terrance
Obrigado @Terrance, tive a sensação de que poderia ser algo parecido, até chequei o BIOS para ver se havia algo lá. Estou um pouco surpreso que eles tenham uma solução de hardware para o que deveria ser um problema de software.
user276318
11
Lembre-se de que a placa de som pode não ser capaz de produzir vários dispositivos - algumas placas de som são codificadas no nível do hardware para desativar a saída do alto-falante quando uma conexão de fone de ouvido é feita e que não pode ser substituída ...
Thomas Ward
@ Terrance Comecei uma recompensa, talvez você queira cavar mais e escrever uma resposta?
dessert
@dessert, veja a resposta de GoodGuyNick abaixo - pode não funcionar em todo o hardware e, na minha experiência, não separa as saídas (o que permitiria enviar o áudio do programa A para os alto-falantes e o programa B para os fones de ouvido ao mesmo tempo), mas se basta desabilitar a troca automática, é a primeira coisa a tentar.
quixotic

Respostas:

9

Com alto-falantes e fones de ouvido conectados e alternando o software on-the-fly

Por padrão, o Pulseaudio desativa automaticamente a Saída de Linha quando os fones de ouvido estão conectados e usa o controle deslizante de Fones de Ouvido. Você pode observar esse comportamento no alsamixer. O que queremos é ter os controles deslizantes de fone de ouvido e saída de linha funcionando separadamente e ao mesmo tempo. Isso é extremamente útil se você deseja remapear as tomadas da Realtek para, digamos, Rear Green para fones de ouvido e Blue para alto-falantes (com a ajuda do hdajackretask da alsa-tools).

Para conseguir isso, edite diretamente a configuração do Pulseaudio Mixer.

1. Dizemos ao pulseaudio que os fones de ouvido estão sempre conectados.

Editar:

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

Encontrar:

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

Mude nopara yes.

Se você estiver usando os conectores na parte frontal do gabinete do computador, mude [Jack Front Headphone].

2. Por padrão, o volume da saída de linha é controlado apenas pelo mestre e não pelo controle deslizante da saída de linha.

Queremos mesclar Line Out com Master. Adicione este trecho ao final do arquivo:

[Element Line Out]
switch = mute
volume = merge

3. Precisamos cortar completamente a saída de linha quando usamos fones de ouvido.

Editar:

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

Adicione este trecho ao final do arquivo:

[Element Line Out]
switch = off
volume = off

Em alguns sistemas, você também pode precisar desativar o Front adicionando este trecho:

[Element Front]
switch = off
volume = off

4. Como o Pulseaudio, a própria Alsa corta os alto-falantes quando os fones de ouvido são conectados.

Abra o alsamixer: alsamixer -c0oualsamixer -c1

Use / para o modo Auto-Mute. Desative o modo Auto-Mute com . Feche o alsamixer com Esc.

Salve suas alterações com: alsactl store

5. Reinicie o Pulseaudio

$ pulseaudio -k
$ pulseaudio --start

Agora você tem duas portas separadas no mesmo coletor no pulseaudio. Eles silenciam um ao outro, então você pode alternar para fones de ouvido e isso silenciará a Saída de Linha e vice-versa. Para alternar entre portas, você pode usar o mixer de som Gnome ou Plasma ou instalar a extensão de área de trabalho apropriada.


Fonte

WinEunuuchs2Unix
fonte
2
Você não deve editar arquivos diretamente no /usr/share. Se o pulseaudio receber uma atualização (por exemplo, para corrigir bugs), suas alterações serão apagadas. Geralmente, existe um mecanismo para fornecer arquivos de substituição /etcou similares, mas não conheço especificamente o pulseaudio.
Robie Basak
@RobieBasak A fonte desta informação é o site do Arch Linux. Infelizmente, eu não sou um usuário do Arch Linux, então não posso repassar seu comentário no site deles. Felizmente, um dos usuários do Arch Linux que circula por aqui lê o seu comentário e o repõe lá.
WinEunuuchs2Unix 16/02
11
@RobieBasak, assim, pode-se escrever um script que faz isso e chamá-lo após o login
Robert Riedl
11
Infelizmente, não funcionou para mim, mas obrigado pela sua resposta!
Dessert
11
@dessert O prazer é meu. Foi interessante pesquisar nessa área. Espero que você encontre o que você está procurando.
WinEunuuchs2Unix
9

Para tornar possível alternar entre alto-falantes e fones de ouvido, siga estas etapas:

  1. Corre alsamixer .
  2. Se necessário, selecione sua placa de som com F6 .
  3. Navegue para “Auto-Mute” com a seta direita .
  4. Desative-o com a seta para baixo .
  5. Pressione Escpara sair.

Ou você pode executar todas essas etapas com um comando:

  1. Terminal aberto
  2. corre amixer -c 1 set 'Auto-Mute Mode' Disabled

Agora você pode alternar entre alto-falantes e fones de ouvido no controle de volume PulseAudio.

Após a aplicação dessas instruções, você pode facilitar sua vida usando o Sound Switcher Indicator para alternar rapidamente entre fones de ouvido e alto-falantes.

GoodGuyNick
fonte
2
Eu não acho que isso funcione para todas as combinações de hardware - alguns sistemas (como o meu) parecem usar uma opção de hardware de alguma variedade, o que não é desconhecido. Por exemplo, se você conectar um fone de ouvido em um amplificador de guitarra, os alto-falantes em que amp geralmente será desligado - e não há computador naqueles dispositivos ....
Charles Green
Isso funcionou para mim em um Realtek ALC887-VD
Paul Praet
Obrigado. Funcionou para mim. Existe alguma maneira de realizá-lo via script bash?
ka3ak
11
@ ka3ak Atualizei a resposta para você
GoodGuyNick
4

O hdajackretask é uma ferramenta para reatribuir a função de suas tomadas para diferentes entradas, saídas ou desativações - por exemplo, transforme sua tomada de microfone em um fone de ouvido extra, ou por que não fazer as duas saídas de linha e conectá-las ao seu receptor surround?

Instale alsa-tools-gui

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

Execute hdajackretaskThen Para substituir um dos seus conectores:

  1. Selecione um codec
  2. Clique na caixa de seleção "Substituir" desse pino e selecione a nova função desejada
  3. Clique em "Apply now" (Aplicar agora).

    Nota: Se o fone de ouvido tiver um comutador de hardware embutido que redirecione o áudio, você estará SOL (Desculpe, por azar). No entanto, se o sistema operacional detectar quando uma linha é conectada ao fone de ouvido, o áudio provavelmente não será alternado mecanicamente.

Descobri que substituir os fones de ouvido e os alto-falantes ao mesmo tempo funciona melhor.


Captura de tela do hdajackretask para alternar o fone de ouvido para os alto-falantes:

insira a descrição da imagem aqui


Após clicar em "Aplicar agora", um script de shell é criado para fazer as alterações e solicitar a execução da senha do superusuário. O script também é salvo, no /tmpqual pode ser copiado e posteriormente executado com o sudo na linha de comando.

insira a descrição da imagem aqui

Execução da linha de comando

Como mencionado anteriormente, hdajackretaskcria um script, script.shem /tmpsemelhante ao /tmp/hda-jack-retask-QW1EEZ/para as funções de jack que você deseja:

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


Copie esse script em outro lugar do seu sistema (exceto / tmp)

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

Depois edite speaker.sh

cd ~username
nano speaker.sh

Adicione a linha killall pulseaudio &na parte superior do arquivo. Isso é necessário porque a função jack não pode ser alterada enquanto pulseaudioestiver em execução. Por padrão pulseaudio, reaparecerá. Altere também o caminho do errors.logarquivo para /tmpou onde quiser:

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


Para executar o script:

sudo ./speaker.sh



Na documentação alsa-tools-1.1.5 / hdajackretask / README :

Documentação para hdajackretask

A maioria das placas de som Intel HDA é, até certo ponto, retroskable, ou seja, pode ser usada para mais de uma coisa. Essa ferramenta é uma interface gráfica para facilitar a retificação das tomadas - por exemplo, transforme a tomada do microfone em um fone de ouvido extra, ou por que não fazer as duas saídas de linha e conectá-las ao receptor surround?

Começo rápido

Inicie o aplicativo "hdajackretask" na linha de comando. Selecione um codec na barra superior; algumas pessoas têm apenas um - se você tiver mais de um, um é o "principal" e o restante provavelmente são codecs HDMI.

Todas as tomadas (e outras entradas / saídas) são mostradas em "Configuração dos pinos". Para substituir uma das tomadas, clique na caixa de seleção "Substituir" desse pino e selecione a função desejada. Nota: Se você selecionar uma substituição de "Saída de linha (traseira)", também deverá ter uma substituição de "Saída de linha (frontal)". Uma substituição de "Saída de linha (centro / LFE)" funcionará apenas com as duas substituições anteriores e assim por diante.

Você pode experimentar sua nova configuração clicando em "Aplicar agora". Para tornar sua nova configuração o padrão de inicialização, clique em "Instalar substituição de inicialização". Para executar uma dessas ações, é necessário ter privilégios de root; portanto, você provavelmente precisará da sua senha.

Quickend

Você estragou? Clique no botão "Remover substituição da inicialização" e, depois que o processo estiver concluído, desligue o computador, aguarde um pouco e ligue-o novamente. Agora você deve estar de volta onde começou.

Funcionou?

Se assim for, seja feliz, compartilhe sua alegria, faça algo de bom!

Caso contrário, aqui estão algumas coisas para tentar:

  • Entre no alsamixer e veja se há novos controles de volume e veja se não estão emudecidos e configurados com um valor razoável.

  • Às vezes, o driver não desliga os pinos desconectados (se estiverem desconectados, por que se preocupar?). Você pode consertar isso desligando o computador completamente por um tempo.

  • Veja a opção "model = auto" abaixo

Se isso não ajudar, são grandes as chances de você encontrar um driver ou uma limitação de hardware. Você pode encontrar bugs de driver (talvez ninguém nunca tenha testado quatro fones de ouvido antes!). Se o fizer, sinta-se à vontade para denunciá-los na lista de discussão alsa-devel: no entanto, devido à falta de mão-de-obra, é provável que isso seja tratado com uma prioridade muito baixa (ter um som funcionando imediatamente para uma configuração padrão, é mais importante do que suportar configurações estranhas). No entanto, se você é um hacker de kernel e cria um patch que resolve seu problema sem estragar nada, as chances são muito altas de que ele seja mesclado.

Se você suspeitar que o problema está no aplicativo GUI, e não no driver do kernel, sinta-se à vontade para me escrever um e-mail (e, se desejar, inclua um patch!). Se sim, escreva para [email protected].

Opções

  • Mostrar pinos não conectados Seu BIOS é responsável por configurar quais pinos no codec estão realmente conectados a algo e quais não estão. Às vezes, o BIOS está com erros e não mostra todas as suas tomadas. Se você possui uma tomada que seu BIOS diz que não, tente ativar pinos aleatórios e veja se funciona.

  • Definir modelo = auto Alguns codecs, especialmente os mais antigos e nos kernels 3.8 e abaixo, são codificados para usar um modelo específico e, portanto, não se importam com suas substituições. Em muitos casos e com um kernel razoavelmente novo, o analisador automático agora também funciona bem para esses codecs. Você pode forçar o analisador automático a ser usado marcando esta caixa. Em alguns casos, porém, o modelo explícito existe por um motivo; se assim for, você está preso.

  • Substituição avançada Isso é apenas para especialistas. Faz você selecionar cada campo de configuração individualmente, em vez de apenas alguns valores predefinidos que fazem sentido. Observe que a maioria das combinações aqui são inválidas de uma maneira ou de outra, portanto você provavelmente não deve mexer com isso, a menos que tenha lido e entendido a seção "Padrão de configuração" da especificação HD Audio. (Que, no momento da redação deste documento, está disponível aqui: http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/high-definition-audio-specification. pdf )

  • Dicas do analisador Permite enviar "dicas" especiais ao driver que faz com que a análise se comporte de maneira diferente. Deixe-os na configuração "padrão", a menos que você tenha lido a documentação do driver. (Que, no momento da redação deste documento, está disponível aqui: https://www.kernel.org/doc/Documentation/sound/alsa/HD-Audio.txt - consulte a seção "Hint strings".)

tropeçar
fonte
11
Infelizmente, não funcionou para mim, mas obrigado pela sua resposta! Como a sua chega muito perto do que eu esperava e parece fornecer a melhor maneira de atingir a meta (se possível), você recebe a recompensa - parabéns! :)
dessert
3

No KDE, isso pode ser feito:

configurações do sistema -> multimídia -> configurações de áudio e vídeo -> guia de configuração de hardware de áudio> selecione a placa de som apropriada> em Conector, você verá a opção de fones de ouvido e alto-falantes.

configurações de sistema

Haytham-Med Haytham
fonte
3
Não estou usando o kde, mas o Unity possui "Configurações de som" semelhantes. Alterar o dispositivo de saída de áudio de fones de ouvido para alto-falantes silenciará apenas os fones de ouvido. Parece ser um interruptor de hardware quando os auscultadores estão ligados.
user276318
1

Comutador de saída de áudio da extensão Gnome-Shell

a maneira mais simples é instalar a extensão do comutador de saída de áudio

ou você pode clonar diretamente com o git:

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

captura de tela

Esta extensão adiciona uma pequena entrada ao menu de status que mostra o dispositivo de saída de áudio por pulso atualmente selecionado. Clicar nesse botão abrirá um submenu com todos os dispositivos de saída disponíveis e vamos escolher qual deles usar.

Jastria Rahmat
fonte
Infelizmente, não funcionou para mim, mas obrigado pela sua resposta!
Dessert
0

Você pode usar o Sound Switcher Indicator , se não se importar de adicionar um PPA.

Isso fornecerá um indicador na bandeja do sistema no qual você pode clicar para alterar as fontes de áudio de entrada ou saída. Você pode ler mais em http://yktoo.com/en/software/indicator-sound-switcher .

Método terminal

Para instalar, usando um terminal, digite o seguinte.

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

Método GUI

Para instalar, usando a GUI, siga estas etapas:

  1. Inicie o aplicativo Software & Updates a partir do Unity Dash.

  2. Clique na guia "Outro software". Em seguida, adicione a seguinte nova fonte:

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

    (Lembre-se de substituir "vívido" pela versão do Ubuntu. As versões suportadas estão listadas em http://ppa.launchpad.net/yktooo/ppa/ubuntu/dists/ ).

  3. Inicie o Ubuntu Software Center no Unity Dash.

  4. Procure "Indicador seletor de entrada / saída de som" e instale-o.

Nota: Esta solução não funcionará se o seu sistema tiver uma chave de hardware dentro do conector para fone de ouvido, conforme sugerido por Terrance acima.

PJ Singh
fonte
Na verdade, eu já tinha isso instalado. Como em sua nota, parece que há uma opção de hardware.
User276318
0

Eu criei este script para este problema:

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

Basta executar os comandos fornecidos no arquivo README do repositório no seu terminal. Isso baixa e executa o script.

Esses comandos são:

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
Biplob SD
fonte