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