この記事で結局使うコマンド
#wsl起動済み
usbipd wsl attach --busid 2-1
sudo chmod 777 /dev/ttyACM0
この記事の主題
- WSLでUSBを認識するための手順
- WSLがうまくいかなくなった場合の処置
環境
windows11 22H2
WSL2
最近はWSLのインストールもずいぶん簡単になり、powershellでwsl --install
するだけでできるようになりました。Microsoft StoreでUbuntuをインストールしても同じ動作をするようです。
USBを認識させる手順
上記ページを参照してください。以下に簡単に解釈、要約したものを書きます。
まずwindowsにusbipdをインストールします。
winget install --interactive --exact dorssel.usbipd-win
その後WSLにusbipdの設定をしてあげます。ここでUnable to locate
とか出た人はとにかく動かないWSL-Ubuntuをどうにかするを参照してください。僕はここでエラーが出ました。
sudo apt update
sudo apt upgrade
sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
そうしたら、powershellの方からUSBデバイスの接続をしてあげましょう。powershellを管理者モードで開きます。現在接続されているUSBデバイスをまず確認します。
usbipd wsl list
以下のようにデバイスの一覧が表示されます。
BUSID VID:PID DEVICE STATE
2-1 2341:0043 Arduino Uno (COM5) Not attached
2-5 13d3:56eb USB2.0 HD UVC WebCam, USB2.0 IR UVC WebCam, Camera DFU De... Not attached
2-10 8087:0026 インテル(R) ワイヤレス Bluetooth(R) Not attached
今回はArduino Uno (COM5) というデバイスをWSLに認識させます。このデバイスのBUSIDである2-1
を使います。
usbipd wsl attach --busid 2-1
これで接続が完了しました。確認してみましょう。
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
二番目に認識されているようです。
更に確認をします。
dmesg | grep tty
[ 9.861989] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
これでWSL上でttyACM0として認識されていることがわかりました。
アクセス権限も与えておきましょう。
sudo chmod 777 /dev/ttyACM0
これでデバイスが扱えるようになりました。切断時は
usbipd wsl detach --busid 2-1
を実行してくださいね。
とにかく動かないWSL-Ubuntuをどうにかする
さて、ここまででWSL-Ubuntuが動かなくなった人には2つの救済策があります。
- WSL-Ubuntuをリセットする
- 別のdistributionをセットする
まず簡単な1からやってみます。
設定>アプリ>インストールされているアプリ>Ubuntu
を開き、詳細オプション内のリセット
を選択します。
これで修復できれば万々歳です。
それでも何かしらの不具合がある場合は2の別のdistributionをセットするをやってみましょう。
wsl --install
を実行すると、
Linux 用 Windows サブシステムは既にインストールされています。
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
SLES-12 SUSE Linux Enterprise Server v12
SLES-15 SUSE Linux Enterprise Server v15
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9
と返ってくると思います。このNAMEにあるものがインストールできるdistoributionです。wsl --install
コマンドでは、デフォルトでUbuntu
がインストールされます。なのでここではUbuntu-20.04
をインストールしてみましょう。
wsl.exe --install Ubuntu-20.04
最初にUbuntuをインストールしたときと同様、UNIX username
とpassword
の設定を済ませます。
wsl --list
を実行すると現在インストールされているdistoributionが表示されます。
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
docker-desktop-data
Ubuntu-20.04
docker-desktop
Ubuntu
とUbuntu-20.04
が確認でき、現在Ubuntu
が既定となっています。
ではUbuntu-20.04
を既定に設定しましょう。
wsl --set-default Ubuntu-20.04
最後にwsl --list
で変更を確認しましょう
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-20.04 (既定)
docker-desktop-data
docker-desktop
Ubuntu
既定のdistoributionが変わっています。これで完了です。