user618: Uploading simple sketches seems to work when I run the Arduino program as root (sudo). I would like to run it as a regular user. Has anyone faced the same problem before and fixed it?
Here is what I obtained from lsusb:
$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)

And the Arduino program identifies it as /dev/ttyACM0. Here are its permissions: 
$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0

Here is the output from id
groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

When I upload an sketch from the examples, as a regular user, I encounter this error:
avrdude:stk500_recv(): programmer not responding

Any suggestions are welcome.

user889: The oft-repeated advice to "just do sudo usermod -aG dialout <username> never worked for me, and I finally figured out why. On my machine, /dev/ttyUSB0 is of the group serial and not dialout, so adding my username to dialout did nothing.
# ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)

Finally: sudo usermod -aG <group-name> <username> fixed it for me.
Embarrassingly, this is also explicitly mentioned here under "SET THE PERMISSION". Sigh.

user83: The easiest solution is to add yourself to the dialout group.
First make a note of the output from id. Save it in file (not in /tmp as that gets cleaned out on a reboot). If you look at the output, you'll notice that your user is signed up for several groups and those groups represent extra privileges on the system. By default your Arduino is assigned to the group dialout because it registers as a serial interface and in the old days these were often used to ... dial out, using a modem.
To add yourself to the dialout group, issue the following command:
sudo usermod -a -G dialout $USER

Don't forget the -a flag (for appending groups rather than replacing) or you will have entirely different problems. This is the reason for making a copy of the id output to a file, so in case you do mess up at least you know what your user was configured like before.
Then log out and log in and it should work from that point.
Optionally you can double check the output for id against the output you saved before.

618: <p>Uploading simple sketches seems to work when I run the Arduino program as root (<code>sudo</code>). I would like to run it as a regular user. Has anyone faced the same problem before and fixed it?</p>

<p>Here is what I obtained from <code>lsusb</code>:</p>

<pre><code>$ lsusb
Bus 002 Device 022: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
</code></pre>

<p>And the Arduino program identifies it as <code>/dev/ttyACM0</code>. Here are its permissions: </p>

<pre><code>$ ls -l /dev/ttyACM0 
crw-rw---T 1 root dialout 166, 0 Mar 14 22:03 /dev/ttyACM0
</code></pre>

<p>Here is the output from <code>id</code></p>

<pre><code>groups=1000(abhiram),20(dialout),24(cdrom),25(floppy),29(audio),
30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)
</code></pre>

<p>When I upload an sketch from the examples, as a regular user, I encounter this error:</p>

<pre><code>avrdude:stk500_recv(): programmer not responding
</code></pre>

<p>Any suggestions are welcome.</p>
 889: <p>The oft-repeated advice to "just do <code>sudo usermod -aG dialout &lt;username&gt;</code> never worked for me, and I finally figured out why. On my machine, <code>/dev/ttyUSB0</code> is of the group <code>serial</code> and not <code>dialout</code>, so adding my username to <code>dialout</code> did nothing.</p>

<pre><code># ls -l
# crw-rw---- 1 root serial 188, 0 Mar 31 20:52 /dev/ttyUSB0
                    ^^^^^^ (group-name)
</code></pre>

<p>Finally: <code>sudo usermod -aG &lt;group-name&gt; &lt;username&gt;</code> fixed it for me.</p>

<p>Embarrassingly, this is also explicitly mentioned <a href="http://playground.arduino.cc/Linux/All#.UzoSq1VX-uZ">here</a> under "SET THE PERMISSION". Sigh.</p>
 83: <p>The easiest solution is to add yourself to the <code>dialout</code> group.</p>

<p>First make a note of the output from <code>id</code>. Save it in file (not in <code>/tmp</code> as that gets cleaned out on a reboot). If you look at the output, you'll notice that your user is signed up for several groups and those groups represent extra privileges on the system. By default your Arduino is assigned to the group <code>dialout</code> because it registers as a serial interface and in the old days these were often used to ... dial out, using a modem.</p>

<p>To add yourself to the <code>dialout</code> group, issue the following command:</p>

<pre><code>sudo usermod -a -G dialout $USER
</code></pre>

<p>Don't forget the <code>-a</code> flag (for appending groups rather than replacing) or you will have entirely different problems. This is the reason for making a copy of the <code>id</code> output to a file, so in case you do mess up at least you know what your user was configured like before.</p>

<p>Then log out and log in and it should work from that point.</p>

<p>Optionally you can double check the output for <code>id</code> against the output you saved before.</p>
