57

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

13 Answers13

86

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
Adrian
  • 984
15

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.

Bob
  • 2,563
9

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!

ESV
  • 103
  • 3
Draconis
  • 349
7

This worked to fix the 'unable to open serial port' problem (put your Ubuntu username in instead of $USER) after downloading Arduino from Ubuntu Software.

sudo usermod -a -G dialout $USER  
sudo chmod a+rw /dev/ttyUSB0
karel
  • 122,292
  • 133
  • 301
  • 332
4

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.sstatic.net/ifRmx.png

Please note that fourplus is my username.

Jeff
  • 1,724
2

I had the same issue, I tried installing from Ubuntu Store on 18.04 and try everysolution here. Nothing worked for me. So I downloaded the latest

I extracted and ran the following command to install it: $ sudo ./install.sh

After installing, I ran the script that came with the latest version by running the following:

$ ./arduino-linux-setup.sh <user_name>

Once the script is complete, it show you a message of "Please Rebook you system". I didn't restart when I try the solutions here, may be this is something that next users should try.

Important: When you install the software following these steps you need to go to Ubuntu Software and Give Permission to "Access Usb Hardware directly".

titusfx
  • 431
1

I see that the question is already accepted but none of the solutions did it for me so I've got a different solution. I installed the arduino IDE via the Ubuntu software installer. What you need to do is.

  1. Go to arduino IDE in Ubuntu software store
  2. click permissions
  3. set Access usb hardware directly on on
1

ha I'm a newbie and I made some mistakes)) Don't do it the way I do.

  1. First of all, in my book there was a bad picture about the led connection scheme. I found new one and reconnected wires. Now they are connected correctly.
  2. Then I connected arudino to the computer (it's important).
  3. Then I executed the following commands:

    • ls -l /dev/ttyACM0
    • sudo usermod -a -G dialout [my_username]
    • sudo chmod a+rw /dev/ttyACM0

When I was looking for a board in menu of arduino programm (Tools -> Board) I did not find an 'Arduino/Genuino Uno' just there was an 'Arduino Uno' (I guess it's OK)

1

For me mixture of above two answers worked: First was I couldn't find avrdude, which avrdude this gave me nothing. So, I had to reinstall the arduino.

sudo apt install --reinstall arduino

This installed avrdude, and I could find it in /usr/bin/avrdude. Next thing was to set read/write permission to the serial port:

sudo chmod a+rw /dev/ttyACM0

Then I could upload the sketch on to my arduino!

25b3nk
  • 11
1

For me any chmod and udev rule did not work.

Only forcing avrdude to run as root worked:

$ sudo chmod u+s  /opt/arduino/hardware/tools/avr/bin/avrdude
eadmaster
  • 349
1

The OP's update 2 of creating a script solves the issue just fine. Check it out on GitHub.

2048@machine:~/Downloads/iniarduino-master$ iniarduino
[sudo] password for vipulgupta2048: 
Arduino connected!
Checking if 2048 is part of dialout and tty groups
2048 added to dialout group
2048 added to tty group
Password required to change permissions of /dev/ttyACM0
Permissions to /dev/ttyACM0 changed to a+rw
Reloading UDEV Rules
UDEV Rules reloaded without the need to restart
All Done!
vipulgupta2048
  • 329
  • 2
  • 7
0

This question has not been revisited in a while. Arduino now supplies version 2 of its IDE, but the permissions problem with /dev/ttyACM0 persists. Following the instructions on the Arduino site and using some of the information in the answers already here, the following steps worked:

Add your user to the dialout and tty groups

sudo usermod -aG dialout $(whoami)
sudo usermod -aG tty $(whoami)

Then add the following in /etc/udev/rules.d/99-arduino.rules:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", GROUP="plugdev", MODE="0666"

Finally, update udev with the new rule:

sudo udevadm control --reload-rules
sudo udevadm trigger

Alternatively you can reboot, but I try to avoid power cycling machines unnecessarily.

David G
  • 133
-1

I got a solution.

  1. Find your port to which the Arduino is connected (e.g. mine was /dev/ttyUSB0). You may find it mentioned in the error message in Arduino IDE.

  2. Open the terminal (Ctrl+Alt+T).

  3. In the terminal run:

    sudo chmod 777 /dev/ttyUSB0
    

    The above command sets the required permissions.