O Debian troca os alto-falantes do laptop para fones de ouvido, mas não o HDMI para fones de ouvido. A saída de áudio pode ser comutada automaticamente?

O Debian troca os alto-falantes do laptop para fones de ouvido, mas não o HDMI para fones de ouvido. A saída de áudio pode ser comutada automaticamente?

Ao usar alto-falantes de laptop, conectar fones de ouvido alterna automaticamente a saída dos alto-falantes para os fones de ouvido e vice-versa para desconectar. Ao usar os alto-falantes do monitor via HDMI, não há troca automática:

A saída de áudio pode ser alternada automaticamente entre dispositivos quando os fones de ouvido estão (des) conectados?

Debian 12 (bookworm), versão do kernel 6.7.9-2, pipewire 1.0.5.

Responder1

A troca automática de áudio entre alto-falantes de laptop e fones de ouvido analógicos ocorre entre diferentes saídas de um único chip de áudio. O chip pode até ter algum suporte de hardware para ele: com conectores de áudio no painel frontal estilo HD-Audio, é um recurso selecionável dentro do chip de som que, quando ativado, silencia automaticamente outras saídas quando detecta que os fones de ouvido estão conectados.

(Se você usar, por exemplo, alsamixere selecionar o mixer de hardware real do seu chip de som em vez do controle de volume simplificado fornecido pelo Pipewire, você poderá vê-lo como uma Auto-Mutealternância.)

Com conectores de áudio do painel frontal estilo AC97 mais antigos, na verdade é uma chave mecânica dentro do próprio conector de áudio, que interromperá os sinais de saída para a saída de alto-falante/linha quando um conector de fone de ouvido for conectado.

Ao alternar entre HDMI e fones de ouvido de qualquer tipo, ou entre alto-falantes de laptop e fones de ouvido USB, o fluxo de dados de áudio precisa ser alternado para um chip de áudio diferente. O Pipewire pode fazer isso, mas só o fará se as prioridades do coletor de saída estiverem definidas corretamente e a comutação automática estiver habilitada.

Veresta entrada do blog: descreve como verificar e ajustar as prioridades do coletor de áudio na wireplumbersérie 0.4, que é o que o Debian 12 possui.Este conselho não será diretamente aplicável se você tiver wireplumber0.5 ou superior, pois o método de configuração mudou na versão 0.5.

Resumindo: o primeiro passo é ativar a troca automática quando um novo dispositivo de som é conectado. Você pode fazer isso temporariamente executando pactl load-module module-switch-on-connect.

Esta pergunta do AskUbuntu.SEtambém inclui a sugestão de executar pactl load-module module-switch-on-port-available: Entendo que permite a troca quando uma nova porta fica disponível em um dispositivo de áudio existente.

Para tornar os comandos acima persistentes, leia /usr/share/pipewire/pipewire-pulse.confexemplos e adicione a parte relevante a um *.confarquivo em seu ~/.config/pipewire/pipewire-pulse.conf.d/diretório (crie-o se não existir). Por exemplo:

pulse.cmd = [
    { cmd = "load-module" args = "module-always-sink" flags = [ ] } #default
    { cmd = "load-module" args = "module-switch-on-connect" } #uncommented
    { cmd = "load-module" args = "module-switch-on-port-available" }  #added
    #{ cmd = "load-module" args = "module-gsettings" flags = [ "nofail" ] }
]

A segunda etapa é garantir que seus dispositivos de som recebam as prioridades apropriadas atribuídas a eles.

Você pode usar wpctl statuspara ver os números de identificação de qualquer dispositivo de interesse do Pipewire e, em seguida, wpctl inspect <number> | grep -e node -e priorityver o(s) nome(s), descrição e prioridade de um dispositivo de áudio específico. Caso a ordem de prioridade padrão não seja a desejada, você pode criar um ~/.config/wireplumber/main.lua.d/60-*.luaarquivo para ajustá-las, com conteúdo semelhante a este:

rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_output.usb-MOTU_M4_M4MC0570FU-00.Direct__hw_M4__sink" },
    },
  },
  apply_properties = {
    ["priority.driver"] = 1050,
    ["priority.session"] = 1050,
  },
}

A prioridade padrão para o dispositivo de som primário "esperado" deve ser cerca de 1009, portanto, atribuir um valor mais alto a algum outro dispositivo de som pipewireo tornaria preferível a outros, se estiver disponível. Mas você não deve atribuir um valor superior a 1500, pois os valores superiores a esse são reservados para dispositivos monitores.

Aparentemente também existem valores de prioridade para portas individuais, infelizmente não sei como personalizá-los. Você pode visualizá-los pactl list cardsembora a saída seja bastante longa.

Se alguém souber uma boa maneira de ajustar as prioridades das portas do Pipewire, sinta-se à vontade para editá-la se não quiser escrever sua própria resposta completa.

informação relacionada