Beep no script de shell não está funcionando?

83

Gostaria de usar um sinal sonoro em um script de shell. Infelizmente, nenhum dos métodos que encontrei através do Google funciona para mim.

Eu tentei

echo -e '\a'

echo -ne '
echo -e '\a'

echo -ne '%pre%7'
7'

e o comando beep depois que eu o instalei via apt.

Qual poderia ser o motivo?

    
por NES 03.01.2011 / 21:37

10 respostas

90

Primeira execução sudo modprobe pcspkr e, em seguida, beep devem funcionar.

A razão disso não é porque, por padrão, o Ubuntu não carrega mais o driver de hardware que produz bips.

Se isso funcionar para você, então para ativar o carregamento do pcspkr, edite permanentemente o arquivo /etc/modprobe.d/blacklist.conf (usando gksudo gedit talvez) e comente a linha que diz blacklist pcspkr , para que fique assim:

# ugly and loud noise, getting on everyone's nerves; this should be done by a
# nice pulseaudio bing (Ubuntu: #77010)
# blacklist pcspkr
    
por 8128 03.01.2011 / 21:44
86

Não sendo fã do beep do pcspkr, eu uso um bipe de um dos sons do sistema com o comando paplay do servidor pulseaudio instalado.

Primeiro, encontre um som que você goste (você pode procurar / usr / share / sounds por alguns disponíveis, por exemplo) e criar uma referência a ele

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

Em seguida, disponibilize-o como um comando

alias beep='paplay $BEEP'

Agora, basta executar beep sempre que precisar. Por exemplo, para alertá-lo quando um comando terminar:

find . | grep treasure ; beep
    
por yuvilio 27.07.2012 / 02:28
21

Para corrigir este problema de forma persistente:

  • Execute gconf-editor e, se a configuração desktop | gnome | peripherals | keyboard | bell_mode estiver presente, altere-a de off para on
  • Execute dconf-editor e, se a configuração org | gnome | settings-daemon | peripherals | keyboard | bell-mode estiver presente, altere-a de off para on
  • Adicione pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.ogg ao arquivo ~/.xprofile (você precisa de gnome-control-center-data para glass.ogg )
  • Adicione [ "$DISPLAY" ] && xset b 100 ao arquivo ~/.bashrc

A maneira mais simples de ativar esta solução é reinicializar.

Além disso, para implementar essa solução imediatamente para uma janela de terminal que já esteja aberta, execute o comando pactl e execute o comando xset na janela do terminal em questão.

    
por jdthood 12.12.2012 / 13:33
21

Como essa é uma pergunta muito bem cotada no google, adicionarei as etapas que fiz para reativar o bipe no console e no X11:

Para o console Linux ( CTRL + ALT + F1 ... F6 ):

Por que não funciona por padrão

Como já respondeu , o driver do kernel pcspkr para o PC Speaker está na lista negra do Ubuntu.

Ativar temporariamente até a reinicialização:

sudo modprobe pcspkr

Ativar automaticamente na inicialização:

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

(exclua ou comente pcspkr line ao prefixar com # )

Para terminais X11 (como o padrão gnome-terminal )

Por que não funciona por padrão

Em X, como quando se usa Unity, KDE, Gnome Shell, os eventos de bipe são capturados pelo PulseAudio graças a module-x11-bell , que é carregado por padrão em /usr/bin/start-pulseaudio-x11 . E a amostra de som que o PulseAudio toca no sinal sonoro, bell.ogg , está em branco por padrão. Além disso, o volume da campainha pode estar mudo.

Para ativar temporariamente a sessão atual,

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

Existem outras amostras adequadas que você pode experimentar em /usr/share/sounds , por exemplo, verifique as que estão em /usr/share/sounds/gnome/default/alerts/

Observe que o programa beep não é realmente necessário. Mas se instalado, ele usa o alto-falante do PC. Foi a única maneira que encontrei para ativar a campainha em X:

sudo apt-get install beep

Para ativar automaticamente na inicialização, basta adicionar as linhas acima em ~/.profile ou em todo o sistema em /etc/profile

Para testar:

printf '\a'

Beep!

beep

Buzz!

    
por MestreLion 19.02.2015 / 12:36
13

Eu encontrei esse problema antes. Pelo que me lembro, o problema é que a campainha do terminal tenta tocar um alto-falante interno do computador (como em uma área de trabalho antiga), mas laptops e alguns computadores mais novos estão perdendo essa coisa.

A única solução que encontrei na ocasião foi sudo apt-get install sox e

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

por exemplo,

 play -n synth 0.1 sine 880 vol 0.5
    
por YodaDaCoda 12.12.2012 / 00:04
2

Se você tem alto-falantes reais conectados ao computador e não está recebendo um sinal sonoro, é provável que você esteja usando o compiz. Compiz está confiando em pulseaudio pegando os bips e os jogando enquanto metacidad ultrapassa a configuração habitual e usa libcanberra para tocar um som de buzina. Se funciona com metacidad e não com compiz esse é o teu problema, caso contrário a resposta dada por htorque é corrent.

    
por Travis Watkins 03.01.2011 / 21:56
2

Tanto quanto eu posso dizer, isso é um bug: Sistema beep quebrado em Karmic apesar heróico esforços para consertá-lo .

    
por htorque 03.01.2011 / 21:43
2

Eu finalmente encontrei uma solução, que não requer que alsamixer tenha uma opção de Beep no PC. Acho que lembro de todas as minhas alterações:

descomente o seguinte em /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

por este bug , execute pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

    
por JoBu1324 12.12.2012 / 00:09
2

" Beep só funciona se o seu PC tiver um 'alto-falante'. Muitos laptops / pequenos dispositivos modernos não têm um".

Tente reproduzir um som como este: play xxxxx.wav Encontrei um wav legal arquivo que parece ser curto e doce, mas você também pode escolher o seu. Funciona para mim quando tudo mais falhou.

Obrigado a: tredegar & hk_centos

    
por Eliptical view 06.03.2018 / 00:00
0

Uma abordagem alternativa - configure seu xterm / console para "Visual Bell" para que, quando apitar, a janela simplesmente inverta suas cores por um curto período de tempo.

Eu tenho uma função bash chamada beep para chamar minha atenção quando o comando terminar.

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

E é usado dessa maneira

longrun-command ; beep
    
por 05.04.2019 / 02:24