The environment is
- Windows 10
- WSL2 Ubuntu 20.04 LTS
Mount USB to WSL
It’s easy to mount if it is just a USB drive that is shown on Windows e.g. E:
or F:
.
Let’s create a directory to mount the USB directory first. Then, mount it.
sudo mkdir /mnt/usb
sudo mount -t drvfs E: /mnt/usb
If you execute the following command, you can see the files on the USB stick.
ls -la /mnt/usb
Execute the following command if you want to umount it.
sudo unmount /mnt/usb
Setup usbipd-win
Install usbipd-win to the Windows machine
First, usbipd-win needs to be installed on your host machine before doing something on WSL.
- Go to the release page of usbipd-win
- Download msi and install it
You can see the following service after the installation.
> sc queryex usbipd
SERVICE_NAME: usbipd
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 2032
FLAGS
Preparation on WSL with Ubuntu
Execute the following command to install the necessary tools on WSL.
sudo apt update
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
If you don’t update the package list by apt update
, you could get the following error
$ sudo apt install linux-tools-virtual hwdata
[sudo] password for yuto:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libfwupdplugin1
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
libdw1 linux-tools-5.4.0-125 linux-tools-5.4.0-125-generic linux-tools-common
The following NEW packages will be installed:
hwdata libdw1 linux-tools-5.4.0-125 linux-tools-5.4.0-125-generic linux-tools-common linux-tools-virtual
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 6026 kB of archives.
After this operation, 27.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 hwdata all 0.333-1 [23.3 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal/main amd64 libdw1 amd64 0.176-1.1build1 [226 kB]
Get:3 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-tools-common all 5.4.0-125.141 [187 kB]
Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-tools-5.4.0-125 amd64 5.4.0-125.141 [5586 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-tools-5.4.0-125-generic amd64 5.4.0-125.141 [1996 B]
Ign:6 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-tools-virtual amd64 5.4.0.125.126
Err:6 http://security.ubuntu.com/ubuntu focal-updates/main amd64 linux-tools-virtual amd64 5.4.0.125.126
404 Not Found [IP: 91.189.91.39 80]
Fetched 6024 kB in 1s (4058 kB/s)
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux-meta/linux-tools-virtual_5.4.0.125.126_amd64.deb 404 Not Found [IP: 91.189.91.39 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
Connect USB device to WSL
All commands in this section are on the host machine.
Check the device list
Let’s check how many devices are there and which one is what we want to connect.
> usbipd.exe wsl list
BUSID VID:PID DEVICE STATE
1-5 0b0e:245e Jabra Link 370, USB Input Device Not attached
1-7 0408:5390 HP Full-HD Camera, HP IR Camera Not attached
1-8 06cb:00b7 Synaptics VFS7552 Touch Fingerprint Sensor with PurePrint... Not attached
1-14 8087:0029 Intel(R) Wireless Bluetooth(R) Not attached
2-1 8087:0af1 HP GNSS Sensor Not attached
2-2 8087:0aca USB Serial Device (COM5), USB Serial Device (COM4), Modem... Not attached
2-3 8087:0ac9 Intel(R) XMM(TM) 7360 LTE-A Not attached
6-2 05e0:1200 USB Input Device Not attached
6-5 2109:8888 USB Billboard Device Not attached
7-3 0bda:8153 Realtek USB GbE Family Controller Not attached
9-1 0c45:7638 USB Input Device Not attached
9-5 03f0:0269 HP Thunderbolt Dock Audio Headset, USB Input Device Not attached
9-7 03f0:0667 WinUSB, USB Input Device Not attached
10-1 2149:2306 USB Input Device Not attached
In my case, 6-2 is what I want. It’s a scanner.
Attach the desired device to WSL
But I got this error.
> usbipd.exe wsl attach --busid 6-2
usbipd: info: Using default WSL distribution 'Ubuntu-20.04'; specify the '--distribution' option to select a different one.
usbipd: error: Access denied; this operation requires administrator privileges.
usbipd: info: The first time attaching a device to WSL requires elevated privileges; subsequent attaches will succeed with standard user privileges.
I got the following error if I executed it with an Admin user.
> usbipd.exe wsl attach --busid 6-2
usbipd: error: There are no WSL distributions installed; see https://docs.microsoft.com/windows/wsl/basic-commands#install on how to install one.
Because I installed WSL on my own user but not on the Admin user. The Admin user doesn’t have WSL.
In this case, you can’t execute the command even if you try the following command. The domain name and user name are replaced with a placeholder here.
> runas /profile /user:<Domain name>\<User Name> "usbipd.exe wsl attach --busid 6-2"
Enter the password for <Domain name>\<User Name>:
Attempting to start usbipd.exe wsl attach --busid 6-2 as user "<Domain name>\<User Name>" ...
This command fails. A new window appears but is closed immediately.
usbipd: warning: A third-party firewall may be blocking the connection; ensure TCP port 3240 is allowed.
The account must be in the Administrator group. I executed the following command after putting my account into the Administrator group.
> usbipd.exe wsl attach --busid <busid>
usbipd: info: Using default WSL distribution 'Ubuntu-20.04'; specify the '--distribution' option to select a different one.
usbipd: warning: A third-party firewall may be blocking the connection; ensure TCP port 3240 is allowed.
usbip: error: tcp connect
usbipd: error: Failed to attach device with busid '6-2'.
But this error above is thrown…
Hmm… I don’t have a right to turn off Firewall. I uninstalled usbipd-win and re-installed it but it didn’t work for me.
Hack to connect the desired device to WSL without Admin privilege
Let’s cheat here. If you connect to the WSL from the host machine via ssh, you can ignore the firewall settings.
Start SSH server on WSL
All commands are on WSL here.
Execute the following command on WSL to check the content of ssh connection config.
cat /etc/ssh/sshd_condig
Then, you will see the following.
PasswordAuthentication no
Change it to yes and save it.
PasswordAuthentication yes
Then, execute the following command. The server will start.
$ sudo service ssh restart
* Restarting OpenBSD Secure Shell server sshd
Connect to WSL via SSH from the Host machine
The format to connect via SSH is the following.
ssh <username>@<IP address of WSL> -R 3240:127.0.0.1:3240
You can check the IP address on WSL with ip a
command. The IP address is shown on inet for eth0.
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 6e:27:82:86:7d:6e brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 56:5a:7d:9f:42:5d brd ff:ff:ff:ff:ff:ff
4: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:1c:7f:e0 brd ff:ff:ff:ff:ff:ff
inet 172.23.31.247/20 brd 172.23.31.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe1c:7fe0/64 scope link
valid_lft forever preferred_lft forever
Let’s connect to the WSL from the host machine via SSH.
> ssh yuto@172.23.31.247 -R 3240:127.0.0.1:3240
yuto@172.23.31.247's password:
Welcome to Ubuntu 20.04.5 LTS (GNU/Linux 5.10.102.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Nov 15 15:58:58 CET 2022
System load: 0.0 Processes: 36
Usage of /: 1.1% of 250.98GB Users logged in: 0
Memory usage: 9% IPv4 address for eth0: 172.23.31.247
Swap usage: 0%
=> There is 1 zombie process.
0 updates can be applied immediately.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
It could connect to WSL.
Show the available devices and try to connect the device to WSL
I could see the following result when executing the following command on WSL.
$ usbip list -r 127.0.0.1
Exportable USB devices
======================
- 127.0.0.1
1-1: Symbol Technologies : Bar Code Scanner (05e0:1200)
: USB\VID_05E0&PID_1200\S/N:38B63F28B0A967459FDC95404F7D3524:3
: (Defined at Interface level) (00/00/00)
: 0 - Human Interface Device / Boot Interface Subclass / Keyboard (03/01/01)
6-2: Symbol Technologies : Bar Code Scanner (05e0:1200)
: USB\VID_05E0&PID_1200\22222523070578__
: (Defined at Interface level) (00/00/00)
: 0 - Human Interface Device / Boot Interface Subclass / Keyboard (03/01/01)
Yes!! No more connection errors here!!
However… it doesn’t work for this scanner at all…
$ usbip attach -b 6-2 -r 127.0.0.1
usbip: error: import device
Oooooops… Lost my day…
According to the wiki page of usbipd-win, some devices can’t be used…
Comments