Usando bash, ¿cómo puedo hacer que el altavoz de la PC emita un pitido?
Algo así echo 'beepsound' > /dev/pcspkrsería bueno.
Usando bash, ¿cómo puedo hacer que el altavoz de la PC emita un pitido?
Algo así echo 'beepsound' > /dev/pcspkrsería bueno.
Respuestas:
Usualmente uso la pequeña utilidad beepinstalada en muchos sistemas. Este comando intentará diferentes enfoques para crear un sonido de sistema.
Hay 3 formas de crear un sonido desde la página de beepmanual:
El método tradicional de producir un pitido en un script de shell es escribir un carácter ASCII BEL( \007) en la salida estándar, mediante un comando de shell como
echo -ne '\007'
Esto solo funciona si la salida estándar del shell de llamada se dirige actualmente a un dispositivo terminal de algún tipo; de lo contrario, el pitido no producirá ningún sonido e incluso podría causar daños no deseados en cualquier archivo al que se dirija la salida.
Hay otras formas de provocar un pitido. Un método un poco más confiable es abrir /dev/ttyy enviar su personaje BEL allí. Esto es robusto contra la redirección de E / S, pero aún falla en el caso en que el script de shell que desea generar un pitido no tiene un terminal de control, por ejemplo, porque se ejecuta desde un administrador de ventanas X.
Un tercer enfoque es conectarse a su pantalla X y enviarle un comando de campana. Esto no depende de un dispositivo terminal Unix, pero sí (por supuesto) requiere una pantalla X.
beep simplemente intentará estos 3 métodos.
beepcomando es: johnath.com/beep En Ubuntu / Debian, puede instalarlo con apt-get install beep.
pcspkrmódulo, cargue el snd-pcsp, y ahora tiene una tarjeta de sonido alsa que utiliza trucos de la vieja escuela para transmitir sonido digital a su altavoz interno. Da resultados malos con los altavoces internos piezoeléctricos, pero en los altavoces internos clásicos, la calidad es bastante buena para lo que es. De esta manera, puede ser mucho más creativo para sus pitidos;)
pcspkry snd-pcspson módulos, no paquetes. use modprobe/ modprobe -r/ lsmodpara manipularlos. Para su información, están en el linux-image-somethingpaquete, que con suerte ya está instalado (de lo contrario, no tendría un kernel de Linux).
modprobe snd-pcsppitido ahora funciona!
Simplemente haciendo eco \ao \07funciona para mí.
$ echo -e "\a"
Esto probablemente requerirá pcspkrque se cargue el módulo del núcleo. Solo he probado esto en RHEL, así que YMMV.
Como Warren señaló en los comentarios, esto puede no funcionar cuando se inicia sesión de forma remota a través de SSH. Una solución rápida sería redirigir la salida a cualquiera de los dispositivos TTY (idealmente uno que no se use). P.ej:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkrfue suficiente para habilitar pitidos en el VT, ya sea a través de printf "\a"o beeputilidad.
Ubuntu 16.04.1 LTS
NOTA: Esta solución emite pitidos desde los altavoces , no desde la placa base .
ALSA viene con prueba de altavoz , un generador de tono de prueba de altavoz de línea de comandos, que se puede utilizar para generar un pitido:
$ speaker-test -t sine -f 1000 -l 1
Vea este hilo del foro de Arch Linux .
Sin embargo, la duración del pitido será arbitraria, pero se puede controlar de la siguiente manera:
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
Podemos ir un paso más allá y emitir un pitido con esta función:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
que se llama con argumentos de frecuencia y duración:
$ _alarm 400 200
Con esto en mente, es posible crear música simple con speaker-test. Ver este script de shell .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! hace lo mismo. De todos modos, el método de @ user569825 es más agradable.
tput bel
porque terminfo define belcomo
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Para usar la tarjeta de sonido si soxestá instalada y el altavoz de la PC si no está:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox está disponible para la mayoría de las distribuciones.
thenbloque dentro watchpara notificarme una vez que se cumplió una determinada condición. Incluso me permite mantener mis auriculares puestos. Esto fue muy útil para mí.
sudo -u USER play...
playutiliza pulseaudio, como usuario. Supongo que depende de la configuración del sistema.
Algunas distribuciones tienen utilidades de línea de comandos para lograr esto. Tal vez podría decirnos en qué distribución se encuentra o buscar (por ejemplo, emerge -s beepen gentoo).
Yendo más allá de las utilidades "disponibles", también puede hacer un script de Perl que emita un pitido, todo lo que necesita hacer es incluir:
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
Si terminas recibiendo un "pitido", prueba lo siguiente:
#! /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"funcionaría en bash en lugar de print "\007en perl?
printf '\007'lugar de echo.
" Beep solo funciona si su PC tiene un" altavoz ". Muchas computadoras portátiles modernas / dispositivos pequeños no tienen uno". - Tredegar .
Intenta reproducir un sonido en su lugar:
$ play xxxxx.wav
Funcionó para mí, cuando todo lo demás falló.
Tratar
echo -n Ctrl+ V Ctrl+G
La desventaja es que esto solo funcionará cuando el dispositivo de salida sea un terminal, por lo que puede no funcionar dentro de un trabajo cron, por ejemplo. (Pero si usted es root, es posible que pueda redirigir /dev/consolepara un pitido inmediato).
En Linux, herramientas como beeppueden usar un ioctl en el dispositivo de la consola para emitir un sonido dado. Para ser más específico, beepusará el KIOCSOUNDioctl, pero también hay un KDMKTONEioctl que puede usarse para generar sonido.
Según tengo entendido, el primero emite un sonido que dura hasta que se cancela explícitamente, mientras que el segundo crea un pitido de duración predeterminada. Consulte la console_ioctlpágina del manual (4) para obtener más detalles.
Entonces, si no está satisfecho con lo que beephace, podría escribir algunas líneas de código para acceder a estos ioctls directamente. Suponiendo que tiene acceso completo a /dev/console, que bien podría requerir privilegios de root.
En una terminal, presione Ctrl+ Gy luegoEnter