41

I had Windows XP on this box and it failed. Thinking it was corrupted OS I tried to reinstall, and it failed. But then I tried to install Ubuntu, and I could not run it from the USB or from the HD.

Did the mem test and found out one of my 512MB sticks (had 2) failed. I removed the bad one and was able to install Ubuntu but it was sluggish.

I was trying to quickly setup my packet radio for Hurricane Sandy. Downloaded the Serial Port Terminal and was able to get some use but the system kept locking up. So Installed Xubuntu next to it, planning on running out the next day to get RAM for the box. Put Xubuntu on and now I am getting the following error with serial port terminal.:

Cannot open /dev/ttyS0: Permission denied

I would like to be able to use serial port terminal, or equivalent with Xubuntu so I can use my kpc3 packet terminal, connect to the com port on the back of my computer.

Any ideas?

1

10 Answers 10

58

The tty devices belong to the "dialout" group, I suspect you are not a member of this group and hence are denied access to /dev/ttyS0, so you need to add yourself to that group.

First check if you are a member of that group:

groups ${USER}

..this will list all the groups you belong to. If you don't belong to the dialout grup then add yourself to it, for example:

sudo gpasswd --add ${USER} dialout

You then need to log out and log back in again for it to be effective. Then see if it fixes your problem.

5
  • Even being in dialout group user with id 1000 can't open serial port to read. After reboot. But, when I use sudo for the same executable, then it able to open /dev/ttyS0. What the possible reason? Aug 2, 2017 at 12:31
  • 11
    @Orient I had the same problem and it was because the group dialout wasn't defined. Running newgrp dialout fixed the problem.
    – TheGr8_Nik
    Dec 11, 2018 at 10:17
  • @TheGr8_Nik Thanks. Your solution worked on Ubuntu 16.04. No reboot involved. By default, this system did not have the group name dialout; checked via groups command. Even after appending username to the dialout group via command sudo usermod -a username -G dialout. After using newgrp dialout, this command esptool.py -p /dev/ttyUSB0 flash_id worked.
    – Sun Bear
    Jan 25, 2019 at 10:45
  • After running newgrp dialout I also had to reboot; simple logout / login wasn't enough.
    – Niklas
    Mar 16, 2020 at 21:47
  • I believe that most graphical environments have a graphical utility to do this, if you're not comfortable with the command line. Look for it in the menu. +1 for the group name to add myself to. (Lubuntu 20.04 LTS)
    – AaronD
    May 6, 2020 at 23:44
27

The only solution that works for me is to: (every time I boot the machine)

sudo chmod 666 /dev/ttys0

It really needs to be fixed at time of installation. I'm on 15.10 and have tried 16.04 LTS, still the same there. Seems like such a simple fix.

The older versions 10.04LTS did not have this problem.

4
  • 2
    this work with raspberry pi 3 but when I reboot lost the permissions.
    – J261
    Sep 14, 2016 at 21:25
  • 1
    Adding permissions to my username for dialout worked fine, pretty simple fix. Sep 16, 2016 at 16:57
  • @DRJ101 how to do that? linux noob Mar 15, 2022 at 9:02
  • In fact it works on macOS monterey as well. May 1, 2022 at 5:49
11

On Ubuntu 18.04, I fixed this issue with the following commands:

sudo usermod -a -G tty $USER
sudo usermod -a -G dialout $USER

And after this, reboot.

If you still have issues, try to debug with:

strace -ff <COMMAND> > strace.txt 2>&1

And look for "denied" in the strace.

10

You can just use this command:

sudo adduser $USER dialout

This will add the current user to the dialout group. Login and out it to take effect.

3

Had a look around various forums and it looks to be a bug related to permissions. Here's how I got around the problem (long version). You WILL need BOTH cu and setserial packages installed.

In three terminal tabs, monitored output from # tail -f /var/log/messages That's how we know if we have a /dev/ttyUSB0 or not.

In the second tab, simply ran a loop to ls -l this device to see it's permissions and it's group ID is 'dialout'. THIS is the critical bit. For some reason, your user MUST use this GID to do the cu, so...

In the third tab, as root, did # newgrp dialout (to correspond with the GID of dialout). Tested with # touch /tmp/anything ... doing ls -l on this file shows it is created by root with a dialout group, so we're ready to ... # cu -l /dev/ttyUSB0 In my case I needed to hit return again to see the expected prompt, in other cases speed may need to be specified.

1
  • This was the actual piece that helped me: For some reason, your user MUST use this GID to do the cu, so... . Thanks a million. Jun 15, 2015 at 8:46
2

Here is the solution:

I had just updated my operating system to Ubuntu 18. normally I would install arduino IDE through the Arduino web sight because the one provided via Ubuntu Software portal was always an older version, and I wanted the newest features and board support. However, since I just installed the newest operating system, I figured that the official software center from ubuntu would have the newest version of the IDE listed, and it did.

Now to the juicy part! Both my laptop and my desktop had the same problems accessing the serial ports. i had done the make user part of the dial-up group, and set permissions for the serial port, but always had to log out then back in, do it all again every time i rebooted! NOT FUN!.

This time, it didn't work. Even in the software center the permissions option for the software shows the serial port "disconnected". no option to allow permission to the port even after all the permissions were granted manually through the terminal window using sudo.

I decided to uninstall the Arduino IDE from the software center, and install it from the web sight, so i did. This time I read the install files, just to see if it mentions permissions for the serial port or not, *****of course it did! ****** all the ports are set with full access permissions, user access across the board. Turns out this was the answer. after running the arduino-linux-setup.sh file provided by arduino, all serial port problems were solved. the following is an excerpt from the arduino-linux-setup.sh file;

echo ""
echo "******* Add User to dialout,tty, uucp, plugdev groups *******"
echo ""

sudo usermod -a -G tty $1
sudo usermod -a -G dialout $1
sudo usermod -a -G uucp $1
sudo groupadd plugdev
sudo usermod -a -G plugdev $1


acmrules () {

    echo ""
    echo "# Setting serial port rules"
    echo ""

    cat <<EOF
    "KERNEL="ttyUSB[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   "KERNEL="ttyACM[0-9]*", TAG+="udev-acl", TAG+="uaccess", OWNER="$1"
   EOF

}

so you see even the KERNEL is effected. My suggestion:

install from the arduino ide web site. ignore the software center at this time, until it is repaired. Yes the SOFTWARE CENTER is not allowing permmisions to the serial port during install, and forever after.

Problem Solved!

2

The answer is simple. You need to add your user to two groups to have access to the usb ports. These groups are dialout and tty:

sudo usermod -a -G dialout <user>
sudo usermod -a -G tty <user>

Replace <user> with the actual username in those commands.

And after this, reboot.

0

In my case the problem still exist, even when I add my user to group using:

So when I use :

sudo gpasswd --add ${USER} dialout

and when I type: groups I got this result:

ilyahoo adm cdrom sudo dip plugdev lpadmin sambashare

But when I type id -Gn ilyahoo the putput is:

ilyahoo adm tty dialout cdrom sudo dip plugdev lpadmin sambashare 

I know that there is a problem that I don't know what is it honestly.

To get a solution I just typed

newgrp ilyahoo

and the problem was fixed.

2
  • Welcome ilyahoo to askubuntu! Please try to format post according to our guide line. Try to format the output in a more readable manner. Thanks
    – abu_bua
    Jun 28, 2018 at 0:06
  • 1
    @abu_bua please use code formatting for command output, not quote formatting.
    – muru
    Jun 28, 2018 at 6:05
0

I had the same issue, and tried every piece of advice from here. The only thing that worked for me was uninstalling the IDE that I had downloaded from Ubuntu Software, and reinstalling the software from the Arduino site.

-1

And if all of the above does not solve the problem, this should:

sudo chown $USER: /dev/ttyS0

or

sudo chown :dialout /dev/ttyS0
1
  • 1
    Changing ownership of tty is a workaround but can have bad consequences. It would be good to highlight those
    – David
    Jul 1, 2022 at 21:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .