Utilizzando bash, come posso emettere un segnale acustico per l'altoparlante del PC?
Qualcosa del genere echo 'beepsound' > /dev/pcspkrsarebbe carino.
Utilizzando bash, come posso emettere un segnale acustico per l'altoparlante del PC?
Qualcosa del genere echo 'beepsound' > /dev/pcspkrsarebbe carino.
Risposte:
Di solito uso la piccola utility beepinstallata su molti sistemi. Questo comando proverà approcci diversi per creare un suono di sistema.
Esistono 3 modi per creare un suono dalla beepmanpage:
Il metodo tradizionale per produrre un segnale acustico in uno script di shell è scrivere un carattere ASCII BEL( \007) nell'output standard, mediante un comando di shell come
echo -ne '\007'
Funziona solo se l'output standard della shell chiamante è attualmente diretto a un dispositivo terminale di qualche tipo; in caso contrario, il segnale acustico non produrrà alcun suono e potrebbe persino causare la corruzione indesiderata in qualsiasi file a cui è diretto l'output.
Esistono altri modi per causare un segnale acustico. Un metodo leggermente più affidabile è quello di aprire /dev/ttye inviare lì il tuo personaggio BEL. Ciò è efficace contro il reindirizzamento I / O, ma non riesce comunque nel caso in cui lo script della shell che desidera generare un segnale acustico non abbia un terminale di controllo, ad esempio perché viene eseguito da un X Window Manager.
Un terzo approccio è quello di connettersi al display X e inviargli un comando a campana. Ciò non dipende da un dispositivo terminale Unix, ma richiede (ovviamente) un display X.
beep proverò semplicemente questi 3 metodi.
beepcomando è: johnath.com/beep Su Ubuntu / Debian, è possibile installarlo con apt-get install beep.
pcspkrmodulo, carica il snd-pcspe ora hai una scheda audio alsa che usa i trucchi della vecchia scuola per inviare effettivamente l'audio digitale all'altoparlante interno. Dà risultati scadenti con gli altoparlanti interni piezoelettrici, ma sugli altoparlanti interni classici, la qualità è abbastanza buona per quello che è. In questo modo, puoi diventare molto più creativo per i tuoi
pcspkre snd-pcspsono moduli, non pacchetti. usa modprobe/ modprobe -r/ lsmodper manipolarli. Per tua informazione, sono nel linux-image-somethingpacchetto, che si spera sia già installato (altrimenti non avresti il kernel Linux).
modprobe snd-pcspsegnale acustico ora funziona!
Eco semplicemente \ao \07funziona per me.
$ echo -e "\a"
Ciò richiederà probabilmente il pcspkrcaricamento del modulo kernel. L'ho provato solo su RHEL, quindi YMMV.
Come sottolineato da Warren nei commenti, questo potrebbe non funzionare quando si effettua l'accesso in remoto tramite SSH. Una soluzione alternativa sarebbe quella di reindirizzare l'output a uno qualsiasi dei dispositivi TTY (idealmente uno che non viene utilizzato). Per esempio:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkrstato sufficiente per abilitare i segnali acustici sotto il VT, tramite printf "\a"o tramite beeputility.
Ubuntu 16.04.1 LTS
NOTA: questa soluzione emette segnali acustici dagli altoparlanti , non dalla scheda madre .
ALSA viene fornito con speaker-test , un generatore di toni di test degli altoparlanti della riga di comando, che può essere utilizzato per generare un segnale acustico:
$ speaker-test -t sine -f 1000 -l 1
Vedi questo thread del forum di arch linux .
Tuttavia, la durata del segnale acustico sarà arbitraria, ma può essere controllata come segue:
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
Possiamo fare un ulteriore passo avanti ed emettere un segnale acustico con questa funzione:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
che viene chiamato con argomenti di frequenza e durata:
$ _alarm 400 200
Con questo in mente, è possibile creare musica semplice con speaker-test. Vedi questo script della shell .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! fa solo la stessa cosa. Ad ogni modo, il metodo di @ user569825 è più bello.
tput bel
perché terminfo definisce belcome
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Per utilizzare la scheda audio se soxinstallata e l'altoparlante del PC in caso contrario:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox è disponibile per la maggior parte delle distro.
thenblocco all'interno watchper avvisarmi una volta soddisfatta una certa condizione. Mi permette persino di tenere le cuffie accese. Questo mi è stato molto utile.
sudo -u USER play...
playutilizza pulseaudio, come utente. Immagino che dipenda dalla configurazione del sistema.
Alcune distro hanno utilità da riga di comando per raggiungere questo obiettivo. Forse potresti dirci su quale distro sei, o cercare (ad esempio emerge -s beepin Gentoo).
Andando oltre le utility "disponibili", potresti anche creare uno script Perl che emette un segnale acustico, tutto ciò che devi fare è includere:
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
Se si ottiene "bip", provare quanto segue:
#! /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"funzionerebbero in bash anziché print "\007in perl?
printf '\007'invece di echo.
"Il segnale acustico funziona solo se il tuo PC ha un" altoparlante ". Molti laptop moderni / piccoli dispositivi non ne hanno uno." - tredegar .
Prova invece a riprodurre un suono:
$ play xxxxx.wav
Ha funzionato per me, quando tutto il resto ha fallito.
Provare
echo -n Ctrl+ V Ctrl+G
Il rovescio della medaglia è che questo funzionerà solo quando il dispositivo di output è un terminale, quindi potrebbe non funzionare all'interno di un processo cron, ad esempio. (Ma se sei root potresti essere in grado di reindirizzare /dev/consoleper un segnale acustico immediato.)
Su Linux, strumenti come beeppossono utilizzare uno ioctl sul dispositivo console per emettere un determinato suono. Per essere più specifici, beeputilizzerà lo KIOCSOUNDioctl, ma esiste anche uno KDMKTONEioctl che può essere usato per generare suono.
A quanto ho capito, il primo avvia un suono che dura fino a quando non viene esplicitamente annullato, mentre il secondo crea un segnale acustico di durata predeterminata. Vedi la console_ioctlpagina man (4) per i dettagli.
Quindi, se non sei soddisfatto di ciò che beepfa, potresti scrivere alcune righe di codice per accedere direttamente a questi ioctls. Supponendo che tu abbia pieno accesso a /dev/console, che potrebbe richiedere privilegi di root.
In un terminale, premere Ctrl+ Ge quindiEnter