bash를 사용하여 어떻게 PC 스피커에서 경고음을 낼 수 있습니까?
뭔가 echo 'beepsound' > /dev/pcspkr
좋을 것 같습니다 .
bash를 사용하여 어떻게 PC 스피커에서 경고음을 낼 수 있습니까?
뭔가 echo 'beepsound' > /dev/pcspkr
좋을 것 같습니다 .
답변:
나는 보통 beep
많은 시스템에 설치된 작은 유틸리티를 사용합니다 . 이 명령은 시스템 사운드를 만들기 위해 다른 접근 방식을 시도합니다.
beep
맨 페이지 에서 소리를 만드는 방법은 3 가지가 있습니다 .
쉘 스크립트에서 경고음을 생성하는 일반적인 방법은 다음 과 같은 쉘 명령을 사용하여 표준 출력에 ASCII BEL
( \007
) 문자를 쓰는 것 입니다.
echo -ne '\007'
이것은 호출 쉘의 표준 출력이 현재 일종의 터미널 장치로 지정된 경우에만 작동합니다. 그렇지 않으면 신호음이 들리지 않으며 출력이 지정된 파일에 원치 않는 손상이 발생할 수 있습니다.
경고음을내는 다른 방법이 있습니다. 약간 더 안정적인 방법은 /dev/tty
BEL 캐릭터 를 열어서 보내는 것입니다. 이것은 I / O 리디렉션에 대해 강력하지만 경고음을 생성하려는 쉘 스크립트에 제어 터미널이없는 경우 (예 : X 윈도우 관리자에서 실행되기 때문에) 여전히 실패합니다.
세 번째 방법은 X 디스플레이에 연결하여 종 명령을 보내는 것입니다. 이것은 유닉스 터미널 장치에 의존하지 않지만 (물론) X 디스플레이가 필요합니다.
beep
이 세 가지 방법을 시도해보십시오.
pcspkr
모듈을로드 snd-pcsp
, 당신은 지금 실제로 내부 스피커로 디지털 사운드를 공급하는 구식 트릭을 사용하는 ALSA 사운드 카드가 있습니다. 압전 내장 스피커를 사용하면 엉뚱한 결과를 얻을 수 있지만 클래식 내장 스피커에서는 품질이 상당히 좋습니다. 이런 식으로, 당신은 당신의 삐 소리에 훨씬 더 창의적으로 얻을 수 있습니다;)
pcspkr
및 snd-pcsp
패키지가 아닌 모듈입니다. modprobe
/ modprobe -r
/ lsmod
를 사용 하여 조작하십시오. 당신의 정보를 위해, 그것들은 linux-image-something
이미 설치되어 있는 패키지 안에 있습니다. (아니면 리눅스 커널이 없을 것입니다).
modprobe snd-pcsp
신호음이 작동합니다!
단순히 에코 \a
또는 \07
나를 위해 작동합니다.
$ echo -e "\a"
아마도 pcspkr
커널 모듈을로드 해야 할 것입니다 . 나는 이것을 RHEL에서만 테스트 했으므로 YMMV.
Warren이 의견에서 지적했듯이 SSH를 통해 원격으로 로그인하면 작동하지 않을 수 있습니다. 빠른 해결 방법은 출력을 모든 TTY 장치 (이상적으로 사용되지 않는 장치)로 리디렉션하는 것입니다. 예 :
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkr
하고 있으며 VT에서 printf "\a"
또는 beep
유틸리티 를 통해 경고음을 활성화하기에 충분했습니다 .
Ubuntu 16.04.1 LTS
참고 :이 솔루션은 마더 보드가 아닌 스피커 에서 경고음을냅니다 .
ALSA는 명령 줄 스피커 테스트 톤 제너레이터 인 speaker-test 와 함께 경고음을 생성하는 데 사용할 수 있습니다.
$ speaker-test -t sine -f 1000 -l 1
이 아치 리눅스 포럼 스레드를 참조하십시오 .
그러나 경고음 지속 시간은 임의적이지만 다음과 같이 제어 할 수 있습니다.
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
한 걸음 더 나아가이 기능으로 경고음을 출력 할 수 있습니다 :
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
빈도 및 기간 인수와 함께 호출됩니다.
$ _alarm 400 200
이를 염두에두고로 간단한 음악을 만들 수 있습니다 speaker-test
. 이 쉘 스크립트를 참조하십시오 .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $!
똑같은 일을합니다. 어쨌든 @ user569825의 방법이 더 좋습니다.
sox
설치된 경우 사운드 카드를 사용하고 그렇지 않은 경우 PC 스피커 :
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox
대부분의 배포판에서 사용할 수 있습니다.
then
블록을 사용했습니다 watch
. 헤드폰을 켜도됩니다. 이것은 나에게 매우 유용했습니다.
sudo -u USER play...
play
에서는 펄스 오디오를 사용자로 사용합니다. 시스템 구성에 달려 있다고 생각합니다.
일부 배포판에는이를 수행하기위한 명령 줄 유틸리티가 있습니다. 어쩌면 어떤 배포판을 검색했는지 또는 검색 할 수 있는지 (예 : emerge -s beep
젠투에서) 알려 주실 수 있습니다.
"사용 가능한"유틸리티 이외에도 경고음을내는 Perl 스크립트를 만들 수 있습니다.
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
'삐'소리가 나면 다음을 시도하십시오.
#! /bin/sh
beep -f 500 -l 700
beep -f 480 -l 400
beep -f 470 -l 250
beep -f 530 -l 300 -D 100
beep -f 500 -l 300 -D 100
beep -f 500 -l 300
beep -f 400 -l 600
beep -f 300 -l 500
beep -f 350 -l 700
beep -f 250 -l 600
echo -e "\007"
bash는 대신 작동 print "\007
펄?
printf '\007'
대신에 보다 휴대하기 편리합니다 echo
.
" 경고음은 PC에"스피커 "가있는 경우에만 작동합니다. 많은 현대 노트북 / 소형 장치에는 없습니다." - 트레 데가 .
대신 소리를 재생 해보십시오.
$ play xxxxx.wav
다른 모든 것이 실패했을 때 나를 위해 일했습니다.
Linux에서와 같은 도구 beep
는 콘솔 장치에서 ioctl을 사용하여 주어진 소리를 낼 수 있습니다. 보다 구체적으로 ioctl beep
을 사용 KIOCSOUND
하지만 KDMKTONE
사운드를 생성하는 데 사용할 수 있는 ioctl 도 있습니다.
내가 이해하는 바와 같이, 전자는 명시 적으로 취소 될 때까지 지속되는 사운드를 시작하지만 후자는 미리 결정된 지속 시간의 경고음을 생성합니다. 자세한 내용 은 console_ioctl
(4) 매뉴얼 페이지 를 참조하십시오.
그래서 당신이 무엇에 만족 beep
하지 않으면, 당신은 이러한 ioctls에 직접 액세스하는 몇 줄의 코드를 작성할 수 있습니다. 에 대한 전체 액세스 권한이 있다고 가정하면 /dev/console
루트 권한이 필요할 수 있습니다.
터미널에서 Ctrl+ G를 누른 다음Enter