Ubuntu 18.04 不再为 Sony DualShock3 的陀螺仪/加速度计添加第二个操纵杆设备,新的 sony_hid 驱动程序

Ubuntu 18.04 不再为 Sony DualShock3 的陀螺仪/加速度计添加第二个操纵杆设备,新的 sony_hid 驱动程序

当新的 hid_sony 驱动程序发布时,它将陀螺仪/加速度计输入拆分为单独的操纵杆设备。现在几周后,更新升级后,我发现只有摇杆、触发器和按钮输入设备注册;这对我来说不是问题。陀螺仪/加速度计轴的丢失是一个问题。当我连接 Sony PLAYSTATION(R)3 控制器时,您可以在下面看到 pastebin,运动传感器未注册为操纵杆设备,而 Sony PLAYSTATION(R)3 控制器确实被分配了一个操纵杆。可能只需要编辑一个配置文件即可让陀螺仪设备注册(或者就此而言选择注册按钮模拟输入)。自从新的 sony_hid 发布以来,我没有更改我的配置,我最初每个 Dualshock 控制器有两个操纵杆(物理和陀螺仪),但我不再获得通过 USB 或蓝牙连接的 Dualshock3 的第二个陀螺仪操纵杆设备。是否有一些 .config 编辑可以使陀螺仪轴进行注册以及(以前在旧驱动程序下可用的)按钮模拟轴,以供那些也需要这些的人使用?

4.15.0-38-通用#41-Ubuntu SMP 2018 年 10 月 10 日星期三 10:59:38 UTC x86_64 x86_64 x86_64 GNU/Linux https://pastebin.com/zw8W8Ucs

答案1

缺少操纵杆设备

我找到了你的启动板上有错误但事实证明,这是joydev

输入:joydev - 黑名单 ds3/ds4/udraw 运动传感器

作者没有解释提交的内容,老实说,我看不出背后的原因。我建议你针对它提交错误报告。

evdev 设备也不起作用

创建的 evdev 设备节点还有一个小错误hid_sony:用户无法访问它,因此运动传感器不会显示在使用evdev设备而不是的应用程序中。如果这是您的问题,请创建包含以下内容的joydev文件:/etc/udev/rules.d/51-ds3-accels-uaccess.rules

SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="*Motion Sensors", TAG+="uaccess"

该规则将匹配以“运动传感器”结尾的每个设备,因此它还匹配仿冒的 PS3 控制器,如 Gasia/Shanwan(后缀由驱动程序添加hid_sony)。

我需要 js* 设备并且迫不及待地想要修复错误!

由于该evdev设备存在,我们可以joydev通过创建一个uinput不会被列入黑名单的新设备并将事件转发给该设备来解决黑名单问题。

安装python-evdev并创建以下3个文件:

〜/ .local/bin/evdev-forwarder.py

import evdev, sys

device = evdev.InputDevice(sys.argv[1])
joystick = evdev.UInput.from_device(device, name=(device.name + ' forwarded'))

for event in device.read_loop():
    joystick.write_event(event)

〜/ .config / systemd /用户/[电子邮件保护]

[Unit]
Description=Forwarding evdev device: %I

[Service]
Type=simple
Environment="ARGS=%I"
ExecStart=/usr/bin/python %h/.local/bin/evdev-forwarder.py $ARGS

/etc/udev/rules.d/51-ds3-accels-workaround.rules

KERNEL=="uinput", SUBSYSTEM=="misc", TAG+="uaccess"
ACTION=="add", SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="*Motion Sensors", TAG+="uaccess", TAG+="systemd", ENV{SYSTEMD_USER_WANTS}="evdev-forwarder@$env{DEVNAME}.service"

注意:在这种情况下,上述内容51-ds3-accels-uaccess.rules不是必需的。

模拟按钮

使用hid_sony驱动程序,我们可能永远无法恢复模拟按钮。源代码表明这一点,例如:

我们使用与DS3,使用 Linux 游戏手柄规格。

...和 ​​...

DS3 通过 GD Pointer 为大多数按钮甚至 HAT 轴提供模拟值。L2 和 R2 也报告在其中,而不是 GD Z / RZ。重新映射 L2 和 R2 并忽略其他模拟“按钮轴”,因为没有好的方法来报告他们

我强调了这些部分,因为它们可能是原因。Linux 游戏手柄规格除了左/右触发器之外没有提到模拟按钮。

除非你自己修改驱动程序或使用某些真的过时的QtSixA/sixad,您将无法使用面部按钮的模拟事件。

相关内容