À l'aide de bash, comment puis-je faire en sorte que le haut-parleur de l'ordinateur émette un bip?
Quelque chose comme ce echo 'beepsound' > /dev/pcspkr
serait bien.
À l'aide de bash, comment puis-je faire en sorte que le haut-parleur de l'ordinateur émette un bip?
Quelque chose comme ce echo 'beepsound' > /dev/pcspkr
serait bien.
Réponses:
J'utilise généralement le petit utilitaire beep
installé sur de nombreux systèmes. Cette commande va essayer différentes approches pour créer un son système.
Il y a 3 façons de créer un son à partir de la beep
page de manuel:
La méthode traditionnelle pour produire un bip dans un script shell consiste à écrire un caractère ASCII BEL
( \007
) sur la sortie standard, au moyen d’une commande shell telle que
echo -ne '\007'
Cela ne fonctionne que si la sortie standard du shell appelant est actuellement dirigée vers un terminal quelconque. sinon, le bip ne produira aucun son et pourrait même causer une corruption indésirable dans le fichier vers lequel la sortie est dirigée.
Il existe d'autres moyens de provoquer un bip sonore. Une méthode légèrement plus fiable consiste à ouvrir /dev/tty
et à envoyer votre personnage BEL là-bas. Ceci est robuste contre la redirection d'E / S, mais échoue quand même dans le cas où le script shell souhaitant générer un bip n'a pas de terminal de contrôle, par exemple parce qu'il est exécuté à partir d'un gestionnaire de fenêtres X.
Une troisième approche consiste à vous connecter à votre écran X et à lui envoyer une commande de sonnerie. Cela ne dépend pas d'un terminal Unix, mais nécessite (bien sûr) un affichage X.
beep
va simplement essayer ces 3 méthodes.
beep
commande est la suivante: johnath.com/beep Sous Ubuntu / Debian, vous pouvez l'installer avec apt-get install beep
.
pcspkr
module, chargez-le snd-pcsp
, et vous avez maintenant une carte son alsa qui utilise des astuces classiques pour envoyer le son numérique à votre haut-parleur interne. Les haut-parleurs internes piézoélectriques donnent des résultats médiocres, mais la qualité est tout à fait satisfaisante pour les haut-parleurs internes classiques. De cette façon, vous pouvez être beaucoup plus créatif pour vos bips sonores;)
pcspkr
et snd-pcsp
sont des modules, pas des packages. utilisez modprobe
/ modprobe -r
/ lsmod
pour les manipuler. Pour votre information, ils sont dans le linux-image-something
paquetage, qui est déjà installé, espérons-le (sinon vous n'auriez pas de noyau Linux).
modprobe snd-pcsp
!
Tout simplement en écho \a
ou \07
fonctionne pour moi.
$ echo -e "\a"
Cela nécessitera probablement le pcspkr
chargement du module de noyau. Je n'ai testé cela que sur RHEL, donc YMMV.
Comme Warren l'a souligné dans les commentaires, cela peut ne pas fonctionner s'il est connecté à distance via SSH. Une solution rapide consisterait à rediriger la sortie vers l’un des périphériques TTY (idéalement inutilisé). Par exemple:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkr
c'était suffisant pour activer les bips sonores sous le VT, via printf "\a"
ou beep
utilitaire.
Ubuntu 16.04.1 LTS
REMARQUE: cette solution émet des bips provenant des haut - parleurs et non de la carte mère .
ALSA est livré avec le test de haut-parleur , un générateur de tonalité de test de haut-parleur en ligne de commande, qui peut être utilisé pour générer un bip:
$ speaker-test -t sine -f 1000 -l 1
Voir ce fil arch forum linux .
Cependant, la durée du bip sera arbitraire, mais peut être contrôlée comme suit:
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
Nous pouvons aller plus loin et émettre un bip avec cette fonction:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
qui s'appelle avec des arguments fréquence et durée:
$ _alarm 400 200
Dans cet esprit, il est possible de créer une musique simple avec speaker-test
. Voir ce script shell .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $!
la même chose. Quoi qu'il en soit, la méthode de @ user569825 est plus agréable.
tput bel
parce que terminfo définit bel
comme
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Pour utiliser la carte son si sox
est installé et le haut-parleur du PC sinon:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox
est disponible pour la plupart des distributions.
then
bloc à l'intérieur watch
pour m'avertir lorsqu'une certaine condition était remplie. Me permet même de garder mes écouteurs. C'était très utile pour moi.
sudo -u USER play...
play
utilise pulseaudio, en tant qu'utilisateur. Je suppose que cela dépend de la configuration du système.
Certaines distributions ont des utilitaires de ligne de commande pour y parvenir. Vous pourriez peut-être nous dire sur quelle distro vous êtes, ou chercher (par exemple emerge -s beep
dans gentoo).
Au-delà des utilitaires "disponibles", vous pouvez également créer un script Perl qui émet le bip, il vous suffit simplement d'inclure:
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
Si vous finissez par avoir un bip, essayez ce qui suit:
#! /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"
travaillerais- je en bash au lieu de print "\007
Perl?
printf '\007'
au lieu de echo
.
"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." - Tredegar .
Essayez de jouer un son à la place:
$ play xxxxx.wav
Travaillé pour moi, quand tout le reste a échoué.
Essayer
echo -n Ctrl+ V Ctrl+G
L'inconvénient est que cela ne fonctionnera que lorsque le périphérique de sortie est un terminal. Par conséquent, il est possible que cela ne fonctionne pas dans une tâche cron, par exemple. (Mais si vous êtes root, vous pourrez peut-être effectuer une redirection vers /dev/console
un bip immédiat.)
Sous Linux, des outils tels que, par exemple, beep
peuvent utiliser un ioctl sur le périphérique de la console pour émettre un son donné. Pour être plus précis, beep
utilisera l' KIOCSOUND
ioctl, mais il y a aussi un KDMKTONE
ioctl qui peut être utilisé pour générer du son.
Si je comprends bien, le premier émet un son qui dure jusqu’à ce qu’il soit explicitement annulé, tandis que le second crée un bip d’une durée prédéterminée. Voir la console_ioctl
page de manuel (4) pour plus de détails.
Donc, si vous n'êtes pas satisfait de ce qui se beep
passe, vous pouvez écrire quelques lignes de code pour accéder directement à ces ioctls. En supposant que vous ayez un accès complet à /dev/console
, ce qui pourrait nécessiter des privilèges root.
Dans un terminal, appuyez sur Ctrl+ Gpuis surEnter