💪
WSL2にWiFiアタプターを認識させてAirPlayサーバーにする
使うWiFiアダプター
Amazonで1000円程度で売っているRTL8188RUが乗ったUSB WiFiアダプターを使います。
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