You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下使用pynput运行Python代码无法屏蔽鼠标输入的问题解决

Ubuntu下Python禁用鼠标无效的问题分析与解决

问题原因

  1. 原代码仅拦截了鼠标点击事件,完全没处理移动、滚轮滚动等其他操作,所以鼠标仍能正常移动、滚动。
  2. 若Ubuntu使用X11桌面环境,pynput的事件监听优先级低于系统输入处理,就算返回False,部分事件还是会被系统接收;如果是Wayland环境,pynput的输入拦截兼容性极差,基本起不了作用。

解决方法

方法一:改进pynput代码(仅X11环境可用,效果有限)

要拦截所有鼠标动作,需同时监听移动、点击、滚轮三个事件,每个事件都返回False阻止事件传递,且必须用sudo权限运行程序。

修改后的代码:

from pynput import mouse

def on_move(x, y):
    return False  # 拦截鼠标移动

def on_click(x, y, button, pressed):
    return False  # 拦截鼠标点击

def on_scroll(x, y, dx, dy):
    return False  # 拦截鼠标滚轮

# 监听所有鼠标事件
with mouse.Listener(
        on_move=on_move,
        on_click=on_click,
        on_scroll=on_scroll) as listener:
    listener.join()

运行命令:sudo python3 try.py

方法二:用xinput工具(X11环境下稳定可靠)

直接调用系统的xinput命令禁用鼠标设备,这是最稳妥的方式,Python通过subprocess模块执行即可。

步骤:

  1. 先执行xinput list查看所有输入设备,找到你的鼠标设备名称或ID(比如PS/2 Generic Mouse)。
  2. 用以下代码实现禁用/恢复:
import subprocess
import time

# 替换成你的鼠标设备名称或ID
MOUSE_DEVICE = "PS/2 Generic Mouse"

def disable_mouse():
    subprocess.run(["xinput", "disable", MOUSE_DEVICE], check=True)

def enable_mouse():
    subprocess.run(["xinput", "enable", MOUSE_DEVICE], check=True)

try:
    disable_mouse()
    print("鼠标已禁用,按Ctrl+C恢复")
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    enable_mouse()
    print("鼠标已恢复")

运行命令:sudo python3 try.py

方法三:Wayland环境的替代方案

Wayland环境下xinput和pynput都无法正常工作,最简单的办法是登录时选择「Ubuntu on Xorg」切换到X11环境,再使用方法二。如果必须使用Wayland,需要借助libinput相关工具,实现复杂度较高,不推荐普通用户折腾。

内容的提问来源于stack exchange,提问作者Jasmine58850_01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:42:53