Wie kann ich mit bash den PC-Lautsprecher piepen lassen?
Sowas echo 'beepsound' > /dev/pcspkrwäre schön.
Wie kann ich mit bash den PC-Lautsprecher piepen lassen?
Sowas echo 'beepsound' > /dev/pcspkrwäre schön.
Antworten:
Normalerweise verwende ich das kleine Dienstprogramm, beepdas auf vielen Systemen installiert ist. Dieser Befehl versucht verschiedene Ansätze, um einen Systemsound zu erzeugen.
Es gibt drei Möglichkeiten, einen Sound aus der beepManpage zu erstellen :
Die traditionelle Methode zum Erzeugen eines Pieptons in einem Shell-Skript besteht darin, ein ASCII BEL( \007) -Zeichen mithilfe eines Shell-Befehls wie z. B. in die Standardausgabe zu schreiben
echo -ne '\007'
Dies funktioniert nur, wenn die Standardausgabe der aufrufenden Shell derzeit an ein Endgerät geleitet wird. Andernfalls wird durch den Signalton kein Ton ausgegeben, und es kann sogar zu einer unerwünschten Beschädigung der Datei kommen, auf die sich die Ausgabe bezieht.
Es gibt andere Möglichkeiten, ein Piepton zu verursachen. Eine etwas zuverlässigere Methode besteht darin /dev/tty, Ihren BEL-Charakter zu öffnen und dorthin zu senden. Dies ist robust gegen E / A-Umleitung, schlägt jedoch immer noch fehl, wenn das Shell-Skript, das einen Signalton erzeugen möchte, kein steuerndes Terminal hat, z. B. weil es von einem X Window Manager ausgeführt wird.
Ein dritter Ansatz besteht darin, eine Verbindung zu Ihrem X-Display herzustellen und ihm einen Klingelbefehl zu senden. Dies hängt nicht von einem Unix-Endgerät ab, sondern erfordert (natürlich) eine X-Anzeige.
beep versuche einfach diese 3 Methoden.
beepBefehl lautet: johnath.com/beep Unter Ubuntu / Debian können Sie es mit installieren apt-get install beep.
pcspkrModul, laden Sie das snd-pcsp, und Sie haben jetzt eine Alsa-Soundkarte, die mit altmodischen Tricks Ihren internen Lautsprecher mit digitalem Sound versorgt. Mit piezoelektrischen internen Lautsprechern werden miese Ergebnisse erzielt. Bei klassischen internen Lautsprechern ist die Qualität jedoch recht gut. Auf diese Weise können Sie viel kreativer für Ihre
pcspkrund snd-pcspsind Module, keine Pakete. Verwendung modprobe/ modprobe -r/ lsmodsie zu manipulieren. Zu Ihrer Information, sie sind in dem linux-image-somethingPaket enthalten, das hoffentlich bereits installiert ist (ansonsten hätten Sie keinen Linux-Kernel).
modprobe snd-pcspjetzt ein Piepton!
Einfach widerhallen \aoder \07funktioniert bei mir.
$ echo -e "\a"
Dies erfordert wahrscheinlich das pcspkrLaden des Kernelmoduls. Ich habe das nur auf RHEL getestet, also YMMV.
Wie Warren in den Kommentaren betonte, funktioniert dies möglicherweise nicht, wenn Sie sich über SSH remote anmelden. Eine schnelle Problemumgehung wäre, die Ausgabe auf eines der TTY-Geräte umzuleiten (im Idealfall eines, das nicht verwendet wird). Z.B:
$ echo -en "\a" > /dev/tty5
sudo modprobe pcspkrwar es genug, um Signaltöne unter dem VT zu aktivieren, entweder über printf "\a"oder über das beepDienstprogramm.
Ubuntu 16.04.1 LTS
HINWEIS: Bei dieser Lösung werden Signaltöne über die Lautsprecher ausgegeben , nicht über das Motherboard .
ALSA wird mit Speaker-Test geliefert , einem Befehlszeilen-Testtongenerator, mit dem ein Piepton erzeugt werden kann:
$ speaker-test -t sine -f 1000 -l 1
Siehe diesen Arch Linux Forum Thread .
Die Signaltondauer ist jedoch beliebig, kann jedoch wie folgt gesteuert werden:
$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid
Wir können noch einen Schritt weiter gehen und mit dieser Funktion einen Piepton ausgeben:
_alarm() {
( \speaker-test --frequency $1 --test sine )&
pid=$!
\sleep 0.${2}s
\kill -9 $pid
}
welches mit Häufigkeits- und Dauerargumenten aufgerufen wird:
$ _alarm 400 200
In diesem Sinne ist es möglich, mit einfache Musik zu erstellen speaker-test. Siehe dieses Shell-Skript .
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! das Gleiche. Wie auch immer, @ user569825s Methode ist besser.
tput bel
weil terminfo definiert belals
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Zur Verwendung der Soundkarte, falls soxinstalliert, und des PC-Lautsprechers, falls nicht:
$ play -q -n synth 0.1 sin 880 || echo -e "\a"
sox ist für die meisten Distributionen verfügbar.
thenBlock innerhalb von verwendet watch, um mich zu benachrichtigen, sobald eine bestimmte Bedingung erfüllt wurde. Ich kann sogar meine Kopfhörer anhalten. Das war sehr nützlich für mich.
sudo -u USER play...
playVerwendet auf meinem System pulseaudio als Benutzer. Ich denke, es hängt von der Systemkonfiguration ab.
Einige Distributionen verfügen über Befehlszeilenprogramme, um dies zu erreichen. Vielleicht können Sie uns sagen, in welcher Distribution Sie sich befinden oder suchen (z emerge -s beep. B. in gentoo).
Über die "verfügbaren" Utils hinaus können Sie auch ein Perl-Skript erstellen, das den Piepton ausgibt. Dazu müssen Sie lediglich Folgendes tun:
<SomeCodeBefore>
print "\007";
<SomeCodeAfter>
Wenn Sie dennoch einen Signalton hören, probieren Sie Folgendes aus:
#! /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"in Bash statt print "\007in Perl funktionieren ?
printf '\007'als echo.
"Der Piepton funktioniert nur, wenn Ihr PC über einen" Lautsprecher "verfügt. Viele moderne Laptops / kleine Geräte haben keinen." - Tredegar .
Versuchen Sie stattdessen einen Sound abzuspielen:
$ play xxxxx.wav
Arbeitete für mich, als alles andere fehlschlug.
Versuchen
echo -n Ctrl+ V Ctrl+G
Der Nachteil ist, dass dies nur funktioniert, wenn es sich bei dem Ausgabegerät um ein Terminal handelt, sodass es beispielsweise in einem Cron-Job möglicherweise nicht funktioniert. (Wenn Sie jedoch Root sind, können Sie möglicherweise auf umleiten, /dev/consoleum sofort einen Piepton zu erhalten.)
Unter Linux können Tools wie beepioctl auf dem Konsolengerät verwenden, um einen bestimmten Sound auszugeben. Um genauer zu sein, beepwird das KIOCSOUNDioctl verwendet, aber es gibt auch ein KDMKTONEioctl, mit dem Ton erzeugt werden kann.
Soweit ich weiß, startet der erste Ton einen Ton, der so lange anhält, bis er explizit gelöscht wird, während der zweite einen Piepton von vorbestimmter Dauer erzeugt. Siehe die console_ioctl(4) man - Seite für weitere Einzelheiten.
Wenn Sie also mit den beepVorgängen unzufrieden sind , können Sie einige Codezeilen schreiben, um direkt auf diese Ioctls zuzugreifen. Vorausgesetzt, Sie haben vollen Zugriff auf /dev/console, wofür möglicherweise Root-Rechte erforderlich sind.
Drücken Sie in einem Terminal Ctrl+ Gund dannEnter