Estou escrevendo meu próprio status personalizado para o i3/Sway que mostra um indicador de volume, e me deparei com um problema.
Gostaria de saber se há uma maneira padrão, usando ferramentas Linux padrão -- talvez ALSA ou sysfs -- para detectar se os fones de ouvido estão conectados ou não? Eu preferiria fazer dessa forma, caso eu queira mudar do Pipewire para o JACK normal em algum momento, ou algo assim.
Vou postar um segmento dessa solução "meio funcional" que consegui encontrar online (desculpe, mas não lembro quem postou isso, então posso dar os créditos a essa pessoa).
has_headset() { grep -A4 -ri "Headphone Playback Switch" /proc/asound/card*/* | grep "Amp-Out vals.*\[0x00\]*" }
Essa função has_headset()
meio que funciona, mas o problema é que se os fones de ouvido estiverem conectados E silenciados, então não funcionará. Não tenho certeza do que os valores de "Amp-Out vals" significam. Parece ser [0x80] [0x80]
quando os fones de ouvido estão desconectados, e então [0x00] [0x00]
quando os fones de ouvido estão conectados e não silenciados.
Estou usando POSIX sh, mas soluções escritas especificamente para Bash também são mais que bem-vindas!
Funciona para mim com alsa-utils 1.2.12 no Debian trixie (teste) e dispositivo de áudio: Intel Corporation 7 Series/C216 Chipset Family High Definition Audio Controller (rev 04) .
Veja também
amixer -c0 contents
para ver todos os controles do cartão 0 caso o nome seja diferente doHeadphone Jack
seu caso.O laptop em que testei tem um conector TRRS combinado para fone de ouvido e microfone, mas ainda vejo um
Mic Jack
controle adicional que muda paraon
quando conecto um fone de ouvido, mas não um fone de ouvido sem microfone (conector TRS). Então, parahas_headset
verificar se o fone de ouvido e o microfone estão conectados ao mesmo cartão, você pode fazer:Observe que em
strace
, vejoamixer
fazendo um:Então não estou obtendo as informações de
/proc
nem/sys
.