USB device access permissions
If your device does not work with your GNU/Linux distribution out of the box, perhaps its access permissions are configured incorrectly.
Most distributions assign very restrictive permissions to connected USB devices by default, which makes it impossible for regular users to access them. This is what typically can be seen when an application fails to access a virtual serial port (USB CDC ACM) due to insufficient permissions:
We can fix the problem in the following way:
- Configure udev so that it assigns the correct permissions to attached devices automatically.
- Add the current user to the group dialout, so that the system would enable it to access all serial port devices (including the virtual serial ports) by default.
Run the following commands to apply the solution. Do not run the snippet as root unless you replace
$USER with your actual user name, otherwise it will be expanded as
root and the solution may fail to work as expected.
Now you should log out and then log back in, or (better yet) just reboot.
Afterwards you can connect your device and it should work. If it still doesn't, please reach out to the Zubax Forum for help.
Convenient access to virtual serial ports using udev symlinks
On most distributions, instead of directly specifying the TTY device such as
/dev/ttyACM0, it is possible to use the persistent symlinks under
/dev/serial/by-id/ that are helpfully provided by the udev subsystem.
These symlinks allow the user to refer directly to the specific device using its vendor name, product name, and/or unique ID, which is more convenient because, unlike the TTY number, these parameters are persistent. For example,
/dev/ttyACM0 in the example above could be replaced with (this is just an example)
/dev/serial/by-id/usb-Zubax_Robotics_Zubax_GNSS_34FFD305435730343944224300000000-if00, or just
/dev/serial/by-id/usb-Zubax_Robotics_Zubax_GNSS* to refer to any connected Zubax GNSS regardless of its unique ID. Usage of glob expressions allows you to make more complex queries to the udev subsystem in this way.
You can see the full list of connected devices by listing the directory
/dev/serial/by-id/, as shown below.