はじめに
単にWindowsでFeliCaを使いたいというだけであればそもそもWSLを使う必要自体が無いのですが、
- RaspberryPiなどLinux機で使う予定のシステムをWindowsで開発する場合
- 現にLinuxで動いているシステムをWindowsに移植する場合
などの状況もあり得るかと思います。
Windows11×WSL2ではUSBデバイスの利用がサポートされており、丁寧な公式ドキュメントも用意されています。
その上でこの記事では自分が詰まったところを中心に書いていきたいと思います。
動作を確認した環境
- OS : Windows 11
- WSLで使用したディストリビューション : Ubuntu 20.04
- カードリーダー : Sony RC-S330
FeliCaリーダーのドライバのインストール
WSLで使う予定とはいえまずは普通にドライバのインストールを行わないとこの後の工程で認識すらされないため、ソニー公式サイトの指示に従ってドライバをインストールします。
WSLのインストール
公式ドキュメント :
https://docs.microsoft.com/ja-jp/windows/wsl/setup/environment
これからWSLおよびUbuntuの準備をする場合は上記を参考に作業を進めるのが良いと思います。なお インストールは管理者権限でおこなってください。
WSLでUSBデバイスを使えるようにする
公式ドキュメント :
https://docs.microsoft.com/ja-jp/windows/wsl/connect-usb
基本的には上記のドキュメントの通りに作業を進めます。
なお、ここから先の工程は 管理者として実行 する箇所が大半を占めます。
PowerShellを管理者として起動するのを忘れないでください。できれば管理者権限のあるアカウントで作業をするのが無難ですが、その都度パスワードを入力しても一応可能です。逆に 管理者権限を一切使えない場合は現状WSLでUSBを使うことはできないかと思います。
失敗しそうな箇所
usbipd wsl listを実行してもFeliCaリーダーが見つからない
FeliCaリーダーのドライバのインストールを忘れている可能性が高いです。
usbipd wsl attach --busid <busid>が失敗する
様々な原因が考えられます。
WSLが起動していない
別のPowerShellを立ち上げるなどの方法でWSLを実行してください。
対象となるディストリビューションが無い
「現に今WSLでubuntuを使っているからそんなはずはない」と思うかもしれませんが、WSLのディストリビューションはユーザごとに独立しており共有できないため例えば一般ユーザのアカウントでubuntuをインストールした場合にこの状況になります。
一度
wsl --list --verbose
を実行して、もしそこにubuntuがなければインストールしてください。
あるいは一般ユーザで使っていたディストリビューションをどうしてもそのまま使いたいという場合は下記のリンクを参考に一般ユーザからのエクスポートおよび管理者アカウントへのインポートをおこなってください。
ファイアウォールでブロックされている
この場合はファイアウォールの設定を確認するようメッセージが表示されます。usbipdはTCP通信で3240番ポートを使うため、必要に応じてセキュリティソフトの設定を変更してください。
usbipd wsl attach --busid <busid>
でエラーが出なくなればここまではおそらく大丈夫です。
(ubuntu側)lsusbの結果を確認する
うまく行っていれば接続されているUSBデバイスの一覧にFeliCaリーダーが表示されます。
これでWSL側からUSBデバイスを使用する準備ができました。
Felicaリーダーの動作確認
ここから先は主にubuntu側での作業になります。
nfcpyを使って動作確認をします。
nfcpy :
https://nfcpy.readthedocs.io/en/latest/topics/get-started.html
おそらくpython3自体は既にインストールされていると思うのでnfcpyをインストールします。
pip install -U nfcpy
次に
python -m nfc
を実行します。おそらくFeliCaリーダーへのアクセスに失敗すると思いますが、エラーメッセージの中に次に実行すべきコマンドが書かれています。
注:下記は公式ドキュメントの引用です。実際には機種ごとにベンダーIDやプロダクトIDが異なるので必ずご自身のターミナルに表示されているコマンドを実行してください
(略)
-- it's better to add the device to the 'plugdev' group
sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"04e6\", ATTRS{idProduct}==\"5591\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
sudo udevadm control -R # then re-attach device
(略)
ここで書かれているsudo...のコマンドを2つ実行すれば良いのですが、自分が試したときはsudo udevadm control -R
を実行したときにエラーが発生しましたが
sudo service udev restart
を実行してから改めてsudo udevadm control -R
を実行すればうまくいくと思います。
nfcpyを用いた動作確認用のプログラムについては上記の公式ドキュメントをはじめ検索するとたくさんある、かつFeliCaリーダーの機種に合わせて調べ直していただいた方が良いと思うので割愛させていただきます。
おわりに
WSL2でUSBデバイスがサポートされたとはいえ、正直言ってWSL2でFeliCaを使うのはかなりしんどいです。
ただもし自分以外にもやむを得ず今回のような構成でFeliCaを使わざるを得なくなった方がいれば少しでもお役に立てば幸いです。