Estoy usando Ubuntu Lucid (10.04). En mi script de shell que se ejecuta como root, quiero detectar si un cable de audio (conector analógico) está conectado a la computadora portátil o no. ¿Cómo puedo hacer eso? No necesito una solución portátil, necesito algo, sin importar qué tan complicado sea, que funcione en mi computadora portátil.
Respuesta aceptada:
Una forma podría ser usar amixer
.
Jack enchufado:
$ amixer -c 0 contents
numid=29,iface=CARD,name='Front Headphone Jack'
; type=BOOLEAN,access=r-------,values=1
: values=on
...
Jack no conectado:
$ amixer -c 0 contents
numid=29,iface=CARD,name='Front Headphone Jack'
; type=BOOLEAN,access=r-------,values=1
: values=off
...
Así que para ese específico podría hacer:
amixer -c 0 contents | \
awk -F"," '
$1 == "numid=29" {
c=1
} c && /: values/ {
split($0, a, "=")
print a[2];
exit
}'
dando salida de on
o off
.
También se pueden usar comandos y especificar por iface
+ name
etc., por ejemplo:
Obtener lista por:
$ amixer -c 0 controls
Donde -c 0
especifica la tarjeta, no es necesaria si es la predeterminada o solo una. Entonces, por ejemplo:
$ amixer -c 0 cget numid=29,iface=CARD
$ amixer -c 0 cget numid=29,iface=CARD | awk -F"=" 'NR == 3 {print $2;}'
Una vez me encontré con una pieza de software, creo que usaba Tcl/Tk, que mostraba pin-power para todos los puertos en la computadora + mucha otra información de HW. Era una buena pieza de software, pero no puedo volver a encontrarla. He mirado a través de 12 HDD viejos sin suerte. Lo usé para depurar algunos puertos jack. Así que sí, definitivamente es posible sondear el estado de un puerto específico.
Jack es un dolor para buscar en la web debido a JACK. Lo hace casi imposible.
Tengo un código C que hace un sondeo de información de la tarjeta de sonido. Tengo que buscar si puedo encontrarlo.