Wie kann ich meinen PC-Lautsprecher piepen lassen?


Antworten:


124

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 :

  1. 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.

  2. 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.

  3. 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.


9
Die Homepage zum beepBefehl lautet: johnath.com/beep Unter Ubuntu / Debian können Sie es mit installieren apt-get install beep.
Riccardo Murri

14
Unter Linux gibt es eine vierte Methode zum Signalton: Entladen Sie das 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
Pieptöne werden

8
@isomorphismes: 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).
BatchyX

3
Signalton arbeitet in der Regel das Feld für debian, aber ich brauchte das Modul für diese Arbeit auf Ubuntu laden
mchid

4
Wie mchid sagte, funktioniert nach dem Hinzufügen des Moduls modprobe snd-pcspjetzt ein Piepton!
Lepre

73

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.

AKTUALISIEREN

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

5
Wenn Sie ein X-Terminal oder ein SSH verwenden, kann dies dazu führen, dass das Terminal blinkt, da viele Programme vom Typ xterm / vt100 so konfiguriert sind, dass sie dies für BEL-Zeichen tun.
Warren Young

2
Dies ist sinnvoll, hat aber bei mir unter Ubuntu 12.04 nicht funktioniert.
Isomorphismen

2
@isomorphismes: Das ist für Konsolen, nicht für X11-Terminals. Bei Signaltönen unter X können Sie dies versuchen: askubuntu.com/a/587311/11015
MestreLion

1
@isomorphismes: Ich verwende auch Ubuntu 12.04 und für mich sudo modprobe pcspkrwar es genug, um Signaltöne unter dem VT zu aktivieren, entweder über printf "\a"oder über das beepDienstprogramm.
MestreLion

3
Keine der Methoden funktioniert für mich. Ubuntu 16.04.1 LTS
Ar2015

67

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 .


1
Ihre Funktion als timeout ${2} speaker-test --frequency ${1} --test sine
Einzeiler

1
Es gibt keine wirkliche Notwendigkeit, pid zu retten, macht einfach speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! das Gleiche. Wie auch immer, @ user569825s Methode ist besser.
Erm3nda

28
tput bel

weil terminfo definiert belals

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)

17

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.


2
+1 Ich wusste nicht, dass das Spiel diese Funktion hat. Ich habe dies in einem 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.
andyortlieb

Von einer Bash Sh Play wird wahrscheinlich brauchensudo -u USER play...
Intika

playVerwendet auf meinem System pulseaudio als Benutzer. Ich denke, es hängt von der Systemkonfiguration ab.
Alexander

13

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

Ich möchte, dass meine Fragen distro-agnostisch bleiben. Würde es echo -e "\007"in Bash statt print "\007in Perl funktionieren ?
Stefan

1
@ Stefan - Beep ist so ziemlich "universal". Sie können jedoch distro-agnostisch bleiben, indem Sie "echo -e" \ a "oder" echo -e "\ 07" verwenden. Prost!
Wurmintrude

2
Es wäre portabler zu benutzen printf '\007'als echo.
Dennis Williamson


2

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.)


1

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.


-1

Drücken Sie in einem Terminal Ctrl+ Gund dannEnter


1
In meinem Terminal (Gnome-Terminal) funktioniert es ohne die Eingabetaste. Nur als Test des PC-Lautsprechers sieht das für mich gut aus. In Skripten ist es jedoch völlig nutzlos.
Palec

Überraschende Abstimmungen. Dies funktioniert auf einigen PCs, jedoch möglicherweise nicht auf allen.
Zzzach ...

Es funktioniert nicht auf RXVT, URXVT, XTERM, LXTERM oder LXTERMINAL. Sollte mein Terminal nicht zumindest blinken, wenn es eine visuelle Klingel hat?
Willem

Es funktioniert auf xterm
Chris
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.