web-dev-qa-db-ja.com

Ubuntu 18.04は、Sony DualShock3のジャイロ/加速度計用の2番目のジョイスティックデバイス、新しいsony_hidドライバーを追加しなくなりました

新しいhid_sonyドライバーがリリースされたとき、ジャイロ/加速度計の入力を別々のジョイスティックデバイスに分割しました。数週間後、更新とアップグレードを行った後、スティック、トリガー、およびボタン入力デバイスレジスタのみが見つかりました。それは私にとって問題ではありません。ジャイロ/加速度計の軸の損失は問題です。 Sony PlayStation(R)3 Controllerにジョイスティックが割り当てられている間、Sony PlayStation(R)3 Controllerモーションセンサーがジョイスティックデバイスとして登録されていない場合、以下のPastebinを見ることができます。おそらく、ジャイロデバイスを登録するために、設定ファイルだけを編集する必要があります(または、そのために、ボタンのアナログ入力を登録することを選択します)。新しいsony_hidがリリースされて以来、構成を変更しておらず、最初はDualshockコントローラーごとに2つのジョイスティック(物理およびジャイロ)を使用していましたが、USBまたはBluetoothで接続するDualshock3ごとに2番目のジャイロジョイスティックデバイスを取得できなくなりました。ジャイロ軸を登録することができる.config編集と、それを必要とする人のための(以前のドライバーの下で利用可能だった)ボタンアナログ軸がありますか?

4.15.0-38-generic#41-Ubuntu SMP 10月10日10:59:38 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux https://Pastebin.com/zw8W8Ucs

3
dave

不足しているジョイスティックデバイス

launchpadのバグ を見つけましたが、判明したように、それはjoydevドライバーでの「回帰」です。

入力:joydev-ブラックリストds3/ds4/udrawモーションセンサー

作者はコミットについて説明しなかったので、正直なところその理由はわかりません。バグを報告することをお勧めします。

Evdevデバイスも機能しません

hid_sonyによって作成されたevdevデバイスノードには小さなバグもあります。ユーザーがアクセスできないため、evdevの代わりにjoydevデバイスを使用するアプリケーションにモーションセンサーが表示されません。 。それが問題である場合は、次の内容で/etc/udev/rules.d/51-ds3-accels-uaccess.rulesファイルを作成します。

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

このルールは、「モーションセンサー」で終わるすべてのデバイスに一致するため、Gasia/Shanwanなどの模造PS3コントローラーにも一致します(サフィックスは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/user/evdev-forwarder @ .service

[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ドライバーを使用すると、おそらくアナログボタンを取り戻すことはできません。 ソースコード には、これを示すいくつかのコメントがあります。例:

Linuxゲームパッドの仕様を使用するDS3と同じ軸とボタンマッピングを使用します。

...そして...

DS3は、Gdポインターを介してほとんどのボタン、さらにはHAT軸にアナログ値を提供します。 Gd Z/RZの代わりに、これらの間でもL2とR2が報告されます。 L2とR2を再マッピングし、として他のアナログ「ボタン軸」を無視します。それらを報告する良い方法はありません

それらがおそらく理由であるので、私はそれらの部分を強調しました。 Linux Gamepad Specification は、左/右トリガー以外のアナログボタンについては言及していません。

自分でドライバを変更するか、 QtSixA/sixad のようなreally時代遅れの何かを使用しない限り、フェイスボタンのアナログイベントを使用することはできません。

2
danzel