news 2026/4/16 15:21:56

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/4/4 10:03:57

AI驱动的论文查重率管理:初稿至定稿的完整解决方案

在学术写作过程中,查重率是一个关键指标,直接影响研究成果的认可度。如何有效降低重复率成为研究者面临的重要挑战。随着技术进步,多款智能工具应运而生,为学术工作者提供了高效便捷的降重解决方案。这些工具通过先进的算法处理文…

作者头像 李华
网站建设 2026/4/6 10:18:21

三十六: 验证签名

三十六: 验证签名 验证签名步骤: 1:得到一个消息: message: 2:把消息进行keccak256得到hash: hash(message) 3: 把消息进行keccak256得到hash进行链上签名: sign(hash(message), private key) | offchain 4:使用recover验证:ecrecover(hash(message)

作者头像 李华
网站建设 2026/4/16 12:32:42

DAY 39 Dataset和Dataloader

一、数据介绍 CIFAR 是机器学习和计算机视觉领域中广泛使用的图像分类基准数据集,由加拿大高级研究学院(Canadian Institute for Advanced Research,CIFAR)的研究团队发布,主要用于小尺寸图像的分类任务,是…

作者头像 李华
网站建设 2026/4/16 13:59:20

MouseTester:专业鼠标性能检测工具完全攻略

MouseTester:专业鼠标性能检测工具完全攻略 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mo/MouseTester 还在为鼠标反应迟钝、指针漂移而困扰吗?MouseTester作为一款基于C#开发的Windows桌面应用,能够通…

作者头像 李华
网站建设 2026/4/16 13:30:11

如何快速实现Layui多选下拉框?formSelects插件的完整指南

如何快速实现Layui多选下拉框?formSelects插件的完整指南 【免费下载链接】layui-formSelects Layui select多选小插件 项目地址: https://gitcode.com/gh_mirrors/la/layui-formSelects layui-formSelects是一款专为Layui框架设计的多选下拉框插件&#xff…

作者头像 李华