Você sabe como, quando você conecta fones de ouvido na entrada auxiliar do laptop, os alto-falantes internos são silenciados automaticamente e o som sai dos fones de ouvido? Eu quero exatamente isso para HDMI.
Conecto um monitor com alto-falantes embutidos ao meu laptop para assistir a vídeos, às vezes. É muito estranho quando o vídeo está no monitor (a 3 metros da minha mesa), mas o som sai dos alto-falantes internos do meu laptop (o laptop fica na mesa).
Claro, eu posso apenas ir para as configurações de som e mudar o canal de saída para HDMI. Porém, mais tarde, quando removi o cabo HDMI horas atrás e talvez até estivesse em um local totalmente diferente, o som não será reproduzido porque o servidor de som ainda tenta reproduzi-lo via HDMI, mas não há nada conectado a ele .
Voltar automaticamente para os alto-falantes internos quando nenhum dispositivo estiver conectado via HDMI é mais importante, mas alternar para a saída de som via HDMI quando um dispositivo estiver conectado ainda seria muito bom.
Aparentemente, isso funcionou com a 11.10, mas não com a 16.04.
Respostas:
fundo
Tive um problema semelhante durante a suspensão / retomada, quando o som mudava da TV HDMI para os alto-falantes do laptop. Ao retomar, o som permaneceria nos alto-falantes do laptop e eu teria que redefinir manualmente o dispositivo de saída para TV em
System Settings
->Sound
.Esta foi uma das minhas primeiras experiências irritantes com a atualização do Ubuntu 14.04 para 16.04 e a raiz foi a atualização para o PulseAudio 8 que vem com o 16.04 LTS
Depois de muita pesquisa, criei um script chamado
TV-sound
. Embora eu não conecte e desconecte a TV como você, fiz algumas pesquisas no Google e criei uma variação do script para funcionar na sua situação. Eu testei e funciona.Etapa 1: criar script para alternar o áudio entre os dispositivos conectados
Vamos criar um script chamado
hotplugtv
udev. Esse mesmo script pode ser chamado em muitos lugares. Por exemplo, durante o teste, usei-olock-screen-timer
onde o som voltava ao laptop durante o bloqueio da tela.Quando o editor abrir com uma tela em branco, copie e cole o seguinte:
Você precisará substituir as duas ocorrências
rick
por seu próprio ID de usuário, por exemploUTF-8
, etc.Eu sei que isso pode ser mais profissional, com o nome de usuário definido automaticamente como uma variável bash, mas ainda não sou tão habilidoso :( De qualquer forma, salve o arquivo e saia
gedit
.Etapa 2: criar regras do udev
O udev monitora os eventos de hotplug quando você conecta e desconecta o monitor HDMI. Digite o seguinte para criar uma nova regra.
NOTA: Se o arquivo
70-persistent-net.rules
não existir no seu diretório, copie qualquer outro arquivo lá. Não precisamos do conteúdo do arquivo, apenas as permissões do arquivo para garantir que as nossas sejam as mesmas.O editor irá mostrar um monte de texto irrelevante, destacá-lo e excluí-lo. Em seguida, destaque o código abaixo e cole-o no editor:
Salve o arquivo e saia.
Para habilitar a regra (sem reiniciar), precisamos recarregar o udev:
Agora você pode conectar e desconectar o monitor / TV HDMI e o som muda adequadamente.
Embargo
No meu sistema, o som reverte automaticamente para os alto-falantes do laptop quando o HDMI é desconectado. No seu sistema, isso não aconteceu. Poderão ser necessários aprimoramentos adicionais no código se o som não for para os alto-falantes do laptop quando o HDMI estiver desconectado. Por favor, responda via comentário abaixo como as coisas funcionam / não funcionam.
Teste rápido na CLI
Você pode testar rapidamente o código no terminal usando:
Mudar para HDMI / TV:
Volte para os alto-falantes embutidos:
Lembre-se de substituir
rick
pelo seu nome de usuário.export
linha inicial provavelmente não é necessária, mas eu a incluí apenas por segurança.hdmi-stereo
ajustes é obviamente necessário para descobrir os parâmetros corretos antes de escrever seu script.Decifrando o nome do seu dispositivo no PulseAudio
O código abaixo usa o mesmo comando duas vezes. Uma vez quando o som estiver definido para TV HDMI externa. Uma segunda vez quando o som é definido para os alto-falantes embutidos do laptop. Cada vez que você vir o nome que o PulseAudio usa:
Quando você tem várias placas de som
Use o comando
aplay -l
para verificar se você possui cartões maiores que o número 0. Nesse caso, você precisará usar o número de cartão apropriado em seus scripts. Por exemplo:No exemplo acima, todos os números de cartões são 0 com diferentes fontes de saída. Se você possui alto-falantes USB, eles podem ter um número de cartão diferente de 0.
Editar 2 de dezembro de 2016
Por alguma razão desconhecida, o script foi quebrado hoje. O código acima costumava ler: "$ (cat / sys / class / drm / card0-HDMI-A-1 / status", mas tive que mudar
card0
paracard1
e o código acima foi revisado como tal. Não sei explicar o que mudou no meu sistema, exceto atualizações regulares do Ubuntu desde 26 de novembro de 2016.Editar 14 de dezembro de 2016
O código acima precisava ser alternado novamente para: "$ (cat / sys / class / drm / card0-HDMI-A-1 / status". Em vez de revisar o código entre
card0
ecard1
dependendo da inicialização, revise o programa para fazer referênciacard*
a capturar os dois cenários .fonte
70-persistent-net.rules
porque não existe./etc/udev/rules.d
contém apenas um único arquivo chamado39-smfp_samsung.rules
.cat /sys/class/drm/card0-HDMI-A-1/status
mostra o status correto (tentei várias vezes).output:analog-stereo
: pastebin.com/n5bHyhCm Isso torna ainda mais estranho, porque eu esperaria que o som fosse sempre reproduzido via HDMI. Capturas de tela das minhas configurações de som quando o HDMI está conectado e quando o HDMI não está conectado . Edit: Eu já tentei isso, mas levei mais alguns minutos para postar este comentário porque eu tinha que fazer o upload das capturas de tela.