💪

WSL2にWiFiアタプターを認識させてAirPlayサーバーにする

2022/10/09に公開

使うWiFiアダプター

Amazonで1000円程度で売っているRTL8188RUが乗ったUSB WiFiアダプターを使います。

https://www.amazon.co.jp/dp/B008IFXQFU

WSLのアップデート

2022年10月9日時点ではsystemdが使えないので、WSL2のアップデートをします

https://github.com/microsoft/WSL/releases ここから最新のmsixbundleをインストール

systemdの有効化

/etc/wsl.conf
[boot]
systemd=true

カーネルのビルド

WSL標準のカーネルではドライバーが足りないので、カーネルをビルドします

https://github.com/microsoft/WSL2-Linux-Kernel/usr/src/5.15.68.1-microsoft-standard-WSL2/ などにクローンします

git clone https://github.com/microsoft/WSL2-Linux-Kernel
cd /usr/src/5.15.68.1-microsoft-standard-WSL2/

ビルドに必要なパッケージのインストール

sudo apt install build-essential flex bison dwarves libssl-dev libelf-dev

カーネルのコンフィグをいじる

sudo make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

最低限これは必要ですが、あとはお好みで

Networking support  --->Wireless  --->cfg80211 - wireless configuration API<M>
Networking support  --->Wireless  --->Generic IEEE 802.11 Networking Stack (mac80211)<M>
Device Drivers  --->USB support  --->Support for Host-side USB<*>
Device Drivers  --->USB support  --->Enable USB persist by default[*]
Device Drivers  --->USB support  --->USB Mass Storage support[M]
Device Drivers  --->USB support  --->USB/IP support[M]
Device Drivers  --->USB support  --->VHCI hcd<M>

ビルド

sudo make -j$(nproc --all) KCONFIG_CONFIG=Microsoft/config-wsl
sudo make modules_install -j$(nproc --all)
sudo make install -j$(nproc --all)

usbipのビルド

cd tools/usb/usbip/
sudo ./autogen.sh
sudo ./configure
sudo make install -j$(nproc --all)
sudo cp libsrc/.libs/libusbip.so.0 /lib/libusbip.so.0

カーネルのコピー

sudo cp /usr/src/5.15.68.1-microsoft-standard-WSL2arch/x86/boot/bzImage  /mnt/c/Users/username/

カーネルを適応するためにWSLの設定をいじります
C:\Users\user\.wslconfig

C:\Users\user\.wslconfig
[WSL2]
kernel=C:\\Users\\username\\bzImage

WSL2の再起動

wsl --shutdown

カーネルモジュールの読み込み

sudo modprobe usbip_core
sudo modprobe vhci-hcd
sudo modprobe cfg80211

usbipdの設定

https://github.com/dorssel/usbipd-win/wiki/WSL-support に沿います

https://github.com/dorssel/usbipd-win/releases から最新のmsiをインストール

PCを再起動

sudo apt install linux-tools-virtual hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20

WiFiアダプターの設定

WiFiアダプターのアタッチ

usbipd list
usbipd wsl attach --busid <BUSID>

WiFiドライバーのビルド

ここはdkmsでもいいかもしれません

git clone https://github.com/drygdryg/rtl8188eus
cd rtl8188eus
sudo make
sudo make install
sudo modprobe 8188eu

WiFiに接続

sudo apt install network-manager
nmcli device wifi rescan
nmcli device wifi list
nmcli device wifi connect <SSID> password <PASSWORD>

UxPlay

ビルド

git clone https://github.com/FDH2/UxPlay
cd UxPlay
sudo apt install cmake build-essential pkg-config libssl-dev libplist-dev libavahi-compat-libdnssd-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-libav gstreamer1.0-plugins-good gstreamer1.0-plugins-bad
cmake .
make
chmod +x ./uxplay

UxPlayの実行

./uxplay -fps 60

iOSのコントロールセンターの画面ミラーリングにUxPlayがあれば成功です。

まとめ

WSL2になってからなんでもと言っていいほど様々なことができるようになった反面、ちょっとめんどくさいと思いました。
カーネルも自由にいじれるようなのなにか面白いこともできるかもしれません。

おつかれさまでした。

Discussion