Je ne suis pas sûr de comprendre la dernière partie - avez-vous l'intention de le faire en connectant un matériel supplémentaire à votre ordinateur?
rozcietrzewiacz
@rozcietrzewiacz - J'ai une application java qui doit être notifiée si le casque est branché ou débranché. Tel est mon objectif. Je suis ouvert à toute suggestion / recommandation avec ou sans utilisation de matériel supplémentaire.
user775633
@ Gilles - Non, le matériel typique fournit une notification au logiciel. Je sais que c'est U&L, mais vous connaissez probablement la notification Windows ennuyeuse classique: "Vous avez branché un appareil sur la prise audio!" i51.tinypic.com/2w2hogw.jpg . Heureusement, Linux ne fait pas cela, mais les informations devraient être disponibles à partir du matériel que vous avez. La question est de savoir comment le système d'exploitation rend ces informations disponibles.
Kevin Vermeer
@KevinVermeer Je ne connais pas cette gêne particulière de Windows, non. Bon à savoir que le matériel moderne fournit une notification, merci. Linux fournirait généralement les informations jusque- /syslà, et peut-être des notifications via dbus.
Gilles 'SO- arrête d'être méchant'
Ce n'est pas sur un système Windows. Ce problème concerne les systèmes d'exploitation LINUX. J'aurais dû être plus explicite. Désolé! Quoi qu'il en soit, par défaut, il n'y a pas de moyen facile de piéger cette notification .. C'est pourquoi je pense même à rechercher s'il existe des cartes personnalisées qui ont un pilote qui interceptera et rendra ce signal disponible pour les applications fonctionnant sous Linux.
user775633
Réponses:
17
Dans mon linux (Debian GNU / Linux 3.12.0 x86_64), cela est connu par le système acpi, donc appeler acpi_listenmontre:
Cela fonctionne parfaitement sur mon système Ubuntu 15.10 avec HDA Intel PCH, ALC892 Analog, comme l'a rapporté Alsa. CONFIG_SND_HDA_INPUT_JACK = y est défini.
kevinf
14
Ces informations sont disponibles dans /proc/asound/card0/codec#0et dépendent du matériel. Pour mon ordinateur, c'est dans la section qui capture ces informations:
man inotifydit que les pseudo-fs comme / proc ne sont pas contrôlables avec inotify. Y at-il un travail autour?
Bibek_G
@Bibek_G oui, utilisez acpi_listen(voir la réponse du théiste).
Don Hatch
J'ai dû utiliser audio1au lieu de audio0pour que cela fonctionne, même si je n'ai qu'un simple ordinateur portable avec une seule carte son. donc c'est /proc/asound/card1/codec#0pour moi, ça pourrait être encore un autre numéro pour toi.
hoijui
3
Trouvez le taggeur udev de la prise sur le système, connectez un client (dbus-monitor) qui surveille le bus à l'aide de DBus pour les messages sur la connexion et la déconnexion de la prise.
Si votre noyau a des entrées jack configurées
root@brix:~# grep CONFIG_SND_HDA_INPUT_JACK /boot/config-$(uname -r)
En utilisant, Evtestvous pouvez répertorier tous vos événements d'entrée.
root@brix:/etc/acpi# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Power Button
/dev/input/event2: Logitech Logitech BT Mini-Receiver
/dev/input/event3: CM Storm QuickFire Rapid keyboard
/dev/input/event4: CM Storm QuickFire Rapid keyboard
/dev/input/event5: PixArt Microsoft USB Optical Mouse
/dev/input/event6: Logitech Logitech BT Mini-Receiver
/dev/input/event7: Video Bus
/dev/input/event8: HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event9: HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event10: HDA Intel HDMI HDMI/DP,pcm=8
/dev/input/event11: HDA Intel PCH Front Mic
/dev/input/event12: HDA Intel PCH Rear Mic
/dev/input/event13: HDA Intel PCH Line
/dev/input/event14: HDA Intel PCH Line Out
/dev/input/event15: HDA Intel PCH Front Headphone
Select the device event number [0-15]: 14
Input driver version is 1.0.1
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "HDA Intel PCH Line Out"
Supported events:
Event type 0 (EV_SYN)
Event type 5 (EV_SW)
Event code 6 (SW_LINEOUT_INSERT)
Properties:
Testing ... (interrupt to exit)
Event: time 1465927534.591787, type 5 (EV_SW), code 6 (SW_LINEOUT_INSERT), value 0
Event: time 1465927534.591787, -------------- EV_SYN ------------
Event: time 1465927536.618428, type 5 (EV_SW), code 6 (SW_LINEOUT_INSERT), value 1
Event: time 1465927536.618428, -------------- EV_SYN ------------
Puisque vous voulez simplement vérifier son état, vous pouvez peut-être utiliser un mécanisme d'interrogation dans votre programme java qui peut vérifier l'état des broches ci-dessus à l'aide de hda. Pour cela, votre programme java doit pouvoir appeler hda-verb. Alternativement, vous pouvez vérifier la source du verbe hda tel qu'il est disponible et voir comment ils l'ont fait.
Mon ordinateur portable dispose d'un système audio Conexant Intel HDA, mais les contrôles de volume de la prise micro et casque ne s'affichent jamais à l'intérieur des nombreux mélangeurs disponibles, même en même temps. Les haut-parleurs micro et casque ne peuvent être allumés ou éteints. Voici un petit script pour faire exactement cela:
#!/bin/bash
#
# Switching on or off your headphone speaker and mic jacks
# and at the same time switching off or on your laptop front speakers.
# requires hda-verb-0.3-6-mdv2011.0.x86_64
#
# Before putting it in place make sure to test your PIN_WIDGET_CONTROL's
# with su -c 'python2 hda-analyzer.py' available here :
# http://www.alsa-project.org/hda-analyzer.py
#
PIN_CONFIGS=/sys/class/sound/hwC0D0/init_pin_configs
if [ ! -f $PIN_CONFIGS ]; then
echo "Your kernel is missing CONFIG_SND_HDA_HWDEP=y"
exit 0
fi
if [ ! -f /usr/sbin/hda-verb ]; then
echo "This script requires hda-verb-0.3-6-mdv2011.0.x86_64"
exit 0
fi
PINS_PRESENT=`cat $PIN_CONFIGS | awk '{print $1}'`
if [ `basename $0` = "speakers-off.sh" ]; then
# Headset (Mic (Node 0x1b) + Headphone Drive (Node 0x19)) : ON
# Laptop Speaker (Node 0x1f) : OFF
[ `echo "$PINS_PRESENT" | grep 0x19` ] &&
/usr/sbin/hda-verb /dev/snd/hwC0D0 0x19 SET_PIN_WIDGET_CONTROL 0x40
[ `echo "$PINS_PRESENT" | grep 0x1f` ] &&
/usr/sbin/hda-verb /dev/snd/hwC0D0 0x1f SET_PIN_WIDGET_CONTROL 0
[ `echo "$PINS_PRESENT" | grep 0x1b` ] &&
/usr/sbin/hda-verb /dev/snd/hwC0D0 0x1b SET_PIN_WIDGET_CONTROL 0x64
fi
if [ `basename $0` = "speakers-on.sh" ]; then
# Headset (Mic (Node 0x1b) + Headphone Drive (Node 0x19)) : OFF
# Laptop Speaker (Node 0x1f) : ON
[ `echo "$PINS_PRESENT" | grep 0x19` ] &&
/usr/sbin/hda-verb /dev/snd/hwC0D0 0x19 SET_PIN_WIDGET_CONTROL 0
[ `echo "$PINS_PRESENT" | grep 0x1f` ] &&
/usr/sbin/hda-verb /dev/snd/hwC0D0 0x1f SET_PIN_WIDGET_CONTROL 0x40
[ `echo "$PINS_PRESENT" | grep 0x1b` ] &&
/usr/sbin/hda-verb /dev/snd/hwC0D0 0x1b SET_PIN_WIDGET_CONTROL 0x24
fi
exit 0
/sys
là, et peut-être des notifications via dbus.Réponses:
Dans mon linux (Debian GNU / Linux 3.12.0 x86_64), cela est connu par le système acpi, donc appeler
acpi_listen
montre:cela semble dépendre d'une option sélectionnée dans la configuration du noyau
CONFIG_SND_HDA_INPUT_JACK
Si tel est votre cas, vous pouvez remplir
/etc/acpi/events/
des scripts pour déclencher ce que vous voulez.Consultez la page de manuel acpid http://linux.die.net/man/8/acpid
la source
Ces informations sont disponibles dans
/proc/asound/card0/codec#0
et dépendent du matériel. Pour mon ordinateur, c'est dans la section qui capture ces informations:Casque connecté:
Casque déconnecté (voir
Pin-ctls
):Vous pouvez utiliser inotify pour vérifier si le fichier a été modifié et récupérer les informations.
Voir également https://askubuntu.com/questions/133809/mute-sound-on-headphone-unplug .
la source
man inotify
dit que les pseudo-fs comme / proc ne sont pas contrôlables avec inotify. Y at-il un travail autour?acpi_listen
(voir la réponse du théiste).audio1
au lieu deaudio0
pour que cela fonctionne, même si je n'ai qu'un simple ordinateur portable avec une seule carte son. donc c'est/proc/asound/card1/codec#0
pour moi, ça pourrait être encore un autre numéro pour toi.Trouvez le taggeur udev de la prise sur le système, connectez un client (dbus-monitor) qui surveille le bus à l'aide de DBus pour les messages sur la connexion et la déconnexion de la prise.
la source
Si votre noyau a des entrées jack configurées
root@brix:~# grep CONFIG_SND_HDA_INPUT_JACK /boot/config-$(uname -r)
En utilisant,
Evtest
vous pouvez répertorier tous vos événements d'entrée.la source
Un outil appelé hda-verb peut activer / désactiver la prise casque à l'aide de broches.
Par exemple,
Pour activer la prise casque, utilisez:
Pour désactiver la prise casque, utilisez:
Puisque vous voulez simplement vérifier son état, vous pouvez peut-être utiliser un mécanisme d'interrogation dans votre programme java qui peut vérifier l'état des broches ci-dessus à l'aide de hda. Pour cela, votre programme java doit pouvoir appeler hda-verb. Alternativement, vous pouvez vérifier la source du verbe hda tel qu'il est disponible et voir comment ils l'ont fait.
la source
Mon ordinateur portable dispose d'un système audio Conexant Intel HDA, mais les contrôles de volume de la prise micro et casque ne s'affichent jamais à l'intérieur des nombreux mélangeurs disponibles, même en même temps. Les haut-parleurs micro et casque ne peuvent être allumés ou éteints. Voici un petit script pour faire exactement cela:
la source