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

Ubuntu Jammy系统下Pygame无法检测uinput虚拟游戏手柄事件的问题求助

Ubuntu Jammy系统下Pygame无法检测uinput虚拟游戏手柄事件的问题求助

各位好,我现在正在推进一个把vgamepad(Python的虚拟游戏手柄模拟库)移植到Linux的PR工作。在Linux平台上,这个PR是通过libevdev来创建uinput虚拟设备的。

为了验证库在不同平台的一致性,我用Pygame来检测vgamepad创建的虚拟手柄状态。相关的单元测试代码已经准备好,这些测试在Windows上全部通过,但到了Linux上就失败了。

如果大家想在自己的系统上复现,可以按以下步骤操作:

  • 克隆仓库并切换到yb/linux分支
  • 按照Linux平台的前置依赖说明安装相关组件
  • 用pip install -e .本地安装库
  • 运行测试目录下的Python脚本

目前在Linux上,Pygame是能正确识别这个uinput设备的基本属性的,下面这些测试都能成功通过:

# 检查是否只连接了一个游戏手柄
self.assertTrue(len(self.joysticks) == 1)

j = self.joysticks[0]

# 检查游戏手柄属性是否正确
name = j.get_name()
nb_axes = j.get_numaxes()
nb_balls = j.get_numballs()
nb_buttons = j.get_numbuttons()
nb_hats = j.get_numhats()

self.assertTrue(name == "Xbox 360 Controller")
self.assertEqual(nb_axes, 6)
self.assertEqual(nb_balls, 0)
self.assertEqual(nb_buttons, 11)
self.assertEqual(nb_hats, 1)

但问题出在后续的事件检测上,下面这段测试代码会失败:

_ = pygame.event.get()
self.g.press_button(button=v_button)
self.g.update()
time.sleep(WAIT_S)
event = pygame.event.get()
print(event)
self.assertTrue(j.get_button(j_button))

按预期这里A键应该被检测为按下状态,而且用游戏手柄测试网站确实能看到A键是按下的,但Pygame这边完全检测不到事件——我加的print语句输出的是[]。

另外我还手动修改了代码用真实游戏手柄测试,这时候测试就能正常通过。我甚至试过先创建Pygame窗口pygame.display.set_mode((500, 500))并聚焦窗口,再发送uinput事件,但结果还是一样:Pygame只能检测到我聚焦窗口的鼠标事件,完全看不到uinput的按键事件。

有没有朋友知道这可能是什么原因导致的?麻烦帮忙指点一下,非常感谢!

备注:内容来源于stack exchange,提问作者Yann Bouteiller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:34:31