This is driving me crazy.

I do this:

cameron@raspberrypi ~ $ gpio export 18 out

Then here's the output of sudo ls -lL /sys/class/gpio/gpio18:

-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 active_low
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:52 direction
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 edge
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 power
drwxrwx--- 2 root     gpio        0 Mar  8 10:50 subsystem
-rwxrwx--- 1 root     gpio     4096 Mar  8 10:50 uevent
-rwxrwx--- 1 cameron  cameron  4096 Mar  8 10:50 value

So looks like I should now have access to value, great. However:

cameron@raspberrypi~ $ echo 1 > /sys/class/gpio/gpio18/value
-bash: /sys/class/gpio/gpio18/value: Permission denied

What gives? I thought this was the correct way to set up a GPIO pin for a non-root user to access it.

  • Cross-posted: unix.stackexchange.com/questions/118716/… -> Please indicate when you do this by placing a link in every question to everywhere else you have asked the question. This way people will not waste their time writing an answer in one place when you have already received one in another. Note that some places forbid cross-posting, but on Stack Exchange it is a grey area ;)
    – goldilocks
    Mar 8, 2014 at 13:30
  • Works here. Despite what @goldilocks said you SHOULD NOT use sudo, as gpio sets ownership to the user that runs it. What does gpio readall show?
    – Milliways
    Mar 8, 2014 at 22:24

3 Answers 3


The problem seemed to be that the user was not in the gpio group. This is exactly what I did:

sudo usermod -aG gpio cameron
gpio export 18 out
echo 1 > /sys/class/gpio/gpio18/value

Now everything works as expected.

  • Glad you have got it working.
    – Milliways
    Mar 9, 2014 at 7:24
  • I now realise I my /usr/local/bin/gpio has suid permission. I really can't remember whether this was by default or whether I changed it. I don't actually have a gpio group. You should accept your own answer to mark as solved.
    – Milliways
    Mar 9, 2014 at 7:35

I have not played with the GPIO pins this way but based on this article, you must first set the direction of the pin to "out". The direction node is owned by root, so:

sudo sh -c 'echo out > /sys/class/gpio/gpio18/direction'

sh -c is needed here to execute that command in a root subshell. This is because sudo echo out > direction would execute echo as root, but the redirection (> direction) would be done by your current (non-root) shell. You could also just do this su root.

After that you should, hopefully, be able to set value as cameron.

  • 1
    The gpio command sets the direction. Mar 9, 2014 at 4:27

use this command:-

echo 1 > /sys/class/gpio/gpio18/active_low

cat value


your value is changed.

  • 1
    Did you read the accepted offer? the problem was group membership. Aug 11, 2015 at 12:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.