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
相关产品推荐
相关产品推荐

