UNPKG

signalk-server

Version:

An implementation of a [Signal K](http://signalk.org) server for boats.

34 lines (30 loc) 11.1 kB
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Linux udev Rules | Signal K</title><meta name="description" content="Documentation for Signal K"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css?cache=1767726585343"/><link rel="stylesheet" href="../assets/highlight.css?cache=1767726585343"/><script defer src="../assets/main.js?cache=1767726585343"></script><script async src="../assets/icons.js?cache=1767726585343" id="tsd-icons-script"></script><script async src="../assets/search.js?cache=1767726585343" id="tsd-search-script"></script><script async src="../assets/navigation.js?cache=1767726585343" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js?cache=1767726585343" id="tsd-hierarchy-script"></script><link rel="stylesheet" href="../assets/theme.css"/></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title"><img src="../assets/logo.svg" alt="Signal K"/></a><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg><span class="visible@s">Search</span></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><div id="tsd-toolbar-links"><a href="https://discord.gg/uuZrwz4dCS" target="_blank" rel="noopener" class="toolbar-icon visible@s" aria-label="Discord"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M524.5 69.8a1.5 1.5 0 0 0 -.8-.7A485.1 485.1 0 0 0 404.1 32a1.8 1.8 0 0 0 -1.9 .9 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.1-30.6 1.9 1.9 0 0 0 -1.9-.9A483.7 483.7 0 0 0 116.1 69.1a1.7 1.7 0 0 0 -.8 .7C39.1 183.7 18.2 294.7 28.4 404.4a2 2 0 0 0 .8 1.4A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.1-.7A348.2 348.2 0 0 0 208.1 430.4a1.9 1.9 0 0 0 -1-2.6 321.2 321.2 0 0 1 -45.9-21.9 1.9 1.9 0 0 1 -.2-3.1c3.1-2.3 6.2-4.7 9.1-7.1a1.8 1.8 0 0 1 1.9-.3c96.2 43.9 200.4 43.9 295.5 0a1.8 1.8 0 0 1 1.9 .2c2.9 2.4 6 4.9 9.1 7.2a1.9 1.9 0 0 1 -.2 3.1 301.4 301.4 0 0 1 -45.9 21.8 1.9 1.9 0 0 0 -1 2.6 391.1 391.1 0 0 0 30 48.8 1.9 1.9 0 0 0 2.1 .7A486 486 0 0 0 610.7 405.7a1.9 1.9 0 0 0 .8-1.4C623.7 277.6 590.9 167.5 524.5 69.8zM222.5 337.6c-29 0-52.8-26.6-52.8-59.2S193.1 219.1 222.5 219.1c29.7 0 53.3 26.8 52.8 59.2C275.3 311 251.9 337.6 222.5 337.6zm195.4 0c-29 0-52.8-26.6-52.8-59.2S388.4 219.1 417.9 219.1c29.7 0 53.3 26.8 52.8 59.2C470.7 311 447.5 337.6 417.9 337.6z"></path></svg></a><a href="https://github.com/SignalK/signalk-server" target="_blank" rel="noopener" class="toolbar-icon visible@s" aria-label="Discord"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></a><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../Guides.html">Guides</a></li><li><a href="" aria-current="page">Linux udev Rules</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="linux-udev-rules" class="tsd-anchor-link">Linux udev Rules<a href="#linux-udev-rules" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1><p>When you connect a USB device to a Linux computer, the kernel will automatically detect it and create a device file in</p> <p>Linux assigns device names sequentially to hotplug hardware. Usually, your device will get the same name each time you connect it or boot your computer, but sometimes the name may change. For this reason, disks and partitions are typically referenced by UUID and not by device path any more. For our purposes dealing with USB serial adapters, the assigned device name is typically <code>/dev/ttyUSB0</code>. However, if you have more than adapter the device names may not always be consistent. Therefore, it is a good idea to create a udev rule to provide an alias for your device.</p> <p>The example below assumes Debian or Ubuntu as the distribution, but it should be similar for others.</p> <p>First, we need to collect some identifiers for the device we want to alias. In a shell, run the <code>usb-devices</code> command.</p> <pre><code class="sh"><span class="hl-5">$</span><span class="hl-0"> </span><span class="hl-4">usb-devices</span> </code><button type="button">Copy</button></pre> <p>This will enumerate all of the USB devices connected to your computer (including internal USB hubs). In our example, we're looking for Actisense devices. Write down the <code>Vendor</code>, <code>ProdId</code> and <code>SerialNumber</code> values for each of your devices.</p> <p>Then, in your favorite text editor, create a file in <code>/etc/udev/rules.d/</code> called <code>90-actisense.rules</code>. The 90 ensures that it processed after other udev rules.</p> <p>The contents of the file should be:</p> <pre><code><span class="hl-2">SUBSYSTEMS</span><span class="hl-1">==</span><span class="hl-4">&quot;usb&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{idVendor}</span><span class="hl-1">==</span><span class="hl-4">&quot;0403&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{idProduct}</span><span class="hl-1">==</span><span class="hl-4">&quot;d9aa&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{serial}</span><span class="hl-1">==</span><span class="hl-4">&quot;1B091&quot;</span><span class="hl-0">, </span><span class="hl-2">SYMLINK</span><span class="hl-1">+=</span><span class="hl-4">&quot;actisense&quot;</span> </code><button>Copy</button></pre> <p>Replace <code>0403</code> with the value you wrote down for <code>Vendor</code> (if you are working with and Actisense device, it will likely be the same). Replace <code>d9aa</code> with the value you wrote down for <code>ProdId</code> and replace <code>1B091</code> with the value you wrote down for <code>SerialNumber</code>. The last change is to give your symlink a name. In the example above it is <code>actisense</code>, but you can call it whatever you want (without spaces or filesystems-reserved characters like <code>/</code>). Let's say you have two USG-1 devices, one for the autopilot and one for your VHF radio. You might want to name these devices <code>autopilot</code> and <code>vhf</code>. Then they would be available at <code>/dev/autopilot</code> and <code>/dev/vhf</code> respectively.</p> <p>You can specify multiple rules in one file, one rule per line:</p> <pre><code><span class="hl-2">SUBSYSTEMS</span><span class="hl-1">==</span><span class="hl-4">&quot;usb&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{idVendor}</span><span class="hl-1">==</span><span class="hl-4">&quot;0403&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{idProduct}</span><span class="hl-1">==</span><span class="hl-4">&quot;d9aa&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{serial}</span><span class="hl-1">==</span><span class="hl-4">&quot;1B091&quot;</span><span class="hl-0">, </span><span class="hl-2">SYMLINK</span><span class="hl-1">+=</span><span class="hl-4">&quot;autopilot&quot;</span><br/><span class="hl-2">SUBSYSTEMS</span><span class="hl-1">==</span><span class="hl-4">&quot;usb&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{idVendor}</span><span class="hl-1">==</span><span class="hl-4">&quot;0403&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{idProduct}</span><span class="hl-1">==</span><span class="hl-4">&quot;d9aa&quot;</span><span class="hl-0">, </span><span class="hl-2">ATTRS</span><span class="hl-0">{serial}</span><span class="hl-1">==</span><span class="hl-4">&quot;1B094&quot;</span><span class="hl-0">, </span><span class="hl-2">SYMLINK</span><span class="hl-1">+=</span><span class="hl-4">&quot;vhf&quot;</span> </code><button>Copy</button></pre> <p>After creating this file, disconnect your devices and plug them back in. You should see the new entries under <code>/dev</code>. If not, reboot.</p> </div></div><div class="col-sidebar"><div class="page-menu"></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">Signal K</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>