WSL2에서 윈도우에 연결된 USB 장치 사용하기

공식적으론 지원하지 않음. 하지만 오픈소스로 개발된 툴을 설치하면 윈도우에 연결된 USB 장치를 WSL2 내부에서 사용 가능.

과정 정리.

일단 WSL2는 설치하였고, 여기에선 Ubuntu 20.04.4 LTS를 설치하였음.

먼저 usbipd (https://github.com/dorssel/usbipd-win) 설치

https://github.com/dorssel/usbipd-win/releases/latest 에서 최신 버전의 설치 파일을 받아서 설치. 설치후 재부팅 필요.

윈도우에서 Power Shell을 관리자 권한으로 실행. 터미널 화면에서,

PS C:\WINDOWS\system32> usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
2-1    27c6:533c  Goodix fingerprint                                            Not attached
2-5    0c45:6a0c  Integrated Webcam                                             Not attached
2-13   10c4:ea60  Silicon Labs CP210x USB to UART Bridge (COM3)                 Not attached
2-14   8087:0026  Intel(R) Wireless Bluetooth(R)                                Not attached
3-2    2188:6533  CalDigit Thunderbolt 3 Audio, USB Input Device                Not attached
4-2    0853:0148  USB Input Device                                              Not attached
4-8    2188:0747  USB Mass Storage Device                                       Not attached
9-1    046d:c539  USB Input Device                                              Not attached
9-2    413c:b080  Dell DA20 Adapter                                             Not attached

와 같이 현재 윈도우PC에 연결된 USB 장치 리스트들이 보임. 오른쪽에는 현재 WSL에 연결되어 있는지 여부가 표시됨.

WSL2의 Ubuntu 20.04를 실행하고, 다음과 같이 usbipd 클라이언트 패키지를 설치한다.

$ 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

이제 다시 파워셀로 돌아가서, 다음과 같이 WSL2에 연결될 디바이스를 attach 해줌.

PS C:\WINDOWS\system32> usbipd wsl attach --busid=2-13

버스아이디 번호는 위 리스트에서 참고.

WSL2의 Ubuntu에서 dmesg로 연결을 확인해보면,

...
[  981.156497] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
[  981.157731] vhci_hcd vhci_hcd.0: devid(131085) speed(2) speed_str(full-speed)
[  981.159973] vhci_hcd vhci_hcd.0: Device attached
[  981.438826] vhci_hcd: vhci_device speed not set
[  981.508832] usb 1-1: new full-speed USB device number 3 using vhci_hcd
[  981.588445] vhci_hcd: vhci_device speed not set
[  981.658522] usb 1-1: SetAddress Request (3) to port 0
[  981.730925] usb 1-1: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
[  981.731956] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  981.732837] usb 1-1: Product: CP2102 USB to UART Bridge Controller
[  981.733628] usb 1-1: Manufacturer: Silicon Labs
[  981.734221] usb 1-1: SerialNumber: 0001
[  981.744934] cp210x 1-1:1.0: cp210x converter detected
[  981.751507] usb 1-1: cp210x converter now attached to ttyUSB0

와 같이 정상적으로 연결되고, /dev에 장치가 생성됨을 볼 수 있음. 연결을 해제하려면 파워쉘에서

PS C:\WINDOWS\system32> usbipd wsl detach --busid=2-13

를 입력하면,

[ 1048.211316] vhci_hcd: connection closed
[ 1048.211480] vhci_hcd: stop threads
[ 1048.212982] vhci_hcd: release socket
[ 1048.213452] vhci_hcd: disconnect device
[ 1048.214003] usb 1-1: USB disconnect, device number 3
[ 1048.214792] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0
[ 1048.215669] cp210x 1-1:1.0: device disconnected

정상적으로 연결 해제.

이제 실제 리눅스 시스템에서와 마찬가지로 장치 사용 가능.

덧.

장치를 attach 하는 도중 다음과 같은 에러가 발생하면,

usbipd: error: WSL kernel is not USBIP capable; update with 'wsl --update'.

위에서 제시한 해결 방법대로, wsl를 업데이트 해주면 됨.

참고링크: