Linux
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'
我想第四列是
1
電池是否插入,以及0
是否拔出。但是第二列和第三列到底是什麼意思呢?我試過man acpid
了,但沒有找到任何有用的資訊。
第一列是設備類。這些值來自處理相應 ACPI 設備的核心驅動程序。它們是“類”(例如“電池”)或“類/子類”(例如“按鈕/電源”)的形式。
第二列是核心用於設備的名稱。每個 ACPI 設備都有一個匹配的文件夾
/sys/bus/acpi/devices/
。這些名稱的一般規則是設備類型**:**實例編號。如核心文件中所述,設備類型是
- 由核心分配的名稱,以 , 開頭
LNX
,用於 BIOS 的 ACPI 表中描述的特殊設備。- 用於在 ACPI DSDT 表中分配了 HID 的其他設備的 PnP HID(即插即用硬體 ID;其中一些在ACPI 規範的第 5.6.7 節中定義,並且網際網路上有一些 列表)。
device
對於任何其他 ACPI 設備。實例編號是一個遞增計數器,用於區分相同類型的不同設備。例如,您的主電池是
PNP0C0A:00
,而您的輔助電池是PNP0C0A:01
。第三列是事件程式碼或“通知值”。它們在ACPI 規範第 5.6.6 節中定義。
00000001
表示“設備檢查”(設備出現或消失)、00000003
“彈出請求”和00000080
“電池狀態已更改”。第四列是核心驅動生成的補充值。此列的含義因事件程式碼、驅動程序和設備類型的任意組合而異。Linux ACPI 電池驅動程序將“電池狀態已更改”事件的值設置
1
為“存在”和0
“不存在”。