Il bip nello script della shell non funziona?


87

Vorrei usare un segnale acustico in uno script di shell. Purtroppo nessuno dei metodi che ho trovato tramite Google funziona per me.

Provai

echo -e '\a'

echo -ne '\007'

e il comando beepdopo averlo installato tramite apt.

Quale potrebbe essere la ragione?



Risposte:


93

Prima di tutto, sudo modprobe pcspkrpoi beepdovrebbe funzionare.

La ragione non è perché Ubuntu per impostazione predefinita non carica più il driver hardware che produce segnali acustici.

Se questo funziona per te, allora per abilitare il caricamento di pcspkr modifica permanentemente il /etc/modprobe.d/blacklist.conffile (usando gksudo geditforse) e commenta la riga che dice blacklist pcspkrcosì assomiglia a questo:

# rumore brutto e forte, che fa innervosire tutti; questo dovrebbe essere fatto da a
# nice pulseaudio bing (Ubuntu: # 77010)
# lista nera pcspkr

3
Se commento, blacklist pcspkrdevo farlo modprobe -r pcspkr && modprobe pcspkrper farlo funzionare. Anche far funzionare il segnale acustico non equivale a far funzionare la campana udibile e quindi askubuntu.com/questions/22168/how-do-i-enable-the-terminal-bell dovrebbe essere ancora aperto.
daithib8,

3
Questo non funziona per me in Ubuntu 14.
Cerin

90

Non essendo un fan del segnale acustico di pcspkr, utilizzo un segnale acustico da uno dei suoni di sistema con il comando paplay del server pulseaudio installato.

Per prima cosa trova un suono che ti piace (puoi sfogliare / usr / share / suoni per alcuni disponibili per esempio) e creare un riferimento ad esso

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

Quindi averlo disponibile come comando

alias beep='paplay $BEEP'

Ora corri beepquando ne hai bisogno. Ad esempio, per avvisarti quando un comando è finito:

find . | grep treasure ; beep

1
Riesci a far suonare questo suono quando qualcuno correecho -e '\a'
Flimm,

Potrebbe essere necessario un comando di lettura in un ciclo while o qualche altra libreria in grado di monitorare le sequenze di tasti.
yuvilio,

2
Questa è un'ottima soluzione! Ora posso fare run-my-long-test-suite.sh; beepe leggere stackoverflow fino a quando il sistema non è pronto.
Jamesc

3
Bello! Uso export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.ogge alias beep='paplay $BEEP --volume=32768'ora funziona bene per me. (Si noti che è possibile ignorare il volume con l' beepalias, ad esempio, beep --volume=15000gioca in volume di -12dB.)
leftaroundabout

3
La riproduzione di questi file ogg può comportare un ordine di latenza di grandezza superiore a quello del segnale acustico dell'altoparlante interno del PC. Non solo la latenza sembra molto variabile. Riconosco che alla maggior parte delle persone non importa, ma quando hai bisogno di reattività in tempo reale o quasi in tempo reale, l'altoparlante del PC è probabilmente l'opzione migliore per il feedback acustico.
H2ONaCl

21

Per risolvere questo problema in modo persistente:

  • Esegui gconf-editore se l' desktop | gnome | peripherals | keyboard | bell_modeimpostazione è presente, modificala da offaon
  • Esegui dconf-editore se l' org | gnome | settings-daemon | peripherals | keyboard | bell-modeimpostazione è presente, modificala da offaon
  • Aggiungi pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggal file ~/.xprofile(necessario gnome-control-center-dataper glass.ogg)
  • Aggiungi [ "$DISPLAY" ] && xset b 100al file~/.bashrc

Il modo più semplice per attivare questa soluzione è riavviare.

Inoltre, per implementare immediatamente questa soluzione per una finestra terminale già aperta, eseguire il pactlcomando ed eseguire il xsetcomando nella finestra terminale in questione.


Ho messo il pactl upload-samplecomando in uno script di shell, ma il tuo metodo è più organizzato. Grazie!
JoBu1324,

Se si inserisce il pactlcomando, ~/.xprofilequesto viene eseguito all'inizio della sessione della GUI.
jdthood,

La dconf-editorversione bell-modedell'impostazione sembra essere org.gnome.settings-daemon.peripherals.keyboard.
Lgarzo,

@lgarzo: Grazie per la punta. Aggiornerò la risposta.
jdthood,

1
@ Hibou57: assicurati di avere glass.ogginstallato il pacchetto contenente
Janus Troelsen,

21

Poiché questa è una domanda molto votata su Google, aggiungerò i passaggi che ho fatto per riattivare il segnale acustico sia in console che in X11:


Per la console Linux ( CTRL+ ALT+ F1... F6):

Perché non funziona per impostazione predefinita

Come già risposto , il pcspkrdriver del kernel per PC Speaker è nella lista nera di Ubuntu.

Abilita temporaneamente fino al riavvio:

sudo modprobe pcspkr

Abilita automaticamente all'avvio:

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

(elimina o commenta la pcspkrriga anteponendola con #)


Per terminali X11 (come quello predefinito gnome-terminal)

Perché non funziona per impostazione predefinita

Sotto X, come quando si usa Unity, KDE, Gnome Shell, gli eventi di bip vengono catturati da PulseAudio grazie a module-x11-bell, che viene caricato di default in /usr/bin/start-pulseaudio-x11. E il campione audio PulseAudio suona con un segnale acustico bell.ogg, è vuoto per impostazione predefinita. Inoltre, il volume della campana potrebbe essere disattivato.

Per abilitare temporaneamente per la sessione corrente,

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

Ci sono altri campioni adatti che puoi provare /usr/share/sounds, ad esempio controlla quelli su/usr/share/sounds/gnome/default/alerts/

Si noti che il beepprogramma non è veramente necessario. Ma se installato, utilizza l'altoparlante del PC. Era l'unico modo che riuscissi a trovare per abilitare il cicalino sotto X:

sudo apt-get install beep

Per abilitare automaticamente all'avvio, basta aggiungere le righe sopra nel tuo ~/.profile, o a livello di sistema a/etc/profile


Per testarlo:

printf '\a'

Beep!

beep

Buzz!


Per abilitare automaticamente un segnale acustico dell'altoparlante del PC all'avvio, devi effettivamente commentare detta linea in /etc/modprobe.d/blacklist.conf per non decommentarla (vuoi disabilitare la blacklist, non viceversa).
z33k,

1
entrambe le soluzioni funzionano su Ubuntu 16.04 Nota: pcspkre bell.oggsono approcci indipendenti. beeptenta di emettere un segnale acustico usando vari approcci, ad es. ioctl(console_fd, KIOCSOUND, period)uso pcspkr(il suono proviene dall'altoparlante del PC sulla scheda madre) mentre il printf '\a'metodo basato su potrebbe funzionare senza di esso usando solo bell.ogg(il suono proviene da normali altoparlanti). Il secondo metodo potrebbe non funzionare fino all'avvio e / o xset b onall'esecuzione del servizio pulseaudio
jfs

L' pactl upload-sample ...era d'oro per me. Qual è il modo per configurare nuovamente il caricamento di esempio in modo permanente?
Ulidtko,

@ulidtko: aggiungi semplicemente quelle linee nella tua ~/.profile, o in tutto il sistema a/etc/profile
MestreLion,

@MestreLion sbagliato. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggin /etc/pulseaudio/default.pa.
Ulidtko,

15

Ho riscontrato questo problema prima. Da quello che ricordo, il problema è che la campana del terminale tenta di suonare un altoparlante interno al computer (come in un desktop di vecchia scuola) ma ai portatili e ad alcuni computer più recenti manca una cosa del genere.

L'unica soluzione che ho trovato in quel momento era sudo apt-get install soxe

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

per esempio

 play -n synth 0.1 sine 880 vol 0.5

prova la mia soluzione: mi piacerebbe sapere se funziona per te!
JoBu1324,

puoi usare anche il test del relatore per questo
Janus Troelsen,

1
Si può anche avere un bel suono di chitarra coraggio: play -q -n synth 2 pluck C5. C5 è la nota.
Pablo A

3

Alla fine ho trovato una soluzione, che non richiede alsamixerun'opzione Beep per PC. Penso di ricordare tutti i miei cambiamenti:

decommenta quanto segue in /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

per questo errore , eseguipactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg


Ho provato questo, mi ha dato Pactl Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda,

Forse questo thread ti aiuterà - se hai mai eseguito pulseaudio come root.
JoBu1324,

Sto avendo un problema diverso, in realtà. Pulseaudio lancia Failed to open module "module-esound-protocol-unix": file not found. Probabilmente non vale la pena discuterne qui poiché sto eseguendo la 13.04, anche se mi piacerebbe poter verificare la tua soluzione.
YodaDaCoda,

Bello, linee leggermente diverse per il 15.04.
VRR,

2

Se hai altoparlanti reali collegati al computer e non ricevi un segnale acustico, è probabile che stai usando compiz. Compiz si affida a pulseaudio che cattura i segnali acustici e li riproduce mentre la metacity ignora la configurazione normale e utilizza libcanberra per riprodurre un segnale acustico. Se funziona con metacità e non è il tuo problema, altrimenti la risposta fornita da htorque è corretta.



2

"Il segnale acustico funziona solo se il tuo PC ha un 'altoparlante'. Molti laptop moderni / piccoli dispositivi non ne hanno uno".

Prova a riprodurre un suono come questo: play xxxxx.wav ho trovato un bel file wav che sembra essere breve e dolce, ma puoi anche sceglierne uno tuo. Funziona per me quando tutto il resto fallito.


Grazie a: tredegar & hk_centos


1

Un approccio alternativo: imposta il tuo xterm / console su "Visual Bell" in modo che quando emette un segnale acustico, la finestra inverti semplicemente i suoi colori per un breve periodo.

Ho una funzione bash chiamata beep per attirare la mia attenzione una volta che un comando è finito.

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

Ed è usato in questo modo

longrun-command ; beep

0

Potrebbe essere in ritardo MA, per il ragazzo in futuro che cerca questo:

printf '\x07'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.