¿Sabes cómo cuando conectas los auriculares al conector auxiliar de tu computadora portátil, los altavoces internos se silencian automáticamente y el sonido sale de tus auriculares? Quiero exactamente eso para HDMI.
Conecto un monitor con altavoces integrados a mi computadora portátil para ver videos, a veces. Es muy extraño cuando el video está en el monitor (que se encuentra a 3 m de distancia de mi escritorio) pero el sonido sale de los altavoces internos de mi computadora portátil (la computadora portátil se encuentra en el escritorio).
Por supuesto, puedo ir a la configuración de sonido y cambiar el canal de salida a HDMI. Pero luego, más tarde, cuando quité el cable HDMI hace horas e incluso podría estar en una ubicación totalmente diferente, el sonido no se reproducirá porque el servidor de sonido aún intenta reproducirlo a través de HDMI pero no hay nada conectado a él. .
Cambiar de nuevo automáticamente a los altavoces internos cuando no hay ningún dispositivo conectado a través de HDMI es más importante, pero cambiar a la salida de sonido a través de HDMI cuando un dispositivo está conectado aún sería muy bueno.
Esto aparentemente funcionó con 11.10 pero no funciona con 16.04.
Respuestas:
Antecedentes
Tuve un problema similar durante la suspensión / reanudación cuando el sonido cambiaba de TV HDMI a altavoces portátiles. Al reanudar el sonido permanecería en los altavoces de la computadora portátil y tendría que restablecer manualmente el dispositivo de salida a TV en
System Settings
->Sound
.Esta fue una de mis primeras experiencias molestas con la actualización de Ubuntu 14.04 a 16.04 y la raíz fue actualizar a PulseAudio 8 que viene con 16.04 LTS
Después de mucho buscar, creé un script llamado
TV-sound
. Aunque no enchufo ni desconecto el televisor como usted, hice algunas búsquedas en Google y creé una variación del guión para que funcione en su situación. Lo he probado y funciona.Paso 1: crea un script para cambiar el audio entre dispositivos conectados
Crearemos un script llamado
hotplugtv
que udev llama. Sin embargo, este mismo script se puede llamar en muchos lugares. Por ejemplo, durante las pruebas lo usé enlock-screen-timer
donde el sonido volvió a la computadora portátil durante el bloqueo de pantalla.Cuando el editor se abre con una pantalla en blanco, copie y pegue lo siguiente en él:
Deberá reemplazar las dos ocurrencias de
rick
con su propia identificación de usuario, es decirUTF-8
, etc.Sé que esto puede ser más profesional con el nombre de usuario configurado automáticamente en una variable bash, pero aún no soy tan hábil :( De todos modos, guarde el archivo y salga
gedit
.Paso 2: crear reglas de udev
udev monitorea los eventos de conexión en caliente cuando conecta y desconecta su monitor HDMI. Escriba lo siguiente para crear una nueva regla.
NOTA: Si el archivo
70-persistent-net.rules
no existe en su directorio, copie cualquier otro archivo allí. No necesitamos el contenido del archivo, solo los permisos del archivo para garantizar que el nuestro sea el mismo.El editor mostrará un montón de texto irrelevante, lo resaltará y lo eliminará. Luego resalte el código a continuación y péguelo en el editor:
Guarda el archivo y cierra.
Para habilitar la regla (sin reiniciar) necesitamos volver a cargar udev:
Ahora puede conectar y desconectar su monitor / TV HDMI y el sonido cambiará adecuadamente.
Consideración
En mi sistema, el sonido vuelve automáticamente a los altavoces de la computadora portátil cuando HDMI está desconectado. En su sistema no lo hizo. Es posible que se requieran mejoras adicionales al código si el sonido no llega a los altavoces de su computadora portátil cuando HDMI está desconectado. Responda a través del comentario a continuación cómo funcionan / no funcionan las cosas.
Pruebas rápidas en CLI
Puede probar rápidamente el código en la terminal utilizando:
Cambiar a HDMI / TV:
Vuelva a los altavoces integrados:
Recuerde reemplazar
rick
con su nombre de usuario.export
línea inicial probablemente no sea necesaria, pero la he incluido solo para estar seguro.hdmi-stereo
obviamente se necesitan algo más que ajustes para descubrir los parámetros correctos antes de escribir su script.Descifrando el nombre de su dispositivo dentro de PulseAudio
El siguiente código usa el mismo comando dos veces. Una vez cuando el sonido se configura en un televisor HDMI externo. Una segunda vez cuando el sonido se configura en los altavoces integrados de la computadora portátil. Cada vez que vea el nombre que utiliza PulseAudio:
Cuando tienes múltiples tarjetas de sonido
Use el comando
aplay -l
para ver si tiene tarjetas mayores que el número 0. Si es así, necesitará usar el número de tarjeta apropiado en sus scripts. Por ejemplo:En el ejemplo anterior, todos los números de tarjeta son 0 con diferentes fuentes de salida. Si tiene altavoces USB, pueden tener un número de tarjeta diferente a 0.
Editar 2 de diciembre de 2016
Por alguna razón desconocida, el guión se rompió hoy. Por encima de código usado para leer: "$ (cat / sys / class / DRM / card0-HDMI-A-1 / estado", pero que tenía que cambiar
card0
acard1
y el código anterior se ha revisado como tal, no puede explicar lo que ha cambiado. en mi sistema, aparte de las actualizaciones regulares de Ubuntu desde el 26 de noviembre de 2016.Editar 14 de diciembre de 2016
El código anterior debía cambiarse nuevamente a: "$ (cat / sys / class / drm / card0-HDMI-A-1 / status". En lugar de revisar el código entre
card0
ycard1
dependiendo del arranque, revise el programa a la referenciacard*
para capturar ambos escenarios .fuente
70-persistent-net.rules
porque no existe./etc/udev/rules.d
solo contiene un solo archivo llamado39-smfp_samsung.rules
.cat /sys/class/drm/card0-HDMI-A-1/status
muestra el estado correcto (lo intenté varias veces).output:analog-stereo
: pastebin.com/n5bHyhCm Esto lo hace aún más extraño porque entonces esperaría que el sonido siempre se reproduzca a través de HDMI. Capturas de pantalla de mi configuración de sonido cuando HDMI está conectado y cuando HDMI no está conectado . Editar: ya lo intenté, pero me tomó unos minutos más publicar este comentario porque tuve que subir las capturas de pantalla.