当前位置: 首页 > news >正文

WSL2 中 pynput 无法捕获按键输入?

视频链接:https://www.bilibili.com/video/BV1vCmiB1ENV/?vd_source=5ba34935b7845cd15c65ef62c64ba82f

你是否遇到过在 WSL2 中,pynput 无响应,无法捕获键盘的输入?

WSL2 本质是 Linux 内核子系统,无法直接访问 Windows 的硬件输入,通过输入 ls /dev 发现实际是没有 input,这里有两种方式:

  1. 通过 usb 重定向给 WSL2 也可以实现,比如之前用过的 WSL USB Manager 工具

  1. Linux 下的 pynput 依赖 X11/Xorg(显示服务器)实现全局键盘监听,无 GUI 环境(X Server)时,pynput 无法注册 / 捕获任何键盘事件,所以随便创建一个 X11 显示窗口即可
import threading import tkinter as tk def startGui(): root = tk.Tk() root.title("WSL2 X11 Bridge") root.geometry("1x1") root.iconify() root.mainloop() def runGuiThread(): gui_thread = threading.Thread(target=startGui, daemon=True) gui_thread.start()

完整测试代码如下:

from pynput import keyboard import time class KeyListener: def __init__(self, key_states, callbackFunc=None): self.listener = keyboard.Listener(on_press=self.onPress, on_release=self.onRelease) self.key_states = key_states self.callbackFunc = callbackFunc def join(self): self.listener.join() def start(self): self.listener.start() def stop(self): self.listener.stop() def onPress(self, key): if key in self.key_states: self.key_states[key] = True if key == keyboard.Key.esc: return False def onRelease(self, key): if key in self.key_states: self.key_states[key] = False def callbackFunc(self): pass def test_callback(): print('test_callback') if __name__ == '__main__': key_states = { keyboard.Key.up: False, keyboard.Key.down: False, keyboard.Key.left: False, keyboard.Key.right: False, keyboard.Key.alt_l: False, keyboard.Key.alt_r: False, } key_listener = KeyListener(key_states, callbackFunc=test_callback) key_listener.start() import threading,tkinter as tk def startGui(): root = tk.Tk() root.title("WSL2 X11 Bridge") root.geometry("1x1") root.iconify() root.mainloop() def runGuiThread(): gui_thread = threading.Thread(target=startGui, daemon=True) gui_thread.start() runGuiThread() while True: if key_states[keyboard.Key.up]: print('up') if key_states[keyboard.Key.down]: print('down') if key_states[keyboard.Key.left]: print('left') if key_states[keyboard.Key.right]: print('right') if key_states[keyboard.Key.alt_l]: print('alt_l') if key_states[keyboard.Key.alt_r]: print('alt_r') time.sleep(0.01) key_listener.join()
http://www.jsqmd.com/news/89611/

相关文章:

  • 面向对象设计与构造——Blog-2
  • 鼠标性能测试神器:MouseTester让你的鼠标表现一目了然
  • AssetStudio完全指南:Unity资源提取与管理的实用教程
  • volatile 的顺序性和可见性原理详解
  • 抖音无水印视频下载完整教程:3分钟学会专业级视频保存技巧
  • 代码随想录算法训练营第三十四天:打家劫舍,打家劫舍II,打家劫舍III
  • 苏州二手房局部改造全攻略:5家高口碑公司深度测评(附避坑指南) - 品牌测评鉴赏家
  • 大学生高效学习与生活实用APP全攻略 - 品牌测评鉴赏家
  • 深圳|广州|东莞|昆明-学奶茶培训机构哪家好|奶茶培训班课程|奶茶技术学习培训|奶茶|想学奶茶技术去哪里学——圣旺水吧 - 老百姓的口碑
  • 数据结构之二叉树
  • 2025中山车铣复合数控机床设计口碑与性能综合排行,牙科配件数控车床/CNC数控机床/数控机床/空调配件数控机床车铣复合数控机床采购排行榜 - 品牌推荐师
  • 第六周笔记
  • 英语学习软件大揭秘:哪款才是你的菜? - 品牌测评鉴赏家
  • 交换机.路由器.防火墙-技术提升【7.1】
  • Android Studio中文界面终极配置指南:从新手到专家的快速上手方案
  • 企业级开源RPA工具OpenRPA:从零开始构建自动化工作流
  • Iceberg Rest Catalog + OSS 实践踩坑记录:Polaris x-amz-content-sha256 报错 与 Nessie 配置
  • 2025跨境电商人必备!这十款英语学习APP让你沟通无国界 - 品牌测评鉴赏家
  • 告别哑巴英语!这些APP让你开口就惊艳 - 品牌测评鉴赏家
  • 苏州装修大揭秘!透明报价 0 增项公司全搜罗 - 品牌测评鉴赏家
  • Iceberg Rest Catalog + OSS 实践踩坑记录:解决Polaris x-amz-content-sha256 报错 与 Nessie 配置详解
  • SQLite Glob 子句详解
  • prompt 提示词
  • 日语自学神器大揭秘!这5款宝藏软件让你从零基础轻松进阶 - 品牌测评鉴赏家
  • 桌面开发,在线%CRM,客户关系管理%系统,基于vs2022,c#,winform,sql server数据库
  • 大学生必藏!10 款 APP 覆盖学习到生活,HelloTalk 带练 + 效率翻倍 - 品牌测评鉴赏家
  • 如何快速预览STL文件:终极3D模型预览工具指南
  • 5大Bilibili-Evolved插件推荐:告别繁琐操作,打造个性化B站体验
  • html综合教程
  • 完整教程:Qt Sensors 传感器框架详解