Я пытаюсь «подать» звуковой сигнал на динамик ПК, используя вызов IOCtl для устройства tty0 - код в основном такой:
int fd = open("/dev/tty0", O_RDONLY);
if (fd == -1 || argc != 3) return -1;
return ioctl(fd, KDMKTONE, (atoi(argv[2])<<16)+(1193180/atoi(argv[1])));
Это нормально работает от пользователя root или с помощью sudo. Если я пытаюсь запустить от непривилегированного пользователя, это не работает.
strace изначально показывает, что проблема заключается в отсутствии разрешений на открытие устройства / dev / tty0 - однако, если я изменяю разрешения tty0на 666 он затем не работает на ioctl с ошибкой EPERM.
Я пытался поместить моего пользователя в группы tty и dialout без эффекта
есть идеи у кого-нибудь?