시스템 비퍼를 사용하여 특정 주파수 및 길이 (다른 소리 신호의 경우)로 신호음을 생성하고 싶습니다 (신호음을 사용할 수 없거나 액세스 할 수없는 경우 스피커 만). ioctl을 사용하여이 작업을 수행 할 수 있음을 알고 있지만 루트 액세스가 필요합니다. 원하지 않습니다.C의 Linux에서 경고음
나는 "삑"명령을 사용할 수 있지만, 가능하다면 사용해서는 안된다. (외부 의존성이 없다. 기본 리눅스 라이브러리와 C 만).
는 내가 현재 가지고하면 다음과 같은 코드 (그러나 이것은 실행하려면 수퍼 유저 권한이 필요) :이 작업을 수행하는 다른 방법이없는 경우
이#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])));
}
, 그때 경고음을 사용하지만, 난 정말 싶습니다 의존성을 피하고 경고음을 내 스크립트에 직접 통합 할 수는 있지만 여기 누군가가 해결책/해결 방법을 알 것입니다.
나는 프로그램이 가능한 한 가볍기 때문에 외부 라이브러리를 정말로 원하지 않는다.
바탕 화면에서 실행중인 경우 ALSA를 사용할 수 있습니다. 그리고 당신은 또한'play' 명령을 사용할 수 있습니다 ... 그리고 몇몇 데스크탑은 통지를 가지고 있습니다 ... –
@BasileStarynkevitch 그렇게 복잡하지 않습니까? 나는 단지 특정한 주파수와 길이의 단순한 삐음을 원한다. 이미 파블로에게 말했듯이 가능한 한 가볍게 유지하고 싶지만 루트 액세스 권한을 얻으려면 경고음이나 suid를 사용하는 것이 좋습니다. – omnidan
[this] (http://stackoverflow.com/questions/412789/windows-beep-equivalent-for-linux)가 도움이되는지 확인하십시오. @paxdiablo는 사용자 계정에서도 실행할 수 있다고 주장합니다. –