Обнаружение подключения /разъединения наушников в Linux

Я пытаюсь обнаружить сигнал, когда наушники подключены или отсоединены от системы. Каков наилучший способ сделать это?

Если есть специальная плата с драйверами, это будет мой предпочтительный способ.

27 голосов | спросил user775633 30 32011vEurope/Moscow11bEurope/MoscowWed, 30 Nov 2011 18:00:22 +0400 2011, 18:00:22

5 ответов


14

В моем Linux (Debian GNU /Linux 3.12.0 x86_64) это известно системой acpi, поэтому вызов acpi_listen показывает:

jack/microphone MICROPHONE plug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE unplug

это зависит от выбранной опции в конфигурации ядра CONFIG_SND_HDA_INPUT_JACK

Если это ваш случай, вы можете заполнить /etc/acpi/events/ скриптами, чтобы вы могли нанести нужный вам вызов.

Проверьте страницу персонифицированного человека http://linux.die.net/man/8/acpid

ответил theist 5 Maypm14 2014, 23:12:02
12

Эта информация доступна в /proc/asound/card0/codec#0 и зависит от оборудования. Для моего компьютера в этом разделе содержится информация:

Подключение наушников:

[...]
Node 0x0d [Pin Complex] wcaps 0x400181: Stereo
  Control: name="Speaker Phantom Jack", index=0, device=0
  Pincap 0x00000014: OUT Detect
  Pin Default 0x90170110: [Fixed] Speaker at Int N/A
    Conn = Analog, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x00:
[...]

Отключен наушник (см. Pin-ctls ):

[...]
Node 0x0d [Pin Complex] wcaps 0x400181: Stereo
  Control: name="Speaker Phantom Jack", index=0, device=0
  Pincap 0x00000014: OUT Detect
  Pin Default 0x90170110: [Fixed] Speaker at Int N/A
    Conn = Analog, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
[...]

Вы можете использовать inotify, чтобы проверить, был ли файл изменен и grep-информация.

См. также https://askubuntu.com/questions/133809/mute-sound-on -headphone-отсоединить .

ответил Florian Bw 10 MonEurope/Moscow2012-12-10T23:24:40+04:00Europe/Moscow12bEurope/MoscowMon, 10 Dec 2012 23:24:40 +0400 2012, 23:24:40
3

Найдите метку udev гнезда в Системе, подключите клиента (dbus-монитор), который контролирует шину с помощью DBus для сообщений на разъеме connect & разъединения.

ответил Nikhil Mulley 3 Jpm1000000pmTue, 03 Jan 2012 17:34:21 +040012 2012, 17:34:21
1

Инструмент под названием hda-verb может включать /отключать разъем для наушников используя контакты.

Например,

Чтобы включить разъем для наушников, используйте:

./hda-verb /dev/snd/hwC0D0 0x0f SET_PIN_WIDGET_CONTROL 0x40

Чтобы отключить разъем для наушников, используйте:

./hda-verb /dev/snd/hwC0D0 0x0f SET_PIN_WIDGET_CONTROL 0

Так как вы просто хотите проверить его статус, возможно, вы можете использовать какой-либо механизм опроса в вашей java-программе, который может проверять состояние вышеуказанных контактов с помощью hda. Для этого ваша java-программа должна иметь возможность называть hda-глагол. Кроме того, вы можете проверить источник hda-глагола, как он доступен, и посмотреть, как они это сделали.

Надеюсь, что это поможет.

ответил Omar Khan 12 MonEurope/Moscow2011-12-12T18:53:07+04:00Europe/Moscow12bEurope/MoscowMon, 12 Dec 2011 18:53:07 +0400 2011, 18:53:07
0

Мой ноутбук имеет аудиосистему Conexant Intel HDA, но микрофон и регуляторы громкости наушников никогда не появляются внутри многих микшеров доступный, даже alsamixer. Громкоговорители микрофона и наушников могут быть включены или выключены. Вот крошечный скрипт для этого:

#!/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
ответил rmstock 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 20 Sep 2017 01:35:28 +0300 2017, 01:35:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132