如何在非root权限下读取树莓派32位Bullseye的USB键盘按键?
无需root权限读取USB键盘输入的方法
方法1:直接读取输入设备文件(推荐)
树莓派上的USB键盘会被识别为/dev/input/event*类设备,而非你提到的ttyUSB(这类是USB转串口设备,和键盘无关)。具体步骤如下:
定位键盘对应的event设备:
- 执行
ls -l /dev/input/by-id/,找到带kbd或keyboard标识的软链接,它会指向真实的/dev/input/eventX设备文件。 - 或者运行
cat /proc/bus/input/devices,找到包含Keyboards的条目,从中提取对应的eventX路径。
- 执行
给当前用户添加input组权限,避免root运行:
sudo usermod -aG input $USER执行后需重新登录,权限才会生效。
Python代码实现(使用
evdev库):
先安装依赖库:pip install evdev示例代码:
from evdev import InputDevice, categorize, ecodes # 替换为你的键盘event设备路径,比如/dev/input/event0 dev = InputDevice('/dev/input/event0') print("等待按键输入...") for event in dev.read_loop(): if event.type == ecodes.EV_KEY: key_event = categorize(event) # 仅处理按键按下事件(过滤松开动作) if key_event.keystate == key_event.key_down: print(f"按下按键: {key_event.keycode}") # 示例:按ESC键退出程序 if key_event.keycode == 'KEY_ESC': break
关于/dev/tty类设备的说明
/dev/ttyUSB*是USB转串口设备,和USB键盘无关;/dev/tty0至/dev/tty63是系统虚拟终端,无头模式下这类终端通常未激活,直接读取无法获取USB键盘输入,因此不建议采用这种方式。
注意事项
- 若存在多个输入设备,需确认选中的是键盘对应的event设备,避免读取到鼠标或其他外设的输入。
evdev是专门处理Linux输入设备的库,比直接解析原始设备文件更简洁可靠。
内容的提问来源于stack exchange,提问作者Mick Sulley
相关产品推荐
相关产品推荐

