헤드셋이 시스템에 연결되거나 연결 해제될 때 신호를 감지하려고 합니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?
전용 보드와 드라이버가 있다면 그것이 제가 선호하는 방식이 될 것입니다.
답변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의 소스(사용 가능하므로)를 확인하고 어떻게 수행했는지 확인할 수 있습니다.