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

相关文章:

  • 12.14 - 搜索旋转排序数组 判断两个结构体是否相等
  • WaveTools鸣潮120帧解锁与游戏性能优化全攻略
  • 三步学会百度网盘极速下载:告别龟速的终极方案
  • 5大实用技巧:用Calibre-Douban插件智能管理电子书元数据
  • 飞书文档批量导出终极指南:一键解决文档迁移难题
  • Source Han Serif思源宋体:免费开源中文字体专业应用指南
  • DOM Element:深入理解与操作
  • 深度解析 Flutter 路由管理:从原生路由到 AutoRoute 的优雅升级与性能优化
  • Turnitin系统查英文AI率多少为正常?报告显示星号*%怎么办?
  • 暖通净化空调恒温恒湿项目:PLC 与触摸屏上位机程序探秘
  • 第30章 Shell 正则表达式实战:精准匹配字符串、日志与配置项
  • 音视频学习(七十二):视频压缩:分块与预处理
  • AMD Ryzen性能调优:快速掌握处理器调试工具的使用技巧
  • 深蓝词库转换:轻松打通全平台输入法数据壁垒
  • (新卷,200分)- 最小传输时延Ⅱ(Java JS Python)
  • OpenHarmony AI人脸识别与手势控制系统开发指南
  • 新一代空间感知驱动的军工仓库与硐室透明化管控技术研究
  • Sketch MeaXure插件:设计师必备的智能标注工具
  • 强化学习Q-learning求最优策略
  • 你对电脑上的【Fn】熟悉多少
  • 计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】附Matlab代码
  • 计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置附Matlab代码
  • conda使用详细指南
  • 豆包与DeepSeek底层大模型的深度解析:技术架构、设计理念与生态分野
  • Linux系统中的socket激活:先创建监听端口,后启动程序
  • 从零解决pyproject.toml构建失败的实战指南
  • Redis Lua脚本入门:从零写出你的第一个原子操作
  • 旧机转手不再慌!电子产品信息清除新国标落地,核心技术逻辑全解析
  • 安全体验馆好用供应商
  • 第二章——数据分析场景之Python数据可视化:用Matplotlib与Seaborn绘制洞察之图