Beep on Linux in C
beep, c, external-dependencies, ioctl, linux
Solution
I think the only way to do this is to either use suid to give my own program root access, or to use `beep`, which already has suid. I suppose I will just add one more dependency, then, as `beep` is not too big anyway.
Thank you for all the answers, I'm sure other libraries are great for more complex signals, but I need a very simple one!
I think this question can be marked as solved / closed, then.
If anybody finds a way to create a beep using the console without superuser-privileges, I'm still interested in this solution :)
Thank you all again.
Problem
I want to generate a beep sound with a specific frequency and length (for different sound signals) using the system beeper (and only the speakers if beeper is not available / accessible). I know it is possible to do this by using ioctl, but that requires root access, which I don't want. I know I could just use the "beep" command, but that would be a dependency, which, if possible, shouldn't be used (no external dependencies at all, just the basic linux libraries and C). What I currently have is the following code (but this requires superuser privileges to run): ``` #include <stdlib.h> #include <fcntl.h> #include <linux/kd.h> int main(int argc, char *argv[]) { int fd = open("/dev/console", O_RDONLY); if (fd == -1 || argc != 3) return -1; return ioctl(fd, KDMKTONE, (atoi(argv[2])<<16)+(1193180/atoi(argv[1]))); } ``` If there is no other way to do this, then I will use beep, but I would really like to avoid dependencies and integrate the beep directly into my script, but I'm sure somebody here will know a solution / workaround. I don't really want external libraries as the program should be as lightweight as possible.