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のソース(利用可能なので)を確認し、どのように行ったかを確認することもできます。

関連情報