在Linux中使用Python访问键盘led的替代方法

2024-06-01 19:44:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Linux中创建了一个Python程序,它会使NumLock指示灯闪烁。代码如下:

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。在

当我的一个电源接通时,它会正确闪烁!USB数字键盘(零件号:G54-41403)。然而,虽然程序运行时没有任何错误,但对于我的旧键盘,指示灯不会闪烁(我还验证了NUM LOCK是否正确)。旧键盘是一个带USB集线器的Targus数字键盘(型号PAUK10U注意我在网上找不到我的旧型号),还有一个Rlip人体工程学键盘KNP-180。在

我检查了Python模块python-keyboardleds(linkhere),发现程序直接访问键盘。具体地说,当我通过/dev/console访问它时,程序通过/dev/input/by-path/访问它。我试着修改代码,打开列表上的第一个键盘,结果和以前一样(没有错误,其他型号的键盘上的LED也没有闪烁)。我做的代码如下:

^{pr2}$

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

我还尝试在内核中使用setleds命令,以及调用控制台和tty7与键盘通信。这两个都做了同样的事情;他们在启动电源!键盘和(没有任何错误)没有闪烁的其他两个键盘。在

我觉得我不能正确地与这些老键盘交流。除了我尝试过的方法之外,还有其他方法来切换键盘指示灯吗?在


Tags: 代码devimport程序forledtimeos
1条回答
网友
1楼 · 发布于 2024-06-01 19:44:27

如果^{}不工作,最有可能的问题是你的两个旧键盘没有可编程的LED指示灯,或者,如果有,它们也无法通过linux控制台驱动程序访问。在

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

除非你想试着直接在USB层与键盘通信,否则我想你已经完成了。在

相关问题 更多 >