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 <username>
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 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.