Le bip dans le script shell ne fonctionne pas?

87

J'aimerais utiliser un bip sonore 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 beepaprès l'avoir installée via apt.

Quelle pourrait être la raison?

NDA
la source

Réponses:

93

Tout d'abord sudo modprobe pcspkr, puis beepdevrait 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, pour permettre le chargement de pcspkr, éditez le /etc/modprobe.d/blacklist.conffichier de façon permanente (en utilisant gksudo geditpeut-être) et mettez en commentaire la ligne qui dit blacklist pcspkr:

Bruit # laid et fort, sur les nerfs de tout le monde; cela devrait être fait par un
# nice pulseaudio bing (Ubuntu: # 77010)
# liste noire pcspkr
8128
la source
3
Si je commente, blacklist pcspkrje dois le faire modprobe -r pcspkr && modprobe pcspkrpour que cela fonctionne. Obtenir un bip sonore au travail n'est pas la même chose que faire sonner la cloche audible et donc askubuntu.com/questions/22168/how-do-i-enable-the-terminal-bell devrait encore être ouverte.
daithib8
3
Cela ne fonctionne pas pour moi dans Ubuntu 14.
Cerin
90

N'étant pas un fan du bip pcspkr, j'utilise un bip d'un des sons du 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 en tant que commande

alias beep='paplay $BEEP'

Maintenant, lancez- beepvous quand vous en avez besoin. Par exemple, pour vous alerter quand une commande est terminée:

find . | grep treasure ; beep
Yuvilio
la source
1
Pouvez-vous l'obtenir pour jouer ce son quand quelqu'un courtecho -e '\a'
Flimm
Vous aurez peut-être besoin d'une commande de lecture dans une boucle while ou d'une autre bibliothèque capable de contrôler les frappes au clavier.
Yuvilio
2
C'est une excellente solution! Maintenant, je peux faire run-my-long-test-suite.sh; beepet lire stackoverflow jusqu'à ce que le système soit prêt.
Jamesc
3
Agréable! J'utilise export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.ogget alias beep='paplay $BEEP --volume=32768'maintenant, ça marche bien pour moi. (Notez que vous pouvez remplacer le volume avec l' beepalias, par exemple, beep --volume=15000pour un volume de -12 dB.)
leftaroundabout
3
La lecture de ces fichiers ogg peut entraîner des ordres de grandeur de latence supérieurs à ceux du bip du haut-parleur interne du PC. Non seulement le temps de latence semble très variable. Je reconnais que la plupart des gens s'en moquent, mais lorsque vous avez besoin d'une réactivité en temps réel ou quasi réel, le haut-parleur du PC est probablement la meilleure option pour les retours sonores.
H2ONaCl
21

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

  • Exécuter gconf-editoret si le desktop | gnome | peripherals | keyboard | bell_modeparamètre est présent changer ensuite de offlaon
  • Exécuter dconf-editoret si le org | gnome | settings-daemon | peripherals | keyboard | bell-modeparamètre est présent changer ensuite de offlaon
  • Ajouter pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggau fichier ~/.xprofile(vous avez besoin gnome-control-center-datapour glass.ogg)
  • Ajouter [ "$DISPLAY" ] && xset b 100au 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 pactlcommande et exécutez la xsetcommande dans la fenêtre de terminal en question.

jdthood
la source
Je mets la pactl upload-samplecommande dans un script shell, mais votre méthode est plus organisée. Merci!
JoBu1324
Si vous entrez la pactlcommande, ~/.xprofileelle sera exécutée au début de la session de l'interface graphique.
Jdthood
La dconf-editorversion du bell-modeparamètre semble être org.gnome.settings-daemon.peripherals.keyboard.
Lgarzo
@lgarzo: Merci pour le tuyau. Je vais mettre à jour la réponse.
jdthood
1
@ Hibou57: Assurez - vous que vous avez le paquet contenant glass.ogginstallé
Janus Troelsen
21

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épondu , le pcspkrpilote du noyau du haut-parleur PC est sur liste noire 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 pcspkrligne en l'ajoutant au début #)


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

Pourquoi ça ne marche pas par défaut

Sous X, comme avec Unity, KDE, Gnome Shell, les événements de bip 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 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

Vous pouvez essayer d’autres échantillons appropriés /usr/share/sounds, par exemple, consultez ceux du/usr/share/sounds/gnome/default/alerts/

Notez que le beepprogramme n'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 activer automatiquement au démarrage, il suffit d' ajouter les lignes ci - dessus dans votre ~/.profile, ou tout le système à/etc/profile


Pour le tester:

printf '\a'

Bip!

beep

Bourdonner!

MestreLion
la source
Pour activer automatiquement un bip de haut-parleur au démarrage, vous devez commenter ladite ligne dans /etc/modprobe.d/blacklist.conf sans la décommenter (vous voulez désactiver la liste noire, et non l'inverse).
Z33K
1
les deux solutions fonctionnent sur Ubuntu 16.04 Note: pcspkret bell.oggsont des approches indépendantes. beeptente d'émettre un bip en utilisant diverses approches, par exemple, ioctl(console_fd, KIOCSOUND, period)utiliser pcspkr(le son provient du haut-parleur de l'ordinateur sur la carte mère), tandis que la printf '\a'méthode basée sur peut fonctionner sans utiliser uniquement bell.ogg(le son provient de haut-parleurs ordinaires). La deuxième méthode peut ne pas fonctionner tant que le service pulseaudio n'est pas démarré et / ou xset b onn'est pas lancé
jfs
Le pactl upload-sample ...était doré pour moi. Quel est le moyen de configurer de manière permanente le chargement de l'échantillon à nouveau?
ulidtko
@ulidtko: Ajoutez simplement ces lignes dans votre ~/.profileou dans l'ensemble du système à l' /etc/profile
adresse
@MestreLion faux. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggdans /etc/pulseaudio/default.pa.
ulidtko
15

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 je trouvais à l'époque était sudo apt-get install soxet

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
YodaDaCoda
la source
essayez ma solution - j'aimerais savoir si cela fonctionne pour vous!
JoBu1324
vous pouvez aussi utiliser test de l'enceinte pour ce test
Janus Troelsen le
1
Vous pouvez également avoir un bon ton de plumer guitare: play -q -n synth 2 pluck C5. C5 est la note.
Pablo Un
3

J'ai finalement trouvé une solution qui ne nécessite pas l' alsamixeroption 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 bug , lancezpactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

JoBu1324
la source
J'ai essayé, pactl m'a donné Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda
Peut - être que ce fil vous aidera - si vous avez déjà utilisé pulseaudio en tant que root.
JoBu1324
J'ai un problème différent, en fait. Pulseaudio jette Failed to open module "module-esound-protocol-unix": file not found. Cela ne vaut probablement pas la peine de discuter ici puisque je suis sous la version 13.04, bien que j'aimerais pouvoir vérifier votre solution.
YodaDaCoda
Nice, juste des lignes légèrement différentes pour 15.04.
VRR
2

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.

Travis Watkins
la source
2

"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 joli fichier wav qui semble être court et sympathique , mais vous pouvez également choisir le vôtre. Ça marche pour moi quand tout le reste a échoué.


Merci à: tredegar & hk_centos

Vue elliptique
la source
1

Une approche alternative - réglez votre xterm / console sur "Visual Bell" de sorte que la fenêtre inversera simplement ses couleurs pendant un bref moment.

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
Criggie
la source
0

C'est peut-être trop tard, MAIS, pour le gars à la recherche de ceci:

printf '\x07'
Schalk
la source