新しい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
launchpadのバグ を見つけましたが、判明したように、それはjoydev
ドライバーでの「回帰」です。
入力:joydev-ブラックリストds3/ds4/udrawモーションセンサー
作者はコミットについて説明しなかったので、正直なところその理由はわかりません。バグを報告することをお勧めします。
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
ドライバーによって追加されます)。
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時代遅れの何かを使用しない限り、フェイスボタンのアナログイベントを使用することはできません。