PC 스피커에서 경고음을 내려면 어떻게합니까


171

bash를 사용하여 어떻게 PC 스피커에서 경고음을 낼 수 있습니까?

뭔가 echo 'beepsound' > /dev/pcspkr좋을 것 같습니다 .



답변:


124

나는 보통 beep많은 시스템에 설치된 작은 유틸리티를 사용합니다 . 이 명령은 시스템 사운드를 만들기 위해 다른 접근 방식을 시도합니다.

beep맨 페이지 에서 소리를 만드는 방법은 3 가지가 있습니다 .

  1. 쉘 스크립트에서 경고음을 생성하는 일반적인 방법은 다음 과 같은 쉘 명령을 사용하여 표준 출력에 ASCII BEL( \007) 문자를 쓰는 것 입니다.

    echo -ne '\007'
    

    이것은 호출 쉘의 표준 출력이 현재 일종의 터미널 장치로 지정된 경우에만 작동합니다. 그렇지 않으면 신호음이 들리지 않으며 출력이 지정된 파일에 원치 않는 손상이 발생할 수 있습니다.

  2. 경고음을내는 다른 방법이 있습니다. 약간 더 안정적인 방법은 /dev/ttyBEL 캐릭터 를 열어서 보내는 것입니다. 이것은 I / O 리디렉션에 대해 강력하지만 경고음을 생성하려는 쉘 스크립트에 제어 터미널이없는 경우 (예 : X 윈도우 관리자에서 실행되기 때문에) 여전히 실패합니다.

  3. 세 번째 방법은 X 디스플레이에 연결하여 종 명령을 보내는 것입니다. 이것은 유닉스 터미널 장치에 의존하지 않지만 (물론) X 디스플레이가 필요합니다.

beep 이 세 가지 방법을 시도해보십시오.


9
beep명령에 대한 홈페이지 는 다음과 같습니다. johnath.com/beep Ubuntu / Debian에서는으로 설치할 수 있습니다 apt-get install beep.
Riccardo Murri

14
리눅스에서 비프 음위한 제 4 불량한 방법이있다 : 언 로딩 pcspkr모듈을로드 snd-pcsp, 당신은 지금 실제로 내부 스피커로 디지털 사운드를 공급하는 구식 트릭을 사용하는 ALSA 사운드 카드가 있습니다. 압전 내장 스피커를 사용하면 엉뚱한 결과를 얻을 수 있지만 클래식 내장 스피커에서는 품질이 상당히 좋습니다. 이런 식으로, 당신은 당신의 삐 소리에 훨씬 더 창의적으로 얻을 수 있습니다;)
BatchyX

8
@isomorphismes : pcspkrsnd-pcsp패키지가 아닌 모듈입니다. modprobe/ modprobe -r/ lsmod를 사용 하여 조작하십시오. 당신의 정보를 위해, 그것들은 linux-image-something이미 설치되어 있는 패키지 안에 있습니다. (아니면 리눅스 커널이 없을 것입니다).
BatchyX

3
경고음은 보통 데비안 용으로 작동하지만 우분투에서 작동하려면 모듈을로드해야했습니다
mchid

4
mchid가 말했듯이 모듈을 추가 한 후 : modprobe snd-pcsp신호음이 작동합니다!
lepe September

72

단순히 에코 \a또는 \07나를 위해 작동합니다.

$ echo -e "\a"

아마도 pcspkr커널 모듈을로드 해야 할 것입니다 . 나는 이것을 RHEL에서만 테스트 했으므로 YMMV.

최신 정보

Warren이 의견에서 지적했듯이 SSH를 통해 원격으로 로그인하면 작동하지 않을 수 있습니다. 빠른 해결 방법은 출력을 모든 TTY 장치 (이상적으로 사용되지 않는 장치)로 리디렉션하는 것입니다. 예 :

$ echo -en "\a" > /dev/tty5

5
X 터미널을 사용하거나 컴퓨터에 ssh'd하는 경우 많은 xterm / vt100 유형 프로그램이 BEL 문자에 대해 그렇게 구성되어 있기 때문에 터미널이 깜박일 수 있습니다.
워렌 영

2
이것은 의미가 있지만 Ubuntu 12.04에서는 작동하지 않았습니다.
동 형사상

2
@isomorphismes : X11 터미널이 아닌 콘솔 용입니다. X에서 경고음이 들리면 다음을 시도하십시오. askubuntu.com/a/587311/11015
MestreLion

1
@isomorphismes : Ubuntu 12.04도 사용 sudo modprobe pcspkr하고 있으며 VT에서 printf "\a"또는 beep유틸리티 를 통해 경고음을 활성화하기에 충분했습니다 .
MestreLion 2012

3
어떤 방법도 나를 위해 작동하지 않습니다. Ubuntu 16.04.1 LTS
ar2015

67

참고 :이 솔루션은 마더 보드가 아닌 스피커 에서 경고음을냅니다 .

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. 이 쉘 스크립트를 참조하십시오 .


1
단일 라이너로서의 기능 (및 Ctrl-C 호환) :timeout ${2} speaker-test --frequency ${1} --test sine
user569825

1
pid를 저장할 필요가 없으며 speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! 똑같은 일을합니다. 어쨌든 @ user569825의 방법이 더 좋습니다.
erm3nda

27
tput bel

때문에 의 terminfo는 정의 bel

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)

17

sox설치된 경우 사운드 카드를 사용하고 그렇지 않은 경우 PC 스피커 :

$ play -q -n synth 0.1 sin 880 || echo -e "\a"

sox 대부분의 배포판에서 사용할 수 있습니다.


2
+1 놀이에이 기능이 있다는 것을 몰랐습니다. 특정 조건이 충족되면 나에게 알리기 위해이 then블록을 사용했습니다 watch. 헤드폰을 켜도됩니다. 이것은 나에게 매우 유용했습니다.
andyortlieb

떠들썩한 파티 쉬 플레이에서 아마해야합니다sudo -u USER play...
intika

내 시스템 play에서는 펄스 오디오를 사용자로 사용합니다. 시스템 구성에 달려 있다고 생각합니다.
Alexander

13

일부 배포판에는이를 수행하기위한 명령 줄 유틸리티가 있습니다. 어쩌면 어떤 배포판을 검색했는지 또는 검색 할 수 있는지 (예 : 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펄?
Stefan

1
@ 스테판-경고음은 거의 '보편적'입니다. 그러나 'echo -e "\ a"'또는 'echo -e "\ 07"'을 사용하면 배포판에 구애를받지 않습니다. 건배!
wormintrude

2
printf '\007'대신에 보다 휴대하기 편리합니다 echo.
Dennis Williamson


2

시험

에코 -n Ctrl+ V Ctrl+G

단점은 출력 장치가 터미널 일 때만 작동하므로 크론 작업에서는 작동하지 않을 수 있다는 것입니다. 그러나 루트 사용자 인 경우 /dev/console즉시 경고음을 울리 도록 리디렉션 할 수 있습니다 .


1

Linux에서와 같은 도구 beep는 콘솔 장치에서 ioctl을 사용하여 주어진 소리를 낼 수 있습니다. 보다 구체적으로 ioctl beep을 사용 KIOCSOUND하지만 KDMKTONE사운드를 생성하는 데 사용할 수 있는 ioctl 도 있습니다.

내가 이해하는 바와 같이, 전자는 명시 적으로 취소 될 때까지 지속되는 사운드를 시작하지만 후자는 미리 결정된 지속 시간의 경고음을 생성합니다. 자세한 내용 console_ioctl(4) 매뉴얼 페이지 를 참조하십시오.

그래서 당신이 무엇에 만족 beep하지 않으면, 당신은 이러한 ioctls에 직접 액세스하는 몇 줄의 코드를 작성할 수 있습니다. 에 대한 전체 액세스 권한이 있다고 가정하면 /dev/console루트 권한이 필요할 수 있습니다.


-1

터미널에서 Ctrl+ G를 누른 다음Enter


1
내 터미널 (그놈 터미널)에서는 Enter없이 작동합니다. PC 스피커 테스트와 마찬가지로 이것은 나에게 잘 보입니다. 그러나 스크립트에서는 전혀 쓸모가 없습니다.
Palec

놀라운 다운 보트. 이것은 일부 PC에서는 작동하지만 일부 경우에는 작동하지 않을 수 있습니다.
Zzzach ...

rxvt, urxvt, xterm, lxterm 또는 lxterminal에서 작동하지 않습니다. 시각적 벨이 있으면 터미널이 적어도 깜박이지 않아야합니까?
Willem

xterm에서 작동합니다
Chris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.