26

I just plugged my arduino in and the light is on, but the blink test failed to upload. here is my error:

Arduino: 1.6.7 (Linux), Board: "Arduino/Genuino Uno"

Sketch uses 1,030 bytes (3%) of program storage space. Maximum is 32,256 bytes. Global variables use 9 bytes (0%) of dynamic memory, leaving 2,039 bytes for local variables. Maximum is 2,048 bytes. avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied ioctl("TIOCMGET"): Inappropriate ioctl for device Problem uploading to board. See http://www.arduino.cc/en/Guide/Troubleshooting#upload for suggestions.

This report would have more information with "Show verbose output during compilation" enabled in File > Preferences.

3
  • 2
    @IgnacioVazquez-Abrams - can you turn that into an answer? We are trying to get our percentage answered up. :) Maybe with a bit of copy and paste, so it isn't link-only.
    – Nick Gammon
    Feb 29, 2016 at 8:36
  • I did all the steps and it worked the first time. Now I try to upload my second program and I get this Message 'avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied' i did this: roquet@roquet-HP-ENVY-x360-m6-Convertible:~$ sudo adduser roquet dialout The user roquet' is already a member of dialout'. roquet@roquet-HP-ENVY-x360-m6-Convertible:~$ sudo chmod a+rw /dev/ttyUSB0 roquet@roquet-HP-ENVY-x360-m6-Convertible:~$ ls -l /dev/ttyUSB* crw-rw-rw- 1 root dialout 188, 0 Jan 20 13:12 /dev/ttyUSB0 roquet@roquet-HP-ENVY-x360-m6-Convertible:~$ but still get the 'permission denie Jan 20, 2019 at 16:24

5 Answers 5

40

From the documentation:

Open Terminal and type:

ls -l /dev/ttyACM*

you will get something like:

crw-rw---- 1 root dialout 188, 0 5 apr 23.01 ttyACM0

The "0" at the end of ACM might be a different number, or multiple entries might be returned. The data we need is "dialout" (is the group owner of the file).

Now we just need to add our user to the group:

sudo usermod -a -G dialout $USER

then:

sudo chmod a+rw /dev/ttyACM0

You will need to log out and log in again for this change to take effect.

Note that the preceding is old Ubuntu instructions. On modern distros that use ConsoleKit create the file /etc/udev/rules.d/01-ttyusb.rules containing the following and then reload the udev rules and replug the Arduino device:

SUBSYSTEMS=="usb-serial", TAG+="uaccess"
12
  • Great answer. On newer installations you do not have to reload the udev rules. Udev will watch /etc/udev/rules.d for changes. You do have to replug the arduino.
    – ppareit
    Oct 12, 2016 at 14:25
  • 1
    @ppareit what counts as "newer installations"? This doesn't work for me on Ubuntu 16.04 with or without reloading the rules (via sudo udevadm control --reload).
    – Desty
    Dec 26, 2016 at 1:21
  • 1
    I think it didn't work because the board is identified as belonging to the "tty" rather than "usb-serial" subsystem. Anyway, creating the following udev rule worked for me instead: SUBSYSTEM=="tty", ATTRS{idVendor}=="(vendor)", ATTRS{idProduct}=="(product)", ATTRS{serial}=="(serial)", SYMLINK+="ttyUSB.arduino", GROUP="adm", where (vendor) and (product) are taken from lsusb and (serial) is taken from the output of udevadm info -a -n /dev/ttyACM0|grep '{serial}'|head -n1.
    – Desty
    Dec 26, 2016 at 1:59
  • At least with Ubuntu 16.04, I don't saw this problem on Mint 18.1. Glad to hear that you found a solution!
    – ppareit
    Jan 2, 2017 at 8:37
  • NAILED IT!!!! UPVOTED. I have a 17.04 distro and the 1st solution was not persistent!
    – tony gil
    Oct 31, 2017 at 19:15
6

All you need to do is add yourself to the dialout group as described in the answer by Ignacio Vazquez-Abrams. This is done in the terminal by typing:

sudo usermod -a -G dialout $USER

You do not need to use chmod. This gives read/write access to all users and not just members of the group. Before attempting to connect, however, you must logout and log back in. Once you log back in you will be recognized as a member of the dialout group and will be able to open the device.

1

On Ubuntu 18.04, the only way I found the Arduino IDE installation to work straight out of the box, was using the documentation steps described here:

https://www.arduino.cc/en/Guide/Linux/

No changing groups nor permissions required.

0

Nothing above have helped me. When I have installed from file, from official site, it doesnt even start. Then I have installed Arduino IDE from "linux app store" and was working but have a problem like our friend from top. So I have uninstalled it and installed via terminal sudo apt install arduinoand now it`s working. Cheers.

-1

Or just use the chown command.

sudo chown <username> /dev/ttyACM*

This worked for me

1
  • 1
    This question has been asked many times in this site, and the same answer has been giving by another user. I will cite Chris Stratton on this subjedt: This is a bad idea, in particular on a typical dynamically configured linux with udev or similar managing /dev nodes you will have to do it every time you connect the device. Add your user to the appropriate group instead, which is a lasting fix.
    – user31481
    Sep 8, 2017 at 10:19