Hallo Ekkard,
From the keyboard of Ekkard,
* Waldemar Brodkorb schrieb:
beep-1.2.1 (erhalten von freshmeet.net) ist nicht als user (non-root) ausführbar:
Could not open /dev/console for writing. open: Permission denied
Wenn ich dann /dev/console für user freigebe kommt:
ioctl: Operation not permitted
ioctl ist ein Systemaufruf, der nur privilegierten Usern zur Verfügung steht, weil damit Hardwareparameter verändert werden.
Zeig mal die Ausgabe von strace, da wird mehr hilfreiche Debugging Info ausgegeben, die Zur Analyse nützlich ist.
.. ah .. ja stimmt, habe daran nicht mehr gedacht:
im Zustand der für user freigegebenen /dev/console: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gerlach@rex:/usr/local/bin > /usr/local/bin/beep -f 2200 -l 500 ioctl: Operation not permitted gerlach@rex:/usr/local/bin > strace /usr/local/bin/beep -f 2200 -l 500 execve("/usr/local/bin/beep", ["/usr/local/bin/beep", "-f", "2200", "-l", "500"], [/* 47 vars */]) = 0 uname({sys="Linux", node="rex", ...}) = 0 brk(0) = 0x804a430 open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=40526, ...}) = 0 old_mmap(NULL, 40526, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40017000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\315\1"..., 1024) = 1024 fstat64(3, {st_mode=S_IFREG|0755, st_size=1343073, ...}) = 0 old_mmap(NULL, 1164516, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40021000 mprotect(0x40134000, 38116, PROT_NONE) = 0 old_mmap(0x40134000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x112000) = 0x40134000 old_mmap(0x4013a000, 13540, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4013a000 close(3) = 0 munmap(0x40017000, 40526) = 0 getpid() = 6027 brk(0) = 0x804a430 brk(0x804a460) = 0x804a460 brk(0x804b000) = 0x804b000 rt_sigaction(SIGINT, {0x8048850, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0 open("/dev/console", O_WRONLY) = 3
Jetzt kann der Device Node /dev/console im WriteModus geöffnet werden.
ioctl(3, KIOCSOUND, 0x21e) = -1 EPERM (Operation not permitted)
Aber der Systemaufruf zur Veränderung der Eigenschaften schlägt fehl. (-1)
write(2, "ioctl: Operation not permitted\n", 31ioctl: Operation not permitted ) = 31 nanosleep({0, 500000000}, NULL) = 0 ioctl(3, KIOCSOUND, 0) = -1 EPERM (Operation not permitted)
Dann versucht er es nach einer kurzen Pause noch einmal. Du mußt dieses Programm mit der effektiven UID 0 ausführen. Entweder über sudo oder über SUID/SGID Bit. man 2 ioctl /usr/src/linux/include/linux/kd.h #define KIOCSOUND 0x4B2F /* start sound generation (0 for off) */ gruß Waldemar -- Are your questions smart enough? http://www.tuxedo.org/~esr/faqs/smart-questions.html If not: perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'