我有一台带有双电池的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,但没有找到任何有用的信息。
发布于 2015-12-19 01:35:19
第一列是设备类。这些值来自处理各自ACPI设备的内核驱动程序。它们要么是“类”(例如“电池”),要么是“类/子类”(例如“按钮/电源”)。
第二列是内核为设备使用的名称。每个/sys/bus/acpi/devices/设备都有一个匹配的文件夹。这些名称的一般规则是设备类型:实例编号。如内核文档中所述,设备类型为
LNX开始。device。实例号是一个递增计数器,用于区分同一类型的不同设备。例如,你的一次电池是PNP0C0A:00,你的次级电池是PNP0C0A:01。
第三列是事件代码或“通知值”。它们在5.6.6节“ACPI规格”中得到了定义。00000001的意思是“设备检查”(设备出现或消失)、00000003“弹出请求”和00000080“电池状态更改”。
第四列是内核驱动程序生成的补充值。此列的含义因事件代码、驱动程序和设备类型的任何组合而不同。Linux电池驱动程序将“电池状态更改”事件的值设置为“1”表示"present“,0设置为"not”。
https://unix.stackexchange.com/questions/218533
复制相似问题