news 2026/6/23 20:57:37

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/6/23 17:19:40

12.14 - 搜索旋转排序数组 判断两个结构体是否相等

目录 1.搜索旋转排序数组 a.核心思想 b.思路 2.判断两个结构体是否相等 a.默认情况 b.特殊情况处理 c.重载 运算符 1.搜索旋转排序数组 33. 搜索旋转排序数组 - 力扣(LeetCode)https://leetcode.cn/problems/search-in-rotated-sorted-array/de…

作者头像 李华
网站建设 2026/6/23 18:36:43

WaveTools鸣潮120帧解锁与游戏性能优化全攻略

WaveTools鸣潮120帧解锁与游戏性能优化全攻略 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 🎯 你是否在鸣潮1.2版本更新后,发现原本流畅的120帧体验突然消失了?别担心…

作者头像 李华
网站建设 2026/6/23 18:50:31

三步学会百度网盘极速下载:告别龟速的终极方案

三步学会百度网盘极速下载:告别龟速的终极方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度而烦恼吗?当你明明拥有高速网络…

作者头像 李华
网站建设 2026/6/23 18:51:02

5大实用技巧:用Calibre-Douban插件智能管理电子书元数据

5大实用技巧:用Calibre-Douban插件智能管理电子书元数据 【免费下载链接】calibre-douban Calibre new douban metadata source plugin. Douban no longer provides book APIs to the public, so it can only use web crawling to obtain data. This is a calibre D…

作者头像 李华
网站建设 2026/6/23 14:03:10

飞书文档批量导出终极指南:一键解决文档迁移难题

飞书文档批量导出终极指南:一键解决文档迁移难题 【免费下载链接】feishu-doc-export 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 你是否曾经为文档迁移而头疼不已?当公司决定更换办公平台,或是需要将飞书知识库…

作者头像 李华
网站建设 2026/6/23 18:51:01

Source Han Serif思源宋体:免费开源中文字体专业应用指南

Source Han Serif思源宋体:免费开源中文字体专业应用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为字体版权问题而烦恼?Source Han Serif思源宋体为…

作者头像 李华