68

I'm using the Arduino IDE in Ubuntu, and am having issues with the serial port. It has worked in the past, but for reasons that may be unnecesary, I felt the need to change the ownership of some of the files from root ownership to my users ownership.

This made the IDE work correctly, but I lost the ability to use the correct serial port. In the dev folder, the port I need is listed as permission 166. Someone (who is no longer in the area to help me) swapped the permissions to 666, which made it all work gloriously.

However, it reverted back as soon as I restarted my computer, and if I now try to use the command:

sudo chmod 666 ttyACM0

nothing happens. No error messages, but no permission change either.

How can I change it, and how can I get it to change permanently.

I apologize if this question is overly simplistic or unclear, I'm an ubuntu noob, and I wouldn't begrudge feedback!

nelsonda
  • 623
Terrik
  • 793
  • 1
    sudo chmod 666 /dev/ttyACM0 This was the only suggestion on this page that worked on my 14.04 beta2 live environment. Thanks! –  Apr 03 '14 at 08:01

5 Answers5

100

The issue with the permissions for /dev/ttyACM0 can be permanantly solved by adding yourself to the dialout group.

You can do this with:

  1. sudo usermod -a -G dialout $USER

  2. Logout and then log back in for the group changes to take effect.

Lorenz Keel
  • 8,905
Rinzwind
  • 299,756
  • I learnt about this when Arduino IDE asked to give to root to add itself to the "Dailout group". Now I know what it is. – Ufoguy Dec 21 '13 at 18:02
  • I just purchased a Pulse-Eight USB - CEC Adapter for use with my new TV and found that it did not initially work with Kodi in Ubuntu. After checking the crash-log and googling the error message "ERROR: CecLogMessage - error opening serial port '/dev/ttyACM0': Permission denied", this page came up as a result. Thanks to you (and Don Kirkby, below - that works, too), I was able to rectify the problem immediately. – Rich.T. Apr 20 '16 at 05:37
  • Also, the answer from "user247020" gave me another solution: Open the GUI tool "Users and Groups" and make yourself an "Administrator". This will add you to the "dialout" group (ie. "Use Modems"), amongst others. – Rich.T. Apr 20 '16 at 05:52
  • usermod -a -G dialout pi works ok, after sudo chgrp dialout /dev/ttyS0 and work well but when i reboot all the config is lost. I'm on raspberry pi 3 – J261 Sep 14 '16 at 21:27
  • Add any command you need to redo to a startup script. So bash or /etc/profile or init. – Rinzwind Sep 15 '16 at 06:38
  • 1
    Note that logout means "log out of X session", not just "open new X terminal". Took me some time to figure that out. – johndodo Nov 14 '16 at 10:12
  • To the anon user editing: I rejected it. A chmod in /dev/ gets overwritten during a reboot. – Rinzwind Aug 01 '17 at 07:34
  • This didn't worked for me in Xubuntu 18.04. – user171780 Sep 21 '18 at 13:57
  • Why not? it is a generic solution. We all have a "dialout" user and the device is owned by "dialout". – Rinzwind Sep 21 '18 at 14:07
21

I couldn't get Rinzwind's suggestion to work, because it complained that the user account already exists. Instead, I used this command to add an existing user (terrik) to an existing group (dialout), as described on the Ubuntu Help Wiki.

sudo adduser terrik dialout

Also useful is this command for listing your current groups, although as Rinzwind says, you have to log out and log in before the serial port starts letting you in.

groups terrik
Don Kirkby
  • 1,457
16

Another possibility is to make a rules file in /etc/udev/rules.d/ directory. I had similar problem and I have created 50-myusb.rules file in the above directory with this content:

KERNEL=="ttyACM[0-9]*",MODE="0666"

Note that this will give any device connected to ttyACM socket read/write permissions. If you need only specific device to get read/write permissions you must also check idVendor and idProduct. You can find those by running lsusb command twice, once without your device connected and once when it is connected, then observe the additional line in the output. There you will see something like Bus 003 Device 005: ID ffff:0005. In this case idVendor = ffff and idProduct = 0005. Yours will be different. Than you modify the rules file to:

ACTION=="add", KERNEL=="ttyACM[0-9]*", ATTRS{idVendor}=="ffff", ATTRS{idProduct}=="0005", MODE="0666"

Now only this device gets the permissions. Read this to know more about writing udev rules.

12

I couldn't get Terrik's answer working, but I could if I made this slight adjustment to the path for ttyACM0.

sudo chmod 666 /dev/ttyACM0

Would post as a comment but I don't have the privileges for that yet...

gbmhunter
  • 221
  • 2
  • 3
  • 1
    The permissions seem to reset when unplugging and replugging Arduino back in. – user1063287 Jan 09 '15 at 13:14
  • does not work. :( – Freddy Apr 10 '15 at 11:06
  • it works , well as well. but requires udev rule to re-permit on repplugging – pylover Sep 09 '15 at 09:59
  • I tried sudo chmod 666 /dev/ttyACM0 and it doesn't work when starting up again. Does anyone have a solution? – user1063287 Apr 21 '16 at 07:32
  • Hmm peepz this does work .... Add the command to a startup script. (/Dev gets recreated on boot so you need to redo this command each boot) – Rinzwind Sep 15 '16 at 06:36
  • My 2 cents: I decided I rather enjoy the behaviour of permissions resetting after unplugging/rebooting. I'm not sure what the security implications are for being in the dialout group unnecessarily, but I think it's a good idea to keep serial-and-other external communications as a root-only privilege if possible. It's easy enough to just reset permission back to 0666 when you're ready to flash, unless you're doing a lot of unplugging and replugging. /paranoid – Ed Peguillan III Jun 23 '17 at 16:24
  • Add the following two lines to the end of your ~/.bashrc

    # Give permissions to serial port used by Arduino IDE sudo chmod 666 /dev/ttyACM0

    – Craig Wilcox Jan 31 '20 at 03:43
2

Try going into System / Users and Groups and checkeing the box on your username in the TTY Group.

Eliah Kagan
  • 117,780
user247020
  • 79
  • 1
  • 2
  • 7