ZENAIM LEVERLESSをLinuxで使う方法
各ボタンの説明は公式のPDFがある。
色々な記事をみると、キャリブレーションするためにはHOMEボタンとSTARTボタンを同時に押した状態で接続するように書かれているが、特に何もしなくてもハードウェアとしては認識した。
Linuxでハードウェアを利用する
Section titled “Linuxでハードウェアを利用する”特に何もしなくてもカーネルはハードウェアを認識するが、デフォルトでは root しか読み書きできない状態なのでコントローラとして使えない。
crw-rw-r-- 1 root root 189, 288 6月 15 22:53 /dev/bus/usb/003/033なのでudevイベントの調査方法のように設定が適用されているかを確認して、できていなければ正しい属性を使って更新する。udev にゲームパッドを追加する方法は以下の記事でも書いた。
キーボードとして認識される問題
Section titled “キーボードとして認識される問題”Linux 7.0.12時点ではキーボードとして認識されてしまって、ボタンを押しても動作しない状態となってしまう。
$ ls -1 /dev/input/by-id/usb-ZENAIM*usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-hidrawusb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-event-kbdusb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if02-hidraw通常はデバイスファイルを read(2) するとボタンを押すたびにデータが届くのだけど、この状態では if01-event-kbd ファイルを読んでもデータが返ってこないし、当然Steamで認識されない。どうやら xpad ドライバには手動でベンダーIDとプロダクトIDを渡せばゲームパッドとして認識させる仕組みがあるようで、それを使ってゲームパッドとして扱う必要がある。
echo 3507 000b | run0 --empower tee /sys/bus/usb/drivers/xpad/new_id
# 実際は drivers/usb/core/drivers.c で bInterfaceClass, refVendor, refProduct も与えられるこうするとゲームパッドとして扱うことができ、ボタンの入力イベントも正しく届く。
$ ls -1 /dev/input/by-id/usb-ZENAIM*usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-event-joystickusb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-event-kbdusb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-hidrawusb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if02-hidrawusb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-joystick
$ cat /dev/input/by-id/usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-event-joystick(ボタンを押せば入力イベントのデータが出力される)xpad のソースコードは次の場所にある。またはDKMSでxpadドライバを変更して試すのようにDKMSでインストールしてもいい。
これは[PATCH] Input: xpad - add support for ZENAIM LEVERLESSでパッチを投げてマージされた。
WindowsでZENAIM SOFTWAREを使って設定する
Section titled “WindowsでZENAIM SOFTWAREを使って設定する”ZENAIM SOFTWAREというZENAIMハードウェアをまとめて扱う管理ツールがある。QEMU起動スクリプトで書いたようにUSBデバイスをパススルーしておけば仮想マシン上のWindowsでもハードウェアを認識する。
この管理ツールでキャリブレーションとかファームウェアアップデートができるようだが、ファームウェアが更新されていないとキャリブレーションができないし、QEMUでファームウェアを更新するとホスト側で以下のエラーが発生して動作しなかった。
qemu: libusb_release_interface: -4 [NO_DEVICE]WARNING:root:Missing permissions for input devices
Section titled “WARNING:root:Missing permissions for input devices”コントローラーを認識できていないので、これが何かを示唆しているのかもしれないが、分からない。
ERROR: wayland: Display scaling requires the missing ‘zxdg_output_manager_v1’ protocol: disabling
Section titled “ERROR: wayland: Display scaling requires the missing ‘zxdg_output_manager_v1’ protocol: disabling”これはHyprland側の問題かなー