Linuxにてその邊のXInputコントローラの入力を受付けるやうにすることに就いて

Linuxで原神を起動すること自體はその邊りにいくらでも情報があるのでLutrisの導入やら起動パッチを當てる等の指示通りにやれば(BANのリスク等を度外視すれば)槪動くやうだが、このゲームをゲームコントローラでやるとなると意外と面倒である。原神のゲームコントローラ對應はそもそも謎で、DirectInput形式でも動くと云ふ說もあれば、XInput形式でないとダメと云ふ情報もあり、かつどうも公式は動くコントローラを完全なホワイトリスト的には明言してゐないやうなので、動かない場合は自力でなんとかするしかない。

公式が動くと明言してゐる數少ないXBoxのコントローラはMSがXBox系統を日本市場から引上げた?らしく、その邊の家電量販店では扱つてゐないやうで、通販で買ふと云ふ手もあるが、ある日に折角家電量販店まで來てその選擇をすることは憚られたので、たまたま陳列されてゐたDirectInputとXInut形式の兩對應で有線接續の安いコントローラJC-U4013Sを買ふことにした。ワイヤレス接續の方が動く可能性が高いと云ふ說も聞いたが、電池の管理等が面倒だし必要のない無線接續は好まないので、入力形式がどちらも對應してゐればまあなんとかなるだらうと云ふ一點讀みでひとまづ試してみることにした。

コントローラ購入への前置きはこゝまでにしておいて、單にLinux機にこのコントローラをUSB接續した場合、DirectInput形式での接續では入力を受付けるやうだが、XInput形式に切換へた場合は認識すらされないと云ふいきなりの洗禮を受けた。手許にWindows機がないとWindowsで接續した時はこのコントローラで動くのかを試しやうがなく、原因の切分けが困難なのだが、XInput形式にした場合にはlsusb等で情報を見た場合にDriverがないことになつてをり、そもそもコントローラがカーネルから認識されてゐないやうである。そこでまづは端末から

sudo modprobe xpad

と打つことで、XInput形式のコントローラのモジュールを讀込む。すると、XInput形式で繫げた場合にもコントローラを認識するやうになるのだが、ゲームコントローラの入力全般を試す入力テストツール等含み一切の入力を受付ない樣子なので、xpadがJC-U4013Sに非對應なのか單にバグつてゐるのかよくわからないが、この手の不工合は英語で檢索をかけて情報を探す必要があり、しかし英語力がないのでこの手の症狀の解決策に對する檢索精度の高い語列を考へ付くことができず、こゝで一旦手詰まりとなつた。

ところがふと思ひ立つて檢索したら、以下のやうなfixを發見した。

下に續くやりとりを見るに、一切入力を受付ないのをなんとかするPythonスクリプトらしいので、ダメ元でこれを試してみることにした。しかしこのまゝでは案の定動かなかつたが、コードにあるidVendorの0x045eはMS、idProductの0x028eはXBoxのコントローラを示す固有値らしいので、こゝをJC-U4013Sのものに差替へて動かすことにした。具體的な値はXInput形式でJC-U4013SをUSB接續した狀態でlsusbをしてからそれらしきもの(ID xxxx:xxxxと云ふ箇所があり、:の前がidVendor、後ろがidProductに入れるべき値である)を見つけると、idVendorは0x056e、idProductは0x2012とのことなので、上のスクリプトの20行目を

if d.idVendor == 0x056e and d.idProduct == 0x2012:

としてからこのスクリプトを實行することで、晴れてLinux機はXInput形式のJC-U4013Sからの入力を受付けるやうになつた。

恐らくLinux機であるXInput形式のコントローラからの入力を受付ない時は、xpadをmodprobeした後にlsusbで出てきたidVendorとidProductの値を許に先のスクリプトの20行目を書換へて實行すれば動くやうになるのではないかと云ふことで、一應メモとして殘しておく。なほ、スクリプトの實行にはコメントを見ればわかるやうに、管理者權限でのpyusbの事前インストールと、スクリプト實行が必要である。

この記事が気に入ったらサポートをしてみませんか?