news 2026/7/16 20:43:41

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 23:19:57

从零开始打造个性化OpenWrt界面:luci-theme-argon美化全攻略

还在忍受OpenWrt那单调乏味的默认界面吗?luci-theme-argon就像给路由器装上了"智能皮肤",不仅能自动适应日夜环境,还能让你随心所欲地定制专属登录界面。想象一下,每天管理家庭网络时,面对的是你最喜欢的风景…

作者头像 李华
网站建设 2026/7/16 1:32:01

2024年学术论文查重工具权威评测:9大主流平台对比

核心工具对比速览 排名 工具名称 查重准确率 免费额度 特色功能 适用场景 1️⃣ Aibiye 85%-90% 1000字 多模态生成、英文文献支持 论文初稿生成与查重 2️⃣ AICheck 90%-95% 5000字 全学科覆盖、图表公式插入 理工科论文查重优化 3️⃣ AskPaper 88%-93%…

作者头像 李华
网站建设 2026/7/16 13:55:26

马达驱动芯片核心逻辑:从信号到动力的“功率放大密码”

马达驱动芯片的核心作用是接收控制信号,并输出足够的电压 / 电流来驱动电机运转,同时集成保护、调速、换向等功能,本质是一个功率放大与控制的专用集成电路(IC)。它能解决单片机、MCU 等控制芯片输出功率不足的问题&am…

作者头像 李华
网站建设 2026/7/16 15:18:56

OpenCore Legacy Patcher终极指南:让老Mac免费升级最新macOS

OpenCore Legacy Patcher终极指南:让老Mac免费升级最新macOS 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为2012年之前的Mac无法安装最新macOS系统而苦…

作者头像 李华
网站建设 2026/7/16 8:36:00

jQuery 尺寸

jQuery 尺寸 引言 jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了 HTML 文档遍历、事件处理、动画和 Ajax 操作等操作。在开发中,有时我们需要获取元素的大小,jQuery 提供了一系列方法来实现这一功能。本文将详细介绍 jQuery 中与尺寸相关的方法,帮助开发者更好地…

作者头像 李华