USB AVR Programmer V2 Linux - Can't Open Device

When I try to use my AVR programmer on my new Linux machine I get the following error:

TARGET: command not found
avrdude: ser_open(): can’t open device “/dev/ttyACM0”: Permission denied

Typing sudo in front of the command will work, but it is not a long term solution that I can execute from a makefile since I don’t want to enter my password every time I program an AVR.

I’m not sure what issue is, I am on Mint 18.2 and followed the Linux install steps correctly. The same setup works fine on my R PI3 running Raspberian.

Running lsusb on the Mint Machine yields:

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 004: ID 1ffb:00b0
Bus 004 Device 003: ID 05ac:8213 Apple, Inc. Bluetooth Host Controller
Bus 004 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 05ac:8507 Apple, Inc. Built-in iSight
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 004: ID 05ac:0236 Apple, Inc. Internal Keyboard/Trackpad (ANSI)
Bus 003 Device 003: ID 05ac:8242 Apple, Inc. Built-in IR Receiver
Bus 003 Device 002: ID 1d57:fa60 Xenta
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

The device in bold is the programmer, and I have the following udev rule in place:
SUBSYSTEM==“usb”, ATTR{idVendor}==“1ffb”, MODE=“0666”

If I take the rule out, then I cannot configure the tool via the command line or the GUI. With the rule in place, both of these functions work. However, the rule does not seem to allow avrdude to see the device without sudo. I’m relatively new to linux, but have been configuring systems for several years. From what I have read about udev rules this should work. Any advice on what to do to make averdude able to see this device without sudo would be greatly appreciated. I am also perplexed as to why the same set up works fine on my R PI 3.


The typical way to solve a permission error when trying to access a serial port on Linux is to make sure that your user is a member of the right group.

On the new Linux machine, with the programmer plugged in, please run the following two commands and post their output here:

ls -l /dev/ttyACM*




Here is what I get when I run those commands. I tried experimenting with some udev rules to add the device to the adm or plugdev groups based on some other suggestions, but no luck. ttyACM0 is the programming port of the programmer when I plugged it into my machine.

<user>@<PCname> ~ $ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 Nov 15 11:21 /dev/ttyACM0
<user>@<PCname> ~ $ groups
<user> adm cdrom sudo dip plugdev lpadmin sambashare

From ls, we can see that /dev/ttyACM0 belongs to the dialout group and all users of that group are given read and write permissions for the serial port. I recommend adding your user to the dialout group by running:

sudo usermod -a -G dialout USERNAME

where USERNAME is replaced with your Linux user name.

After running that command, you will probably need to log out and log back in.


Thanks, that did the trick!

I do have a question about the udev rule that is in place though:
SUBSYSTEM==“usb”, ATTR{idVendor}==“1ffb”, MODE=“0666”

Shouldn’t MODE=“0666” make it so that all users have read/write access to that device? Just trying to learn more about Linux and udev rules.

For what it’s worth, I did look more at the groups on the PI and Raspberian comes pre-configured to log the user in as pi, which is a member of all the groups in the PI OS. That likely explains why it worked on the PI out of the gate.

Thanks again for the help, I really appreciate it.

The udev rule you are quoting, which we distribute in a file named 99-pololu.rules, only applies to the native USB interface of our devices. It does not apply to the virtual serial ports.

I am glad you were able to get your system working properly.