Uploading code to arduino gives me the error: "avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied"

My OS is Ubuntu 18.04 and arduino was working until now.

Although there are a few solutions, none of them seems to work for me.

I followed these instructions on the arduino website.

Then I tried this on arduino Stack Exchange, which should work in cases where the first solution didn't. The answer says we should create a few rules on /etc/udev/ruled.d/ path.

But none of them worked for me.

I also tested arduino in Windows 10 to see if it was a hardware problem, but it worked fine.

Does anyone have any other ideas on how to solve this issue?

UPDATE:

  • My username, sergio, is part of both groups (tty and dialout);
  • I logged out and back in as arduino official tutorial explains;
  • In Arduino IDE, the configurations are correct: Arduino UNO and ttyACM0
  • This is the output of ll /dev/ttyACM0 after running the tutorial commands:

    crw-rw-rw- 1 root dialout 166, 0 Jul 15 05:41 /dev/ttyACM0
    

UPDATE 2:

I've created a script to solve this: https://github.com/sergiomafra/iniarduino


I had a similar issue when I tried to upload a sketch to Arduino. The issue was connected to the lack of permissions to read/write to the serial port. I was able to fix by using the following command:

To confirm the port exists enter the following from the root directory.

ls /dev/ttyACM0

To set read/write permissions, enter the following

sudo chmod a+rw /dev/ttyACM0

Reinstall your arduino installed from Ubuntu software center:

sudo apt install --reinstall arduino

Reinstalling is necessary since your which avrdude command according to your comment returns nothing, but should be /usr/bin/avrdude. Check again:

which avrdude

Run your Arduino IDE after reinstalling and close it.

Check your arduino configuration. Open /home/sergio/.arduino/preferences.txt file and check there serial.port option. Try to change it to /dev/ttyACM0. Open that file:

sudo nano /home/sergio/.arduino/preferences.txt

and apply corresponding changes, i.e. the option should look

serial.port=/dev/ttyACM0

Restart computer afterwards.


Here's what worked for me:

  • Uninstall the version from Apt, it doesn't work properly (sudo apt uninstall arduino; sudo apt autoremove)
  • Install the version from the Arduino website
  • sudo apt install avrdude since the one from the website doesn't include it
  • sudo usermod -a -G dialout $USER since the one from the website doesn't do this automatically (the dialout group owns the device file; this adds the current user to that group)

And now everything's working again!


In combination with all the posts I read, this is what I did to solve that issue by following directions from this thread.

In a new terminal, I typed the following as shown below.

https://i.stack.imgur.com/ifRmx.png

Please note that fourplus is my username.