쉘 스크립트에서 경고음이 작동하지 않습니까?


87

쉘 스크립트에서 경고음을 사용하고 싶습니다. 불행히도 Google을 통해 찾은 방법 중 어느 것도 나를 위해 일하지 않습니다.

나는 시도했다

echo -e '\a'

echo -ne '\007'

beepapt를 통해 설치 한 후 명령 .

이유가 무엇입니까?


이 버그 보고서를 참조하십시오 : bugs.launchpad.net/ubuntu/+source/unity/+bug/769314
Flimm

답변:


93

먼저 실행 sudo modprobe pcspkr한 다음 beep작동해야합니다.

그렇지 않은 이유는 기본적으로 우분투가 더 이상 경고음을 발생시키는 하드웨어 드라이버를로드하지 않기 때문입니다.

이 방법으로 문제가 해결되지 않으면 pcspkr의 로딩을 활성화하여 /etc/modprobe.d/blacklist.conf파일을 영구적으로 편집하고 ( gksudo gedit아마도 사용 ) blacklist pcspkr다음과 같은 줄을 주석으로 처리 하십시오.

# 추악하고 큰 소음, 모든 사람의 신경에 닿음; 이것은에 의해 수행되어야합니다
# nice pulseaudio bing (우분투 : # 77010)
# 블랙리스트 pcspkr

3
내가 의견을 말하면 blacklist pcspkr나는 modprobe -r pcspkr && modprobe pcspkr그것이 작동하도록해야합니다. 또한 일을 삐지고 것은 하지 가청 벨이 작동하고, 따라서 점점 같은 askubuntu.com/questions/22168/how-do-i-enable-the-terminal-bell 여전히 열려 있어야합니다.
daithib8

3
이것은 우분투 14에서 작동하지 않습니다.
Cerin

90

pcspkr 경고음의 팬이 아니므로 설치된 pulseaudio 서버의 paplay 명령으로 시스템 사운드 중 하나에서 경고음을 사용합니다.

먼저 좋아하는 소리를 찾은 다음 (예를 들어 사용 가능한 소리가있는 경우 / usr / share / sounds를 찾아 볼 수 있음)

export BEEP=/usr/share/sounds/ubuntu/ringtones/Harmonics.ogg

그런 다음 명령으로 사용 가능하게하십시오.

alias beep='paplay $BEEP'

이제 beep필요할 때마다 실행 하십시오. 예를 들어, 명령이 완료되면 경고하려면 다음을 수행하십시오.

find . | grep treasure ; beep

1
누군가가 echo -e '\a'
달릴 때이

while 루프 나 키 입력을 모니터 할 수있는 다른 라이브러리에서 일부 읽기 명령 이 필요할 수 있습니다 .
yuvilio

2
이것은 훌륭한 솔루션입니다! 이제 run-my-long-test-suite.sh; beep시스템이 준비 될 때까지 stackoverflow를 읽고 읽을 수 있습니다 .
jamesc

3
좋은! 나는 사용 export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.ogg하고 alias beep='paplay $BEEP --volume=32768'지금, 그것은 나를 위해 잘 작동합니다. (당신이 가진 볼륨 오버라이드 (override) 할 수 있습니다 beep별칭을, 예를 들면 beep --volume=15000-12dB의 볼륨으로 재생됩니다.)
leftaroundabout

3
이러한 ogg 파일을 재생하면 내부 PC 스피커 신호음보다 대기 시간이 더 길어질 수 있습니다. 지연 시간이 크게 변할뿐 아니라 대부분의 사람들은 신경 쓰지 않지만 실시간 또는 거의 실시간 응답 성이 필요할 때 PC 스피커가 아마도 가청 피드백에 가장 적합한 옵션 일 것입니다.
H2ONaCl 2019

21

이 문제를 지속적으로 해결하려면 다음을 수행하십시오.

  • 실행 gconf-editor하고있는 경우 desktop | gnome | peripherals | keyboard | bell_mode설정이 존재 그때부터 변경 offon
  • 실행 dconf-editor하고있는 경우 org | gnome | settings-daemon | peripherals | keyboard | bell-mode설정이 존재 그때부터 변경 offon
  • 추가 pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.ogg파일에 ~/.xprofile(당신이 필요 gnome-control-center-data에 대한 glass.ogg)
  • [ "$DISPLAY" ] && xset b 100파일에 추가~/.bashrc

이 솔루션을 활성화하는 가장 간단한 방법은 재부팅입니다.

또한 이미 열려있는 터미널 창에 대해이 솔루션을 즉시 구현하려면 pactl명령을 실행하고 xset해당 터미널 창에서 명령을 실행하십시오 .


pactl upload-sample명령을 쉘 스크립트에 넣었 지만 방법이 더 체계적입니다. 감사!
JoBu1324

pactl명령 을 넣으면 ~/.xprofileGUI 세션 시작시 실행됩니다.
jdthood

설정 의 dconf-editor버전은 입니다. bell-modeorg.gnome.settings-daemon.peripherals.keyboard
lgarzo

@ lgarzo : 팁 주셔서 감사합니다. 답변을 업데이트하겠습니다.
jdthood

1
@ Hibou57 : 패키지가 포함 glass.ogg되어 있는지 확인하십시오
Janus Troelsen

21

이것은 Google에서 매우 높은 등급의 질문이므로 콘솔과 X11에서 경고음을 다시 활성화하는 단계를 추가합니다.


Linux 콘솔 ( CTRL+ ALT+ F1... F6)의 경우 :

기본적으로 작동하지 않는 이유

이미 답변 했듯이 pcspkrPC 스피커 의 커널 드라이버는 Ubuntu에 블랙리스트에 있습니다.

재부팅 할 때까지 임시로 활성화하십시오.

sudo modprobe pcspkr

부팅시 자동 활성화 :

sudo nano /etc/modprobe.d/blacklist.conf

( pcspkr을 앞에 추가하여 줄 삭제 또는 설명 #)


X11 터미널의 경우 (예 : 기본값 gnome-terminal)

기본적으로 작동하지 않는 이유

X에서 Unity, KDE, Gnome Shell을 사용할 때와 같이 경고음 이벤트는으로 인해 PulseAudio에 의해 캡처 module-x11-bell되며 기본적으로로로드됩니다 /usr/bin/start-pulseaudio-x11. 경고음에서 재생되는 사운드 샘플 인 PulseAudio는 bell.ogg기본적으로 비어 있습니다. 또한 벨 음량이 소거 될 수 있습니다.

현재 세션을 일시적으로 활성화하려면

xset b 100  # perhaps not needed, on my system it was 40 by default
pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

시도해 볼 수있는 다른 적합한 샘플이 있습니다 ( /usr/share/sounds예 :/usr/share/sounds/gnome/default/alerts/

합니다 beep프로그램이 정말 필요가 없습니다. 그러나 설치된 경우 PC 스피커를 사용합니다. X에서 버저를 활성화하는 유일한 방법이었습니다.

sudo apt-get install beep

부팅시 자동으로 활성화하려면 위의 행을에 ~/.profile또는 시스템 전체에서 추가하십시오./etc/profile


그것을 테스트하려면 :

printf '\a'

삑 하는 소리!

beep

버저 소리!


자동으로 당신이 실제로 필요가 부팅에 PC 스피커 경고음 사용하려면 주석을 라인 말했다 /etc/modprobe.d/blacklist.conf가 (당신이 블랙리스트를 해제하지 않는 다른 방법으로 주위를 원하는)를 주석을 해제하지.
z33k

1
두 솔루션은 우분투 16.04 주 작업 : pcspkrbell.ogg독립적 인 방법을 제공합니다. beep다양한 방법 (예 : ioctl(console_fd, KIOCSOUND, period)사용 pcspkr(마더 보드의 PC 스피커에서 나오는 소리))을 사용 하여 신호음을 울리는 반면, printf '\a'기반 방법은 사용하지 않고 작동 할 수 있습니다 bell.ogg(사운드는 일반 스피커에서 나오는 소리). pulseaudio 서비스가 시작 및 / 또는 xset b on실행될 때까지
jfs

pactl upload-sample ...나를 위해 황금이었다. 샘플 로딩을 다시 영구적으로 구성하는 방법은 무엇입니까?
ulidtko

@ulidtko :에 라인을 추가 ~/.profile하거나 시스템 전체에/etc/profile
MestreLion

@MestreLion이 잘못되었습니다. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.ogg에서 /etc/pulseaudio/default.pa.
ulidtko 2012

15

전에이 문제가 발생했습니다. 내가 기억하는 것에서 문제는 터미널 벨이 구식 데스크톱과 같이 내부 컴퓨터 스피커를 울리려고 시도하지만 랩톱 및 일부 최신 컴퓨터에는 그러한 것이 빠져 있다는 것입니다.

나는 당시의 유일한 해결책은에 있었다 sudo apt-get install sox

play -n synth <duration in seconds> sine <freq in Hz> vol <volume (0-1)>

예 :

 play -n synth 0.1 sine 880 vol 0.5

내 해결책을 시도하십시오-그것이 당신에게 효과가 있는지 알고 싶습니다!
JoBu1324

당신이 너무을 위해 스피커 테스트를 사용할 수 있습니다
야누스 Troelsen

1
당신은 또한 멋진 기타 퍽 톤을 가질 수 있습니다 : play -q -n synth 2 pluck C5. C5가 메모입니다.
Pablo A

3

마침내 alsamixerPC Beep 옵션이 필요없는 솔루션을 찾았습니다 . 나는 내 모든 변화를 기억한다고 생각합니다.

다음에서 주석을 제거하십시오 /etc/pulse/default.pa.

load-sample-lazy x11-bell /usr/share/sounds/ubuntu/stereo/bell.ogg
load-module module-x11-bell sample=bell-windowing-system

이 버그 를 실행pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg


이것을 시험해 보니 pactl이 나에게 주었다 Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda 23시 33 분

어쩌면 이 스레드는 도움이 될 것입니다 - 만약 당신이 루트로 펄스 오디오를 실행 한 경우.
JoBu1324

실제로 다른 문제가 있습니다. Pulseaudio가 발생 Failed to open module "module-esound-protocol-unix": file not found합니다. 13.04를 실행 한 이후 여기에서 논의 할 가치가 없지만 솔루션을 확인할 수 있기를 바랍니다.
YodaDaCoda

15.04의 라인이 약간 다릅니다.
VRR

2

컴퓨터에 실제 스피커가 연결되어 있고 경고음이 들리지 않으면 compiz를 사용하고 있기 때문일 수 있습니다. Compiz는 metaaudio가 일반적인 설정을 우회하고 libcanberra를 사용하여 경고음을 재생하는 동안 pulseaudio를 사용하여 경고음을 포착하고 재생합니다. 그것이 메타 시티와 함께 ​​작동하고 당신의 문제인 compiz가 아니라면, htorque가 준 대답은 현재입니다.



2

" 경고음은 PC에 '스피커'가있는 경우에만 작동합니다. 많은 현대 노트북 / 소형 장치에는 하나가 없습니다."

다음과 같은 소리를 재생하십시오. 짧고 달콤한 것처럼 보이는 play xxxxx.wav 멋진 wav 파일을 찾았 지만 직접 선택할 수도 있습니다. 다른 모든 것이 실패했을 때 나를 위해 일합니다.


덕분에 : tredegar & hk_centos


1

다른 방법-xterm / console을 "Visual Bell"으로 설정하여 신호음이 울릴 때 창이 짧은 시간 동안 색상을 반전시킵니다.

명령이 완료되면 경고음을내는 bash 함수가 있습니다.

beep ()  { while true; do  echo -en '\a'; sleep 1; done }

그리고 이런 식으로 사용됩니다

longrun-command ; beep

0

그러나 나중에이 사람을 찾고 있다면 늦을 수도 있습니다.

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