当前位置: 首页 > 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.gsyq.cn/news/99963.html

相关文章:

  • 语音合成 - 用 Python 合成藏语三大方言语音
  • 苏州装修大揭秘!透明报价 0 增项公司全搜罗 - 品牌测评鉴赏家
  • 零基础到流利说!2025年韩语学习APP保姆级推荐,总有一款适合你 - 品牌测评鉴赏家
  • 让AI给你的页面加一个展开收起栏的提示词
  • 找到最适合你的日语学习软件:从真人交流到AI辅助的全方位指南 - 品牌测评鉴赏家
  • 桌面开发,在线%CRM,客户关系管理%系统,基于vs2022,c#,winform,sql server数据库
  • 桌面开发,在线%RIP,路由表管理%系统,基于vs2022,c#,winform,txt,无数据库
  • 面向对象设计与构造——Blog-2
  • 百度网盘极速下载终极指南:告别限速的完整方案
  • 如何快速预览STL文件:终极3D模型预览工具指南
  • 5大Bilibili-Evolved插件推荐:告别繁琐操作,打造个性化B站体验
  • Applite:重新定义macOS软件管理的智能图形化工具
  • FPGA实战:一段让我重新认识时序收敛的FPGA迁移之旅
  • DOM Element:深入理解与操作
  • JSP 国际化
  • 44、开源工作许可与相关工具指南
  • XML Schema 元素
  • Rust 泛型与特性
  • SQLite Glob 子句详解
  • 利用 vn.py 实现波动率倒数仓位:把螺纹钢回测年化从 9% 提到 89% 的完整笔记
  • 微信小程序开发实战之 04-微信小程序常用 API(上)
  • Chasys Draw IES Artist:开源免费的图像处理与图形设计全能工具
  • 配电网可靠性评估—序贯蒙特卡洛模拟法研究附Matlab代码
  • 机器学习资源合集
  • linux中的一些配置
  • .NET 10 网络堆栈深度架构解析:HTTP/3、性能优化与后量子加密的融合演进
  • 数字电路模拟程序复盘分析
  • OBS Studio:开源免费的屏幕录制与直播推流一体化解决方案
  • 【GRNN回归预测】基于广义回归神经网络的矿石等级预测的研究附matlab代码
  • 东莞奶茶原料公司推荐——圣旺水吧(东莞总公司)冠绝群雄 - 老百姓的口碑