web-dev-qa-db-ja.com

acpiイベントの部分はどういう意味ですか?

デュアルバッテリーを搭載したThinkPadラップトップを持っていますが、外部バッテリーが接続されている/接続されていないときにアクションを実行するGNOME用のインジケーターアプリを作成したいと思います。これらのイベントを読み取るために、次のようにacpidソケットに接続します。

#!/usr/bin/env python3
import socket

ACPID_SOCKETFILE = "/var/run/acpid.socket"
RECV_SIZE = 4096

s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(ACPID_SOCKETFILE)

try:
    while True:
        data = s.recv(RECV_SIZE)
        print(repr(data))
except:
    s.close()
    raise

そして、私は次のような出力を取得します:

b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000001 00000001\n'
b'battery PNP0C0A:01 00000001 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000080 00000001\n'
b'battery PNP0C0A:01 00000003 00000000\n'
b'battery PNP0C0A:01 00000003 00000000\n'

4番目の列は、バッテリーが接続されている場合は1であり、プラグが抜かれている場合は0であると考えました。しかし、2番目と3番目の列は正確にはどういう意味ですか? man acpidを試しましたが、役立つ情報が見つかりませんでした。

1
Andrew Sun

最初の列はデバイスクラスです。値は、それぞれのACPIデバイスを処理するカーネルドライバーから取得されます。それらは、「クラス」(例:「バッテリー」)または「クラス/サブクラス」(例:「ボタン/電源」)のいずれかの形式です。

2番目の列は、カーネルがデバイスに使用する名前です。すべてのACPIデバイスの/sys/bus/acpi/devices/に一致するフォルダーがあります。これらの名前の一般的なルールは、デバイスタイプインスタンス番号カーネルドキュメント で説明されているように、デバイスタイプは次のいずれかです。

  1. bIOSのACPIテーブルに記述されている特別なデバイスに対して、カーネルによってLNXで始まる名前が割り当てられます。
  2. pnP HID(プラグアンドプレイハードウェアID。いくつかは ACPI仕様 のセクション5.6.7で定義されており、 somelists があります。 ACPI DSDTテーブルでHIDが割り当てられている他のデバイスの場合はインターネット)。
  3. その他のACPIデバイスの場合はdevice

インスタンス番号は、同じタイプの異なるデバイスを区別するための増分カウンターです。たとえば、一次電池はPNP0C0A:00で、二次電池はPNP0C0A:01です。

3番目の列は、イベントコードまたは「通知値」です。これらはセクション5.6.6で定義されています ACPI仕様00000001は「デバイスチェック」(デバイスが表示または非表示)、00000003「リクエストの取り出し」、00000080「バッテリーステータスが変更されました」を意味します。

4番目の列は、カーネルドライバーによって生成される補足値です。この列の意味は、イベントコード、ドライバー、およびデバイスタイプの任意の組み合わせによって異なります。 Linux ACPIバッテリードライバーは、「BatteryStatusChanged」イベントの値を「present」の場合は1に、「notpresent」の場合は0に設定します。

1
cg909