Usando bash, ¿cómo puedo hacer que el altavoz de la PC emita un pitido?
Algo así echo 'beepsound' > /dev/pcspkr
sería bueno.
Usando bash, ¿cómo puedo hacer que el altavoz de la PC emita un pitido?
Algo así echo 'beepsound' > /dev/pcspkr
sería bueno.
Respuestas:
Usualmente uso la pequeña utilidad beep
instalada 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 beep
manual:
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/tty
y 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.
beep
comando es: johnath.com/beep En Ubuntu / Debian, puede instalarlo con apt-get install beep
.
pcspkr
mó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;)
pcspkr
y snd-pcsp
son módulos, no paquetes. use modprobe
/ modprobe -r
/ lsmod
para manipularlos. Para su información, están en el linux-image-something
paquete, que con suerte ya está instalado (de lo contrario, no tendría un kernel de Linux).
modprobe snd-pcsp
pitido ahora funciona!
Simplemente haciendo eco \a
o \07
funciona para mí.
$ echo -e "\a"
Esto probablemente requerirá pcspkr
que 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 pcspkr
fue suficiente para habilitar pitidos en el VT, ya sea a través de printf "\a"
o beep
utilidad.
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 bel
como
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Para usar la tarjeta de sonido si sox
está 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.
then
bloque dentro watch
para 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...
play
utiliza 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 beep
en 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 "\007
en 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/console
para un pitido inmediato).
En Linux, herramientas como beep
pueden usar un ioctl en el dispositivo de la consola para emitir un sonido dado. Para ser más específico, beep
usará el KIOCSOUND
ioctl, pero también hay un KDMKTONE
ioctl 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_ioctl
página del manual (4) para obtener más detalles.
Entonces, si no está satisfecho con lo que beep
hace, 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