gpt4 book ai didi

python - 在 Linux 中使用 Python 访问键盘 LED 的替代方法

转载 作者:太空狗 更新时间:2023-10-29 12:34:29 30 4
gpt4 key购买 nike

我在 Linux 中创建了一个 Python 程序,可以使 NumLock LED 闪烁。代码如下所示:

import fcntl
import os
import time

# Define variables for keyboard and NUM_LOCK LED
KDSETLED = 0x4B32
NUM_LED = 0x02

# Open the "keyboard console" for LED toggling
console_fd = os.open('/dev/console', os.O_NOCTTY)

def blink(tme, cnt):
secs = tme/cnt
for i in range(cnt):
fcntl.ioctl(console_fd, KDSETLED, 0)
time.sleep(secs)
fcntl.ioctl(console_fd, KDSETLED, NUM_LED)
if i < cnt - 1:
time.sleep(secs)

blink(0.5,1)

如果它看起来有点眼熟,那是因为它来自类似的帖子 here .

它为我的 Power Up 之一正确闪烁! USB 数字键盘(部件号:G54-41403)。然而,虽然程序运行没有任何错误,但我的旧键盘的 LED 不会闪烁(我还验证了 NUM LOCK 是否正确)。旧键盘是带 USB 集线器的 Targus 数字键盘(型号 PAUK10U 请注意,我无法在网上找到我的旧型号)和 Rlip 人体工学键盘 KNP-180 .

我检查了 Python 模块 python-keyboardleds(链接 here ),我发现该程序直接访问键盘。具体来说,当我通过 /dev/console 访问它时,程序通过 /dev/input/by-path/ 访问它。我尝试更改代码,以便打开列表中的第一个键盘,结果与以前相同(没有错误,其他键盘型号上的 LED 灯也没有闪烁)。我制作的代码如下所示:

#LEDToggle.py

import argparse
import glob
import grp
import os
import pwd
import re
import subprocess
import time
import fcntl
import keyboardleds

def drop_privileges():
uid = pwd.getpwnam('nobody').pw_uid
gid = grp.getgrnam('nogroup').gr_gid
os.setgid(gid)
os.setuid(uid)

def parse_args():
led_names = list(t + '-lock' for t in ('caps', 'num', 'scroll'))
ap = argparse.ArgumentParser()
ap.add_argument('--led', choices=led_names, default=led_names[1],
help='keyboard LED to use',
)
return ap.parse_args()

def blink(tme, cnt):
secs = tme/cnt
options = parse_args()
event_device = glob.glob('/dev/input/by-path/*-event-kbd')[0]
ledkit = keyboardleds.LedKit(event_device)
drop_privileges()
#led = getattr(ledkit, 'num-lock')
led = getattr(ledkit, options.led.replace('-', '_'))
for i in range(cnt):
led.reset()
print "off"
time.sleep(secs)
led.set()
print "on"
if i < cnt - 1:
time.sleep(secs)

blink(5,5)

经过研究,我怀疑在访问/dev/console时,有些键盘没有被正确调用。当我查看 /dev/input/by-path/ 时,我发现工作键盘名为 platform-b​​cm2708_usb-usb-0:1.3:1.0-event-kbd。然后,当我尝试连接两个不工作的键盘之一时,它们具有相同的名称。

我还尝试在内核中使用 setleds 命令,以及调用控制台和 tty7 与键盘进行通信。这两个都做了同样的事情;他们致力于 Power Up! keyboard 并且(没有任何错误)在其他两个键盘上没有闪烁。

我觉得我没有正确地与这些旧键盘通信。除了我尝试过的方法之外,还有其他方法可以切换键盘 LED 吗?

最佳答案

如果setleds不起作用,最有可能的问题是您的两个旧键盘没有编程可访问的 LED — 或者,如果有,它们无法通过 linux 控制台驱动程序访问。

事实上,这些是键盘,旨在与全键盘(通常已经有自己的 LED)一起使用,这似乎是一个合理的设计决定。

除非您想尝试直接在 USB 级别与键盘通信,否则我认为您已经完成了。

关于python - 在 Linux 中使用 Python 访问键盘 LED 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625367/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com