Skip to content

ZENAIM LEVERLESSをLinuxで使う方法

各ボタンの説明は公式のPDFがある。

色々な記事をみると、キャリブレーションするためにはHOMEボタンとSTARTボタンを同時に押した状態で接続するように書かれているが、特に何もしなくてもハードウェアとしては認識した。

特に何もしなくてもカーネルはハードウェアを認識するが、デフォルトでは 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時点ではキーボードとして認識されてしまって、ボタンを押しても動作しない状態となってしまう。

Terminal window
$ ls -1 /dev/input/by-id/usb-ZENAIM*
usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-hidraw
usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-event-kbd
usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if02-hidraw

通常はデバイスファイルを read(2) するとボタンを押すたびにデータが届くのだけど、この状態では if01-event-kbd ファイルを読んでもデータが返ってこないし、当然Steamで認識されない。どうやら xpad ドライバには手動でベンダーIDとプロダクトIDを渡せばゲームパッドとして認識させる仕組みがあるようで、それを使ってゲームパッドとして扱う必要がある。

Terminal window
echo 3507 000b | run0 --empower tee /sys/bus/usb/drivers/xpad/new_id
# 実際は drivers/usb/core/drivers.c で bInterfaceClass, refVendor, refProduct も与えられる

こうするとゲームパッドとして扱うことができ、ボタンの入力イベントも正しく届く。

Terminal window
$ ls -1 /dev/input/by-id/usb-ZENAIM*
usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-event-joystick
usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-event-kbd
usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if01-hidraw
usb-ZENAIM_ARCADE_CONTROLLER_280025001950453159383720-if02-hidraw
usb-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側の問題かなー