I am running Arch Linux on a Raspberry Pi 2.
I have a user-space program that uses Gordon's wiringPi
library and, in particular, the piHiPri()
function that attempts to set the highest priority for the current process (using sched_setscheduler
and SCHED_RR
mode).
This function needs superuser privileges.
The root user is the default one when installing Arch Linux so I created a user named builder
that I added to sudoers
thanks to visudo
.
My problem is:
when I execute the program with the root
user, the sched_setscheduler
function returns “Operation not permitted” (getting it from errno
).
If I execute it while being builder
I get a “permission denied”.
However if I execute it with sudo myProgram
while being builder
, everything is fine and I can see that priority has changed with the top
command.
I thought that the root
user might not have UID 0 so I checked with id -u root
but this returns 0.
ls -l myProgramm
gives -rwxr-xr-x 1 root root
. I also tried to set SUID with chmod +s myProgramm
without success.
Any idea on how to make my program executable by root?
EDIT:
As Gilles advised I ran ulimit -r
and it returned 0 in any cases (builder
and root
).
I changed a line in /etc/security/limits.conf
from: * - rtprio 0
To : * - rtprio 99
This affected the output of ulimit -r
as expected: it returns now 99.
I then tried again to run my program with root
but I still have the same Operation not permitted
error and now it does not work anymore with sudo
(same Operation not permitted
as above)... strange !
While investigating I reverted back to old /etc/security/limits.conf
settings.