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 : pcspkr및 snd-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.