Wie kann ich mit bash den PC-Lautsprecher piepen lassen?
Sowas echo 'beepsound' > /dev/pcspkr
wäre schön.
Wie kann ich mit bash den PC-Lautsprecher piepen lassen?
Sowas echo 'beepsound' > /dev/pcspkr
wäre schön.
Antworten:
Normalerweise verwende ich das kleine Dienstprogramm, beep
das 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 beep
Manpage 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.
beep
Befehl lautet: johnath.com/beep Unter Ubuntu / Debian können Sie es mit installieren apt-get install beep
.
pcspkr
Modul, 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
pcspkr
und snd-pcsp
sind Module, keine Pakete. Verwendung modprobe
/ modprobe -r
/ lsmod
sie zu manipulieren. Zu Ihrer Information, sie sind in dem linux-image-something
Paket enthalten, das hoffentlich bereits installiert ist (ansonsten hätten Sie keinen Linux-Kernel).
modprobe snd-pcsp
jetzt ein Piepton!
Einfach widerhallen \a
oder \07
funktioniert bei mir.
$ echo -e "\a"
Dies erfordert wahrscheinlich das pcspkr
Laden 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 pcspkr
war es genug, um Signaltöne unter dem VT zu aktivieren, entweder über printf "\a"
oder über das beep
Dienstprogramm.
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 bel
als
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
Zur Verwendung der Soundkarte, falls sox
installiert, 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.
then
Block 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...
play
Verwendet 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 "\007
in 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/console
um sofort einen Piepton zu erhalten.)
Unter Linux können Tools wie beep
ioctl auf dem Konsolengerät verwenden, um einen bestimmten Sound auszugeben. Um genauer zu sein, beep
wird das KIOCSOUND
ioctl verwendet, aber es gibt auch ein KDMKTONE
ioctl, 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 beep
Vorgä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