Piepton im Shell-Skript funktioniert nicht?


87

Ich möchte einen Signalton in einem Shell-Skript verwenden. Leider funktioniert keine der über Google gefundenen Methoden für mich.

Ich habe es versucht

echo -e '\a'

echo -ne '\007'

und den befehl beepnachdem ich ihn via apt installiert habe.

Was könnte der Grund sein?



Antworten:


93

Erst laufen sudo modprobe pcspkrund dann beepsollte es funktionieren.

Der Grund dafür ist, dass Ubuntu standardmäßig nicht mehr den Hardwaretreiber lädt, der Signaltöne erzeugt.

Wenn dies für Sie funktioniert, können Sie das Laden von pcspkr dauerhaft aktivieren, /etc/modprobe.d/blacklist.confindem Sie die Datei bearbeiten ( gksudo geditmöglicherweise mit) und eine Zeile auskommentieren, die blacklist pcspkrso aussieht:

# hässliches und lautes Geräusch, das alle nervt; dies sollte von a
# nice pulseaudio bing (Ubuntu: # 77010)
# schwarze Liste pcspkr

3
Wenn ich etwas kommentiere, muss blacklist pcspkrich etwas tun modprobe -r pcspkr && modprobe pcspkr, damit es funktioniert. Das Aktivieren des Pieptons ist nicht gleichbedeutend mit dem Aktivieren der akustischen Glocke. Daher sollte askubuntu.com/questions/22168/wie-do-aktivierbar-die-Klemmenglocke noch geöffnet sein.
Daithib8

3
Dies funktioniert nicht für mich in Ubuntu 14.
Cerin

90

Da ich kein Fan des pcspkr-Tons bin, benutze ich einen Ton aus einem der Systemtöne mit dem Paplay-Befehl des installierten pulseaudio-Servers.

Suchen Sie zuerst einen Sound, den Sie mögen (Sie können zum Beispiel / usr / share / sounds nach verfügbaren durchsuchen) und einen Verweis darauf erstellen

export BEEP=/usr/share/sounds/ubuntu/ringtones/Harmonics.ogg

Dann haben Sie es als Befehl zur Verfügung

alias beep='paplay $BEEP'

Jetzt einfach ausführen, beepwann immer Sie es brauchen. Um Sie beispielsweise zu benachrichtigen, wenn ein Befehl ausgeführt wurde:

find . | grep treasure ; beep

1
Kannst du es schaffen, diesen Sound abzuspielen, wenn jemand renntecho -e '\a'
Flimm

Möglicherweise benötigen Sie einen Lesebefehl in einer while-Schleife oder eine andere Bibliothek, die Tastenanschläge überwachen kann.
Yuvilio

2
Dies ist eine großartige Lösung! Jetzt kann ich run-my-long-test-suite.sh; beepStackoverflow lesen, bis das System bereit ist.
Jamesc

3
Nett! Ich benutze export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.oggund alias beep='paplay $BEEP --volume=32768'jetzt funktioniert das gut für mich. (Beachten Sie, dass Sie die Lautstärke mit dem außer Kraft setzen kann beepAlias, zB beep --volume=15000spielt bei Volumen von -12dB.)
leftaroundabout

3
Das Abspielen dieser ogg-Dateien kann zu Latenzzeiten führen, die um ein Vielfaches höher sind als die des internen PC-Lautsprechers. Nicht nur, dass die Latenz sehr variabel erscheint. Ich gebe zu, dass es den meisten Menschen egal ist, aber wenn Sie Echtzeit- oder Echtzeit-Reaktionsfähigkeit benötigen, ist der PC-Lautsprecher wahrscheinlich die beste Option für hörbares Feedback.
H2ONaCl

21

So beheben Sie dieses Problem dauerhaft:

  • Führen Sie aus , und ändern Sie gconf-editordie desktop | gnome | peripherals | keyboard | bell_modeEinstellung von offin, wenn sie vorhanden iston
  • Führen Sie aus , und ändern Sie dconf-editordie org | gnome | settings-daemon | peripherals | keyboard | bell-modeEinstellung von offin, wenn sie vorhanden iston
  • In pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggauf die Datei ~/.xprofile(Sie müssen gnome-control-center-datafür glass.ogg)
  • In [ "$DISPLAY" ] && xset b 100in der Datei~/.bashrc

Der einfachste Weg, diese Lösung zu aktivieren, ist ein Neustart.

Führen Sie den pactlBefehl aus, und führen Sie den xsetBefehl in dem betreffenden Terminal-Fenster aus, um diese Lösung sofort für ein Terminal-Fenster zu implementieren, das bereits geöffnet ist .


Ich habe den pactl upload-sampleBefehl in ein Shell-Skript eingefügt, aber Ihre Methode ist organisierter. Vielen Dank!
JoBu1324

Wenn Sie den pactlBefehl ~/.xprofileeingeben, wird er zu Beginn der GUI-Sitzung ausgeführt.
jdthood

Die dconf-editorVersion der bell-modeEinstellung scheint zu sein org.gnome.settings-daemon.peripherals.keyboard.
LGARZO

@lgarzo: Danke für den Tipp. Ich werde die Antwort aktualisieren.
Jdthood

1
@ Hibou57: Stellen Sie sicher , dass Sie das Paket enthält , glass.ogginstalliert
Janus Troelsen

21

Da dies bei Google eine sehr hoch bewertete Frage ist, füge ich die Schritte hinzu, die ich ausgeführt habe, um den Piepton sowohl in der Konsole als auch in X11 wieder zu aktivieren:


Für die Linux-Konsole ( CTRL+ ALT+ F1... F6):

Warum funktioniert es nicht standardmäßig

Wie bereits beantwortet , ist der pcspkrKerneltreiber für den PC Speaker in Ubuntu auf der Blacklist.

Vorübergehende Aktivierung bis zum Neustart:

sudo modprobe pcspkr

Beim Booten automatisch aktivieren:

sudo nano /etc/modprobe.d/blacklist.conf

(löschen oder kommentieren Sie die pcspkrZeile, indem Sie sie voranstellen #)


Für X11-Terminals (wie die Standardeinstellung gnome-terminal)

Warum funktioniert es nicht standardmäßig

Unter X werden die Beep-Ereignisse wie bei Unity, KDE und Gnome Shell von PulseAudio dank aufgezeichnet module-x11-bell, das standardmäßig unter geladen wird /usr/bin/start-pulseaudio-x11. Und das Soundbeispiel, das PulseAudio bei einem Piepton wiedergibt bell.ogg, ist standardmäßig leer. Zusätzlich kann die Klingellautstärke stummgeschaltet werden.

So aktivieren Sie die aktuelle Sitzung vorübergehend:

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

Es gibt noch andere geeignete Beispiele, die Sie ausprobieren können /usr/share/sounds, z. B. die unter/usr/share/sounds/gnome/default/alerts/

Beachten Sie, dass das beepProgramm nicht wirklich notwendig ist. Wenn es installiert ist, wird der PC-Lautsprecher verwendet. Nur so konnte ich den Summer unter X aktivieren:

sudo apt-get install beep

Um die automatische Aktivierung beim Booten zu aktivieren, fügen Sie einfach die obigen Zeilen in Ihrem ~/.profileoder systemweit unter hinzu/etc/profile


Um es zu testen:

printf '\a'

Signalton!

beep

Summen!


Um einen PC-Lautsprecherton beim Booten automatisch zu aktivieren, müssen Sie diese Zeile in /etc/modprobe.d/blacklist.conf kommentieren und nicht auskommentieren (Sie möchten das Blacklisting deaktivieren, nicht umgekehrt).
16.

1
Beide Lösungen arbeiten auf Ubuntu 16.04 Hinweis: pcspkrund bell.oggsind unabhängige Ansätze. beepversucht mit verschiedenen Methoden zu piepen, z. B. ioctl(console_fd, KIOCSOUND, period)mit pcspkr(der Ton kommt vom PC-Lautsprecher auf der Hauptplatine), während printf '\a'-basierte Methode möglicherweise nur mit funktioniert bell.ogg(der Ton kommt von normalen Lautsprechern). Die zweite Methode funktioniert möglicherweise erst, wenn der pulseaudio-Dienst gestartet und / oder ausgeführt xset b onwird
jfs

Das pactl upload-sample ...war golden für mich. Wie kann das Laden der Probe dauerhaft konfiguriert werden?
Ulidtko

@ulidtko: Fügen Sie diese Zeilen einfach in Ihre ~/.profileoder systemweit um/etc/profile
MestreLion

@MestreLion falsch. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggin /etc/pulseaudio/default.pa.
ulidtko

15

Ich bin schon einmal auf dieses Problem gestoßen. Soweit ich mich erinnere, besteht das Problem darin, dass die Terminalklingel versucht, einen internen Computerlautsprecher anzurufen (wie bei einem Desktop der alten Schule), aber auf Laptops und einigen neueren Computern fehlt so etwas.

Die einzige Lösung, die ich damals fand, war sudo apt-get install soxund

play -n synth <duration in seconds> sine <freq in Hz> vol <volume (0-1)>

z.B

 play -n synth 0.1 sine 880 vol 0.5

versuchen Sie meine Lösung - ich würde gerne wissen, ob es bei Ihnen funktioniert!
JoBu1324

Sie können auch hierfür den Sprechertest verwenden
Janus Troelsen

1
Sie können auch einen schönen Gitarre zupft Ton haben: play -q -n synth 2 pluck C5. C5 ist die Note.
Pablo A

3

Endlich habe ich eine Lösung gefunden, für die keine alsamixerPC-Beep-Option erforderlich ist . Ich denke, ich erinnere mich an alle meine Änderungen:

Kommentar in /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

Führen Sie nach diesem Fehler auspactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg


Versuchte dies, Pakt gab mir Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda

Vielleicht hilft dieser Thread - wenn Sie jemals pulseaudio als root ausgeführt haben.
JoBu1324

Eigentlich habe ich ein anderes Problem. Pulseaudio wirft Failed to open module "module-esound-protocol-unix": file not found. Wahrscheinlich ist es nicht wert, hier zu diskutieren, da ich 13.04 laufen habe, obwohl ich gerne in der Lage wäre, Ihre Lösung zu verifizieren.
YodaDaCoda

Schöne, nur leicht abweichende Zeilen für den 15.04.
VRR,

2

Wenn tatsächlich Lautsprecher an den Computer angeschlossen sind und Sie keinen Signalton hören, liegt dies wahrscheinlich daran, dass Sie compiz verwenden. Compiz verlässt sich darauf, dass pulseaudio die Signaltöne abfängt und wiedergibt, während die Metacity das übliche Setup umgeht und libcanberra verwendet, um einen Signalton abzuspielen. Wenn es mit Metacity und nicht mit Compiz funktioniert, ist das Ihr Problem, andernfalls ist die Antwort, die htorque gab, richtig.



2

"Der Signalton funktioniert nur, wenn Ihr PC über einen Lautsprecher verfügt. Viele moderne Laptops / kleine Geräte haben keinen."

Versuchen Sie, einen Sound wie diesen abzuspielen : play xxxxx.wav Ich habe eine nette WAV- Datei gefunden, die kurz und bündig zu sein scheint, aber Sie können auch Ihre eigene auswählen. Funktioniert für mich, wenn alles andere fehlgeschlagen ist.


Vielen Dank an: tredegar & hk_centos


1

Ein alternativer Ansatz - setzen Sie Ihr xterm / console auf "Visual Bell", so dass das Fenster bei einem Signalton für kurze Zeit einfach die Farben umkehrt.

Ich habe eine Bash-Funktion namens Beep, um meine Aufmerksamkeit zu erregen, sobald ein Befehl beendet ist.

beep ()  { while true; do  echo -en '\a'; sleep 1; done }

Und so wird es benutzt

longrun-command ; beep

0

Es könnte zu spät sein, ABER für den Kerl in der Zukunft, der danach sucht:

printf '\x07'
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.