====== Arduino on Linux ======
===== Managing permissions =====
==== Serial port permissions ====
Depending on your distribution, you may need to add permission to your user so it can access ''/dev/ttyACM*'' or whatever. On my Debian sid system, all I needed to do was add my user to the ''dialout'' group. The following did the trick (as root):
# usermod -a -G dialout
==== USBtiny/USBtinyISP permissions ====
If you plan to use a USBtiny or USBtinyISP to program your Arduino instead of the more conventional approaches, you are likely to encounter a different permission error. On my Debian sid system, I encountered a “Warning: cannot open USB device: Permission denied” error that adding my user to the ''dialout'' group didn't fix.
I was able to clear it by adding the suggestion at the end of this [[https://learn.adafruit.com/usbtinyisp/avrdude|Adafruit page]]. Specifically, as root create a file ''/etc/udev/rules.d/99-USBtiny.rules'' with the following single line:
SUBSYSTEM=="usb", ATTR{product}=="USBtiny", ATTR{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"
The next time you log in, your programmer //should// work as expected --- unless the ''product'', ''idProduct'', and/or ''idVendor'' attributes aren't as expected. You can confirm their values by plugging in your USBtiny and running ''dmesg'' (as root):
# dmesg
[404467.789928] usb 2-1.2: New USB device found, idVendor=1781, idProduct=0c9f
[404467.789930] usb 2-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[404467.789931] usb 2-1.2: Product: USBtiny
A USBtinyISP from a different vendor I used identified itself as “USBtinyISP” rather than “USBtiny”, and so the udev rule above didn’t work. The solution was to add an additional rule in a second line to ''/etc/udev/rules.d/99-USBtiny.rules'':
SUBSYSTEM=="usb", ATTR{product}=="USBtiny", ATTR{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"
SUBSYSTEM=="usb", ATTR{product}=="USBtinyISP", ATTR{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"
Modify as needed for your USBtiny or USBtinyISP.