¿El pitido en el script de shell no funciona?


87

Me gustaría usar un pitido en un script de shell. Lamentablemente, ninguno de los métodos que encontré a través de Google me funciona.

Lo intenté

echo -e '\a'

echo -ne '\007'

y el comando beepdespués de instalarlo a través de apt.

¿Cuál podría ser la razón?



Respuestas:


93

Primero corre sudo modprobe pcspkry luego beepdebería funcionar.

La razón por la que esto no ocurre es que, por defecto, Ubuntu ya no carga el controlador de hardware que produce pitidos.

Si esto funciona para usted, entonces para habilitar la carga de pcspkr edite permanentemente el /etc/modprobe.d/blacklist.confarchivo (usando gksudo geditquizás) y comente la línea que dice blacklist pcspkrque se ve así:

# ruido feo y fuerte, que pone los nervios de punta; esto debería hacerlo un
# nice pulseaudio bing (Ubuntu: # 77010)
# blacklist pcspkr

3
Si comento blacklist pcspkr, tengo que hacer modprobe -r pcspkr && modprobe pcspkrpara que funcione. Además, hacer que suene el pitido no es lo mismo que hacer que suene la campana audible y, por lo tanto, askubuntu.com/questions/22168/how-do-i-enable-the-terminal-bell aún debe estar abierto.
daithib8

3
Esto no funciona para mí en Ubuntu 14.
Cerin

90

Como no soy fanático del pitido pcspkr, utilizo un pitido de uno de los sonidos del sistema con el comando de reproducción del servidor pulseaudio instalado.

Primero encuentre un sonido que le guste (puede buscar / usr / compartir / sonidos para algunos disponibles, por ejemplo) y crear una referencia a él

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

Luego tenlo disponible como un comando

alias beep='paplay $BEEP'

Ahora solo corre beepcuando lo necesites. Por ejemplo, para alertarlo cuando finalice un comando:

find . | grep treasure ; beep

1
¿Puedes hacer que reproduzca este sonido cuando alguien correecho -e '\a'
Flimm

Es posible que necesite algún comando de lectura en un bucle while o alguna otra biblioteca que pueda monitorear las pulsaciones de teclas.
yuvilio

2
¡Esta es una gran solución! Ahora puedo hacer run-my-long-test-suite.sh; beepy leer stackoverflow hasta que el sistema esté listo.
jamesc

3
¡Agradable! Yo uso export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.oggy alias beep='paplay $BEEP --volume=32768'ahora, eso funciona bien para mí. (Tenga en cuenta que puede anular el volumen con el beepalias, por ejemplo, se beep --volume=15000reproduce en un volumen de -12dB.)
Leftaroundabout

3
La reproducción de estos archivos ogg puede resultar en órdenes de latencia de magnitud mayor que la del pitido interno del altavoz de la PC. No solo que la latencia parece muy variable. Reconozco que a la mayoría de las personas no les importa, pero cuando necesita una respuesta en tiempo real o casi en tiempo real, el altavoz de la PC es probablemente la mejor opción para comentarios audibles.
H2ONaCl

21

Para solucionar este problema persistentemente:

  • Ejecutar gconf-editory si la desktop | gnome | peripherals | keyboard | bell_modeconfiguración está presente, cámbiela de offaon
  • Ejecutar dconf-editory si la org | gnome | settings-daemon | peripherals | keyboard | bell-modeconfiguración está presente, cámbiela de offaon
  • Añadir pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggal archivo ~/.xprofile(que necesita gnome-control-center-datapara glass.ogg)
  • Agregar [ "$DISPLAY" ] && xset b 100al archivo~/.bashrc

La forma más sencilla de activar esta solución es reiniciar.

Además, para implementar esta solución inmediatamente para una ventana de terminal que ya está abierta, ejecute el pactlcomando y ejecute el xsetcomando en la ventana de terminal en cuestión.


Puse el pactl upload-samplecomando en un script de shell, pero su método es más organizado. ¡Gracias!
JoBu1324

Si coloca el pactlcomando ~/.xprofile, se ejecuta al comienzo de la sesión de la GUI.
jdthood

La dconf-editorversión de la bell-modeconfiguración parece ser org.gnome.settings-daemon.peripherals.keyboard.
lgarzo

@lgarzo: Gracias por el consejo. Actualizaré la respuesta.
jdthood

1
@ Hibou57: asegúrese de tener glass.ogginstalado el paquete que contiene
Janus Troelsen

21

Como esta es una pregunta de alta calificación en Google, agregaré los pasos que hice para volver a habilitar el pitido tanto en la consola como en X11:


Para la consola de Linux ( CTRL+ ALT+ F1... F6):

Por qué no funciona por defecto

Como ya se respondió , el pcspkrcontrolador del kernel para el PC Speaker está en la lista negra de Ubuntu.

Habilitar temporalmente hasta reiniciar:

sudo modprobe pcspkr

Habilitar automáticamente en el arranque:

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

(eliminar o comentar la pcspkrlínea al agregarla #)


Para terminales X11 (como el predeterminado gnome-terminal)

Por qué no funciona por defecto

En X, como cuando se usa Unity, KDE, Gnome Shell, PulseAudio captura los eventos de pitido gracias a module-x11-bellque se carga de forma predeterminada en /usr/bin/start-pulseaudio-x11. Y la muestra de sonido PulseAudio se reproduce en pitido bell.ogg, está en blanco de forma predeterminada. Además, el volumen de la campana puede estar silenciado.

Para habilitar temporalmente la sesión actual,

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

Hay otras muestras adecuadas que puede probar /usr/share/sounds, por ejemplo, consulte las/usr/share/sounds/gnome/default/alerts/

Tenga en cuenta que el beepprograma no es realmente necesario. Pero si está instalado, usa el altavoz de la PC. Era la única forma que pude encontrar para habilitar el timbre bajo X:

sudo apt-get install beep

Para habilitar automáticamente el arranque, simplemente agregue las líneas anteriores en su ~/.profile, o en todo el sistema en/etc/profile


Para probarlo:

printf '\a'

¡Bip!

beep

¡Zumbido!


Para habilitar automáticamente el pitido de un altavoz de PC en el arranque, debe comentar dicha línea en /etc/modprobe.d/blacklist.conf sin descomentarla (desea deshabilitar las listas negras, no al revés).
z33k

1
ambas soluciones funcionan en Ubuntu 16.04 Nota: pcspkry bell.oggson enfoques independientes. beepintenta emitir un pitido usando varios enfoques, por ejemplo, ioctl(console_fd, KIOCSOUND, period)usar pcspkr(el sonido proviene del altavoz de la PC en la placa base) mientras que el printf '\a'método basado en la base puede funcionar sin usarlo solo bell.ogg(el sonido proviene de los altavoces normales). El segundo método podría no funcionar hasta que se inicie y / o xset b onse ejecute el servicio
pulseaudio

El pactl upload-sample ...era dorado para mí. ¿Cuál es la forma de configurar permanentemente la carga de la muestra nuevamente?
ulidtko

@ulidtko: Sólo tiene que añadir estas líneas las líneas de la ~/.profile, o de todo el sistema en/etc/profile
MestreLion

@MestreLion está equivocado. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggen /etc/pulseaudio/default.pa.
ulidtko

15

He encontrado este problema antes. Por lo que recuerdo, el problema es que el timbre de la terminal intenta sonar un altavoz interno de la computadora (como en un escritorio de la vieja escuela) pero las computadoras portátiles y algunas computadoras más nuevas no tienen tal cosa.

La única solución que encontré en ese momento fue sudo apt-get install soxy

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

p.ej

 play -n synth 0.1 sine 880 vol 0.5

prueba mi solución: ¡me encantaría saber si te funciona!
JoBu1324

también puede usar la prueba de altavoz para esto
Janus Troelsen

1
También puede tener un buen tono de la guitarra despluman: play -q -n synth 2 pluck C5. C5 es la nota.
Pablo A

3

Finalmente encontré una solución, que no requiere alsamixertener una opción de pitido de PC. Creo que recuerdo todos mis cambios:

descomenta lo siguiente en /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 error , ejecutapactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg


Intenté esto, pactl me dio Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda

Tal vez este hilo ayude, si alguna vez ha ejecutado pulseaudio como root.
JoBu1324

Estoy teniendo un problema diferente, en realidad. Lanzamientos de Pulseaudio Failed to open module "module-esound-protocol-unix": file not found. Probablemente no valga la pena hablar aquí ya que estoy ejecutando 13.04, aunque me encantaría poder verificar su solución.
YodaDaCoda

Bonito, solo líneas ligeramente diferentes para 15.04.
VRR

2

Si tiene altavoces reales conectados a la computadora y no está escuchando un pitido, es probable que esté usando compiz. Compiz confía en que pulseaudio capte los pitidos y los reproduzca mientras metacity omite la configuración habitual y usa libcanberra para reproducir un pitido. Si funciona con metacity y no compiz, ese es su problema, de lo contrario, la respuesta que dio htorque es actual.



2

" Beep solo funciona si su PC tiene un 'altavoz'. Muchas computadoras portátiles modernas / dispositivos pequeños no tienen uno".

Intenta reproducir un sonido como este: play xxxxx.wav encontré un buen archivo wav que parece ser corto y dulce, pero también puedes elegir el tuyo. Funciona para mí cuando todo lo demás falla.


Gracias a: tredegar & hk_centos


1

Un enfoque alternativo: configure su xterm / consola en "Visual Bell" para que cuando suene un pitido, la ventana simplemente invierta sus colores por un corto tiempo.

Tengo una función bash llamada bip para llamar mi atención una vez que se termina un comando.

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

Y se usa de esta manera

longrun-command ; beep

0

Podría ser demasiado tarde, PERO, para el tipo en el futuro que busca esto:

printf '\x07'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.