news 2026/6/15 14:21:05

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/15 13:14:40

高效论文降重利器:免费AI改写工具与平台TOP10

10大降重降AI工具核心对比 工具名称 降重效率 降AI能力 适用场景 特色功能 Aibiye ★★★★★ ★★★★★ 全学科论文 智能成文无限改稿文献查找 AICheck ★★★★☆ ★★★★☆ 学术检测 AI生成内容精准识别 AskPaper ★★★★☆ ★★★★ 论文初稿 5万字快…

作者头像 李华
网站建设 2026/6/15 12:24:08

这才是vibe coding正确的打开方式 - 手把手教你开发一个MCP服务

1. 前言 从ChatGPT的出现,到现在Sonnet、Grok、DeepSeek等模型的百家齐放。AI的出现影响着人们的方方面面,尤其是编程领域,你的项目不涉及到AI,好像就是落后,好像就是老登,好像就是被时代抛弃。 最近一年…

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

JS文件批量下载并打包成ZIP的功能

方法一&#xff1a;使用JSZip和FileSaver&#xff08;推荐&#xff09;1. 安装依赖npm install jszip file-saver # 或使用CDN2. HTML结构<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"vie…

作者头像 李华
网站建设 2026/6/14 14:32:33

Docker 常用命令解析

一、镜像相关命令 1.1 docker search docker search [OPTIONS] TERM功能&#xff1a;搜索 Docker Hub 镜像。 常用选项&#xff1a; --filter&#xff1a;过滤条件&#xff0c;如–filter stars3表示只显示星标不少于3的镜像。--limit&#xff1a;限制搜索结果数量。--no-trunc…

作者头像 李华
网站建设 2026/6/15 13:13:09

如何快速预览STL文件:终极3D模型预览工具指南

如何快速预览STL文件&#xff1a;终极3D模型预览工具指南 【免费下载链接】stl-thumb Thumbnail generator for STL files 项目地址: https://gitcode.com/gh_mirrors/st/stl-thumb 在现代3D打印和CAD设计工作中&#xff0c;STL文件预览工具已经成为提高工作效率的关键利…

作者头像 李华