web-dev-qa-db-fra.com

Le bip dans le script Shell ne fonctionne pas?

J'aimerais utiliser un bip dans un script Shell. Malheureusement, aucune des méthodes que j'ai trouvées via Google ne fonctionne pour moi.

J'ai essayé

echo -e '\a'

echo -ne '\007'

et la commande beep après l'avoir installée via apt.

Quelle pourrait être la raison?

85
NES

Commencez par exécuter Sudo modprobe pcspkr puis beep devrait fonctionner.

La raison en est que, par défaut, Ubuntu ne charge plus le pilote matériel qui émet des bips.

Si cela fonctionne pour vous, alors pour permettre le chargement de pcspkr, éditez de manière permanente le fichier /etc/modprobe.d/blacklist.conf (en utilisant gksudo gedit peut-être) et mettez en commentaire la ligne qui dit blacklist pcspkr afin qu'elle ressemble à ceci:

Bruit # laid et fort, sur les nerfs de tout le monde; cela devrait être fait par 
 # Nice Nice pulseaudio bing (Ubuntu: # 77010) 
 # blacklist pcspkr
93
8128

N'étant pas un fan du bip pcspkr, j'utilise un bip d'un des sons système avec la commande paplay du serveur pulseaudio installé.

Recherchez d’abord un son que vous aimez (vous pouvez par exemple parcourir/usr/share/sounds) et créez une référence à celui-ci.

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

Ensuite, ayez-le disponible comme commande

alias beep='paplay $BEEP'

Maintenant, lancez simplement beep chaque fois que vous en avez besoin. Par exemple, pour vous alerter quand une commande est terminée:

find . | grep treasure ; beep
90
yuvilio

Comme il s'agit d'une question très bien notée sur Google, j'ajouterai les étapes que j'ai suivies pour réactiver le bip dans la console et X11:


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

Pourquoi ça ne marche pas par défaut

Comme déjà répond , le pilote du noyau pcspkrpour le haut-parleur PC est mis à l'index dans Ubuntu.

Activer temporairement jusqu'au redémarrage:

Sudo modprobe pcspkr

Activer automatiquement au démarrage:

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

(supprimez ou commentez la ligne pcspkren la préfixant avec #)


Pour les terminaux X11 (tels que le gnome-terminal par défaut)

Pourquoi ça ne marche pas par défaut

Sous X, comme avec Unity, KDE, Gnome Shell, les événements sonores sont capturés par PulseAudio grâce à module-x11-bell, qui est chargé par défaut à /usr/bin/start-pulseaudio-x11. Et l'échantillon sonore que PulseAudio joue au bip, bell.ogg, est vide par défaut. De plus, le volume de la sonnerie peut être mis en sourdine.

Pour activer temporairement la session en cours,

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

Il existe d'autres exemples appropriés que vous pouvez essayer à /usr/share/sounds, par exemple, consultez ceux de /usr/share/sounds/gnome/default/alerts/

Notez que le programme beepn'est pas vraiment nécessaire. Mais s'il est installé, il utilise le haut-parleur du PC. C'était le seul moyen que je pouvais trouver pour activer la sonnerie sous X:

Sudo apt-get install beep

Pour l'activer automatiquement au démarrage, ajoutez simplement les lignes ci-dessus dans votre ~/.profile ou à l'échelle du système à /etc/profile


Pour le tester:

printf '\a'

Bip!

beep

Buzz!

21
MestreLion

Pour résoudre ce problème de manière persistante:

  • Exécutez gconf-editor et si le paramètre desktop | gnome | peripherals | keyboard | bell_mode est présent, remplacez-le de off par on
  • Exécutez dconf-editor et si le paramètre org | gnome | settings-daemon | peripherals | keyboard | bell-mode est présent, remplacez-le de off par on
  • Ajoutez pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.ogg dans le fichier ~/.xprofile (vous avez besoin de gnome-control-center-data pour glass.ogg)
  • Ajoutez [ "$DISPLAY" ] && xset b 100 au fichier ~/.bashrc

Le moyen le plus simple d'activer cette solution consiste à redémarrer.

De plus, pour implémenter cette solution immédiatement pour une fenêtre de terminal déjà ouverte, exécutez la commande pactl et la commande xset dans la fenêtre de terminal en question.

21
jdthood

J'ai rencontré ce problème auparavant. D'après mes souvenirs, le problème est que la sonnette du terminal essaie de faire sonner le haut-parleur interne d'un ordinateur (comme sur un ordinateur de bureau à l'ancienne), mais les ordinateurs portables et certains ordinateurs plus récents manquent une telle chose.

La seule solution que j'ai trouvée à l'époque était de Sudo apt-get install sox et

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

par exemple.

 play -n synth 0.1 sine 880 vol 0.5
15
YodaDaCoda

J'ai finalement trouvé une solution qui ne nécessite pas alsamixer pour avoir une option PC Beep. Je pense que je me souviens de tous mes changements:

décommentez ce qui suit dans /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

par ce bogue , lancez pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

2
JoBu1324
2
htorque

Si vous avez des haut-parleurs connectés à l'ordinateur et que vous n'entendez pas de bip, c'est probablement parce que vous utilisez Compiz. Compiz compte sur pulseaudio pour capter les bips et les jouer pendant que Métacity contourne la configuration habituelle et utilise libcanberra pour émettre un bip. Si cela fonctionne avec metacity et non compiz, c’est votre problème, sinon la réponse fournie par torque est correcte.

2
Travis Watkins

" Le bip ne fonctionne que si votre PC est équipé d'un" haut-parleur ". De nombreux ordinateurs portables/petits appareils modernes n'en ont pas".

Essayez de jouer un son comme celui-ci: play xxxxx.wav J'ai trouvé un fichier Nice wav qui semble être court et sympathique, mais vous pouvez choisissez le vôtre aussi. Ça marche pour moi quand tout le reste a échoué.


Merci à: tredegar & hk_centos

2
Elliptical view

Une approche alternative - réglez votre xterm/console sur "Visual Bell" de sorte que, quand il émettra un bip, la fenêtre inversera simplement ses couleurs pendant un court instant.

J'ai une fonction bash appelée beep pour attirer mon attention une fois la commande terminée.

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

Et il est utilisé de cette façon

longrun-command ; beep
1
Criggie