Eu tenho sofrido com o mesmo problema por um tempo, e finalmente tive a chance de olhar para ele. Acontece que descarregar e recarregar o módulo Pulseaudio responsável pelo dispositivo de áudio funciona para mim.
Descarregando e recarregando o módulo manualmente
Na janela do terminal, digite o comando
pacmd list-cards
e a partir da saída, localize o dispositivo de áudio que está faltando perfis. Você provavelmente obterá vários cartões e precisará localizar o cartão certo. O meu parece assim:
[...]
index: 8
name: <alsa_card.usb-Logitech_Logitech_USB_Headset-00-Headset>
driver: <module-alsa-card.c>
owner module: 27
properties:
alsa.card = "1"
alsa.card_name = "Logitech USB Headset"
[... more output ...]
[...]
Da sua saída, procure a linha " módulo proprietário ". Esse é o módulo que você precisa descarregar, mas será necessário verificar primeiro os parâmetros, para poder recarregá-lo. Digite o comando
pacmd list-modules
e localize o módulo que está dirigindo seu cartão. Novamente, a parte relevante da saída no meu caso se parece com isso ( index corresponde ao módulo proprietário da saída de pacmd list-cards ):
[...]
index: 27
name: <module-alsa-card>
argument: <device_id="1" name="usb-Logitech_Logitech_USB_Headset-00-Headset" card_name="alsa_card.usb-Logitech_Logitech_USB_Headset-00-Headset" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1">
used: 2
load once: no
properties:
[... more output ...]
[...]
Você precisará do nome e dos argumentos do módulo para recarregá-lo.
Para descarregar o módulo, digite o comando (substitua module-index pelo valor apropriado da sua saída)
pacmd unload-module module-index
Para recarregar o módulo depois de descarregado, digite o comando
pacmd load-module module-name module-arguments
Substitua module-name e module-arguments pelos valores da saída de pacmd list-modules . Deixe de fora os colchetes angulares.
Agora o módulo deve ser recarregado e, com alguma sorte, seus perfis de fone de ouvido estão de volta.
Aplicando automação
As etapas acima são trabalhosas se você precisar redefinir seu dispositivo com frequência, pois o índice do módulo continua mudando e você precisa pesquisá-lo sempre. Eu escrevi um script de shell para mim mesmo para automatizar o pior:
#!/bin/bash
if [ -z "" ]; then
echo "Pulseaudio has these cards:"
pacmd list-cards | grep 'name: '
exit 0
fi
MODULE_INDEX='pacmd list-modules | tac | grep -A 10 -e "argument: .*" | grep 'index:' | head -n 1 | cut -d ':' -f 2 | tr -d ' ''
MODULE_NAME='pacmd list-modules | tac | grep -A 10 -e "argument: .*" | grep 'name:' | head -n 1 | cut -d ':' -f 2 | tr -d '<>''
MODULE_ARGUMENTS='pacmd list-modules | tac | grep -e "argument: .*" | head -n 1 | cut -d ':' -f 2 | tr -d '<>''
echo "Module index is $MODULE_INDEX"
echo "Module name: $MODULE_NAME"
echo "Module args: $MODULE_ARGUMENTS"
if [ -z "$MODULE_INDEX" ]; then echo "Could not find module index"; exit 0; fi
if [ -z "$MODULE_NAME" ]; then echo "Could not find module name"; exit 0; fi
if [ -z "$MODULE_ARGUMENTS" ]; then echo "Could not find module arguments"; exit 0; fi
echo "Unloading module"
pacmd unload-module $MODULE_INDEX
echo ""
echo "Reloading module"
pacmd load-module $MODULE_NAME $MODULE_ARGUMENTS
echo ""
Quando executado sem argumentos, o script lista as cartas que o Pulseaudio conhece. Quando uma parte do nome de uma carta é fornecida como argumento, o script tenta descarregar e recarregar o módulo Pulseaudio relevante.