In a previous post, I used USBIP to forawrd GPS data from A to B. 'A' was a USB GPS dongle pluged into a Raspberry Pi (Raspbian). 'B' was my laptop.
Now let's take it another step. Let's move 'B' to an LXD container sitting on a headless Ubuntu 19.04 server. No other changes: Same GPS data, same use of USBIP. 'A' is the same USB GPS dongle, the same Raspberry Pi, and the same Raspbian.
Setting up usbip on the server ('B') is identical to setting it up on my laptop. Recall that this particular dongle creates a /dev/ttyUSB_X device upon insertion, and it's the same on the Pi, the Laptop, and the Server
me@server:~$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
me@server:~$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Aug 17 21:13 /dev/ttyUSB0
LXD has a USB Hotplug feature that works for many, but not all USB devices, connecting USB devices on the host to the container. Devices that create a custom entry in /dev (like /dev/ttyUSB_X) generally cannot use the USB Hotplug...but CAN instead use 'usb-char' forwarding which (seems to be) NOT hotpluggable.
Here's that LXD magic at work. In this case, I'm using a container called 'ha-test2', and let's simply name the dongle 'gps'. Do this while the container is stopped, or restart the container afterward
me@server:~$ lxc config device add ha-test2 gps unix-char path=/dev/ttyUSB0
Device gps added to ha-test2
Now we start the container, and then jump into a shell inside. We see that /dev/ttyUSB0 has indeed been forwarded. And we test to ensure data is flowing -- that we can read from /dev/tty/USB0.
me@server:~$ lxc start ha-test2
me@server:~$ lxc shell ha-test2
mesg: ttyname failed: No such device
root@ha-test2:~# ls -l /dev/ | grep tty
crw-rw-rw- 1 nobody nogroup 5, 0 Aug 18 02:11 tty
crw-rw---- 1 root root 188, 0 Aug 18 02:25 ttyUSB0
root@ha-test2:~# apt install gpsd-clients // Get the gpsmon application
root@ha-test2:~# gpsmon /dev/ttyUSB0
Making it permanent
It is permanent already. The 'lxc config' command will edit the config of the container, which is persistent across a reboot.
Cleaning up
There are two options for cleanup of the container.
- You can simply throw it away (it's a container)
- Alternately,
root@ha-test2:~# apt autoremove gpsd-clients
On the Server:
Also remember to detach USBIP, and uninstall usbip packages.
me@server:~$ lxc config device remove ha-test2 gps
me@server:~$ sudo apt autoremove gpsd-clients // If you installed gpsmon to test connectivity
Also remember to detach USBIP, and uninstall usbip packages.
No comments:
Post a Comment