Bip no shell script não está funcionando?


87

Eu gostaria de usar um som de bipe em um script de shell. Infelizmente, nenhum dos métodos que encontrei pelo Google funciona para mim.

eu tentei

echo -e '\a'

echo -ne '\007'

e o comando beepdepois que eu o instalei via apt.

Qual seria a razão?



Respostas:


93

Primeiro execute sudo modprobe pcspkre depois beepdeve funcionar.

O motivo para isso não acontecer é porque, por padrão, o Ubuntu não carrega mais o driver de hardware que produz bipes.

Se isso funcionar para você, habilite o carregamento do pcspkr permanentemente, edite o /etc/modprobe.d/blacklist.confarquivo ( gksudo gedittalvez usando ) e comente a linha que diz blacklist pcspkr:

barulho feio e alto, dando nos nervos de todos; isso deve ser feito por um
# bom pulseaudio bing (Ubuntu: # 77010)
# blacklist pcspkr

3
Se eu comentar blacklist pcspkr, tenho que fazer modprobe -r pcspkr && modprobe pcspkrpara que funcione. Também fazer com que o bipe funcione não é o mesmo que fazer com que a campainha audível funcione e, portanto, askubuntu.com/questions/22168/how-do-i-enable-the-terminal-bell ainda deve estar aberto.
daithib8

3
Isso não funciona para mim no Ubuntu 14.
Cerin 04/04

90

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

Primeiro encontre o som que você gosta (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 beepsempre que precisar. Por exemplo, para alertá-lo quando um comando for concluído:

find . | grep treasure ; beep

11
Você pode obtê-lo para jogar este som quando alguém correecho -e '\a'
Flimm

Pode ser necessário algum comando de leitura em um loop while ou alguma outra biblioteca que possa monitorar as teclas digitadas.
Yuvilio

2
Esta é uma otima soluçao! Agora eu posso fazer run-my-long-test-suite.sh; beepe ler o stackoverflow até que o sistema esteja pronto.
315 jamesc

3
Agradável! Eu uso export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.ogge alias beep='paplay $BEEP --volume=32768'agora, isso funciona bem para mim. (Observe que você pode substituir o volume pelo beepalias, por exemplo, beep --volume=15000reproduz um volume de -12dB.) #
Leftaroundout sobre 6/15 /

3
A reprodução desses arquivos ogg pode resultar em ordens de latência de magnitude maiores que as do sinal sonoro interno do PC. Não apenas que a latência parece altamente variável. Reconheço que a maioria das pessoas não se importa, mas quando você precisa de resposta em tempo real ou quase em tempo real, o alto-falante do PC é provavelmente a melhor opção para feedback audível.
H2ONaCl 21/02

21

Para corrigir esse problema persistentemente:

  • Execute gconf-editore, se a desktop | gnome | peripherals | keyboard | bell_modeconfiguração estiver presente, altere-a de offparaon
  • Execute dconf-editore, se a org | gnome | settings-daemon | peripherals | keyboard | bell-modeconfiguração estiver presente, altere-a de offparaon
  • Adicionar pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggpara o arquivo ~/.xprofile(você precisa gnome-control-center-datapara glass.ogg)
  • Adicionar [ "$DISPLAY" ] && xset b 100ao arquivo~/.bashrc

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

Além disso, para implementar esta solução imediatamente para uma janela do terminal que já esteja aberta, execute o pactlcomando e execute xsetna janela do terminal em questão.


Eu coloquei o pactl upload-samplecomando em um script de shell, mas seu método é mais organizado. Obrigado!
JoBu1324

Se você colocar o pactlcomando, ~/.xprofileele será executado no início da sessão da GUI.
Jdthood

A dconf-editorversão da bell-modeconfiguração parece ser org.gnome.settings-daemon.peripherals.keyboard.
Lgarzo

@ lgarzo: Obrigado pela dica. Eu atualizarei a resposta.
Jdthood

11
@ Hibou57: Certifique-se de que você tem o pacote contendo glass.ogginstalado
Janus Troelsen

21

Como essa é uma pergunta com uma classificação muito alta 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á foi respondido , o pcspkrdriver do kernel do PC Speaker está na lista negra do Ubuntu.

Ative temporariamente até a reinicialização:

sudo modprobe pcspkr

Ativar automaticamente na inicialização:

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

(exclua ou pcspkrlinha de comentário , acrescentando-a com #)


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

Por que não funciona por padrão

No X, como ao usar o Unity, KDE, Gnome Shell, os eventos de bipe são capturados pelo PulseAudio graças a module-x11-bell, carregado por padrão em /usr/bin/start-pulseaudio-x11. E a amostra de som que o PulseAudio toca no bipe,, bell.oggestá 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 /usr/share/sounds, por exemplo, verifique as/usr/share/sounds/gnome/default/alerts/

Observe que o beepprograma não é realmente necessário. Mas se instalado, ele usa o PC Speaker. Foi a única maneira que pude encontrar para ativar a campainha no X:

sudo apt-get install beep

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


Para testá-lo:

printf '\a'

Bip!

beep

Zumbido!


Para ativar automaticamente o bipe do alto-falante do PC na inicialização, você deve realmente comentar a linha em /etc/modprobe.d/blacklist.conf para não descomentá-la (você deseja desativar a lista negra, e não o contrário).
Z33k

11
ambas as soluções funcionam no Ubuntu 16.04 Nota: pcspkre bell.oggsão abordagens independentes. beeptenta emitir um bipe usando várias abordagens, por exemplo, ioctl(console_fd, KIOCSOUND, period)use pcspkr(o som vem do alto-falante do PC na placa-mãe), enquanto o printf '\a'método baseado pode funcionar sem ele usando somente bell.ogg(o som é dos alto-falantes comuns). O segundo método pode não funcionar até que o serviço pulseaudio é iniciado e / ou xset b oné executado
jfs

O pactl upload-sample ...foi dourado para mim. Qual é a maneira de configurar permanentemente o carregamento da amostra novamente?
ulidtko

@ulidtko: Basta adicionar essas linhas no seu ~/.profile, ou em todo o sistema em/etc/profile
MestreLion 6/17/17

@MestreLion errado. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggno /etc/pulseaudio/default.pa.
7117 ulidtko

15

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

A única solução que encontrei na época foi sudo apt-get install soxe

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

experimente minha solução - eu adoraria saber se funciona para você!
JoBu1324

você pode usar alto-falante de teste para isso também
Janus Troelsen

11
Você também pode ter um bom tom de guitarra Arranque: play -q -n synth 2 pluck C5. C5 é a nota.
Pablo A

3

Finalmente encontrei uma solução, que não requer alsamixera opção de PC Beep. Acho que me 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 esse bug , executepactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg


Tentei isso, pactl me deu Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda

Talvez este tópico ajude - se você já executou o pulseaudio como root.
JoBu1324

Estou tendo um problema diferente, na verdade. Pulseaudio joga Failed to open module "module-esound-protocol-unix": file not found. Provavelmente não vale a pena discutir aqui, pois estou executando o 13.04, embora eu adoraria poder verificar sua solução.
YodaDaCoda

Bom, apenas linhas ligeiramente diferentes para 15.04.
VRR 12/09

2

Se você possui alto-falantes reais conectados ao computador e não está ouvindo um sinal sonoro, é provável que esteja usando o compiz. O Compiz conta com o pulseaudio para captar os bipes e reproduzi-los enquanto a metacidade ignora a configuração usual e usa a libcanberra para reproduzir um bipe. Se ele funciona com metacidade e não com o problema que você tem, caso contrário, a resposta que o htorque deu é correta.



2

"O sinal sonoro funciona apenas se o seu PC tiver um 'alto-falante'. Muitos laptops / dispositivos pequenos modernos não têm um".

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


Obrigado a: tredegar & hk_centos


1

Uma abordagem alternativa - defina seu xterm / console como "Visual Bell" para que, quando ele emitir um bipe, 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 um comando é concluído.

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

E é usado dessa maneira

longrun-command ; beep

0

Pode ser tarde demais, mas para o cara que está procurando no futuro:

printf '\x07'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.