Linux에서 헤드폰 연결/연결 끊김 감지

Linux에서 헤드폰 연결/연결 끊김 감지

헤드셋이 시스템에 연결되거나 연결 해제될 때 신호를 감지하려고 합니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?

전용 보드와 드라이버가 있다면 그것이 제가 선호하는 방식이 될 것입니다.

답변1

내 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/스크립트를 채워 원하는 것을 트리거할 수 있습니다.

acpid 매뉴얼 페이지를 확인하세요.http://linux.die.net/man/8/acpid

답변2

이 정보는 하드웨어에서 제공되며 /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-unplug.

답변3

시스템에서 소켓의 udev 태거를 찾고 DBus를 사용하여 소켓 연결 및 연결 끊김에 대한 메시지를 버스에서 모니터링하는 클라이언트(dbus-monitor)를 연결합니다.

답변4

라는 도구hd동사헤드폰 잭은 핀을 사용하여 활성화/비활성화할 수 있습니다.

예를 들어,

헤드폰 잭을 활성화하려면 다음을 사용하십시오.

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

헤드폰 잭을 비활성화하려면 다음을 사용하십시오.

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

단지 상태를 확인하고 싶을 뿐이므로 hda를 사용하여 위 핀의 상태를 확인할 수 있는 Java 프로그램에서 일부 폴링 메커니즘을 사용할 수 있습니다. 이를 수행하려면 Java 프로그램이 hda-verb를 호출할 수 있어야 합니다. 또는 hda-verb의 소스(사용 가능하므로)를 확인하고 어떻게 수행했는지 확인할 수 있습니다.

관련 정보