Sygnał dźwiękowy w skrypcie powłoki nie działa?

87

Chciałbym użyć dźwięku beep w skrypcie powłoki. Niestety żadna z metod, które znalazłem za pośrednictwem Google, nie działa dla mnie.

próbowałem

echo -e '\a'

echo -ne '\007'

i polecenie beeppo instalacji przez apt.

Co może być przyczyną?

NES
źródło

Odpowiedzi:

93

Najpierw uruchom, sudo modprobe pcspkra następnie beeppowinno działać.

Nie dzieje się tak dlatego, że domyślnie Ubuntu nie ładuje już sterownika sprzętowego generującego sygnały dźwiękowe.

Jeśli to zadziała, to włącz ładowanie pcspkr na stałe edytuj /etc/modprobe.d/blacklist.confplik (za pomocą gksudo geditbyć może) i skomentuj wiersz, który mówi blacklist pcspkr, że wygląda to tak:

# brzydki i głośny hałas, który działa na nerwy wszystkich; powinno to zostać wykonane przez
# nice pulseaudio bing (Ubuntu: # 77010)
# czarna lista pcspkr
8128
źródło
3
Jeśli komentuję, blacklist pcspkrmuszę to zrobić modprobe -r pcspkr && modprobe pcspkr, aby działało. Również uruchomienie sygnału dźwiękowego do pracy nie jest tym samym, co uruchomienie dźwiękowego dzwonka, dlatego askubuntu.com/questions/22168/how-do-i-enable-the-terminal-bell powinno być nadal otwarte.
daithib8
3
To nie działa dla mnie w Ubuntu 14.
Cerin
90

Nie będąc fanem sygnału dźwiękowego pcspkr, używam sygnału dźwiękowego z jednego z dźwięków systemowych za pomocą polecenia paplay zainstalowanego serwera pulseaudio.

Najpierw znajdź dźwięk, który ci się podoba (możesz na przykład przeglądać / usr / share / sound dla niektórych dostępnych) i utworzyć odniesienie

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

Następnie przygotuj go jako polecenie

alias beep='paplay $BEEP'

Teraz po prostu biegnij, beepkiedy go potrzebujesz. Na przykład, aby ostrzec Cię, gdy polecenie zostanie zakończone:

find . | grep treasure ; beep
yuvilio
źródło
1
Czy potrafisz go odtworzyć, gdy ktoś uciekaecho -e '\a'
Flimm
Może być potrzebne polecenie odczytu w pętli while lub inna biblioteka, która może monitorować naciśnięcia klawiszy.
yuvilio,
2
To świetne rozwiązanie! Teraz mogę zrobić run-my-long-test-suite.sh; beepi odczytać przepływ stosu, aż system będzie gotowy.
jamesc
3
Miły! Używam export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.oggi alias beep='paplay $BEEP --volume=32768'teraz to działa dobrze dla mnie. (Pamiętaj, że możesz zmienić głośność za pomocą beepaliasu, np. beep --volume=15000Gra na głośności -12dB.)
lewy róg około
3
Odtwarzanie tych plików ogg może spowodować, że opóźnienia będą o rząd wielkości większe niż w przypadku sygnału dźwiękowego wewnętrznego głośnika komputera. Nie tylko to, że opóźnienie wydaje się bardzo zmienne. Przyjmuję do wiadomości, że większości ludzi to nie obchodzi, ale kiedy potrzebujesz odpowiedzi w czasie rzeczywistym lub zbliżonym do czasu rzeczywistego, głośnik PC jest prawdopodobnie najlepszą opcją dla słyszalnej informacji zwrotnej.
H2ONaCl
21

Aby trwale rozwiązać ten problem:

  • Uruchom, gconf-editora jeśli desktop | gnome | peripherals | keyboard | bell_modeustawienie jest obecne, zmień je z offnaon
  • Uruchom, dconf-editora jeśli org | gnome | settings-daemon | peripherals | keyboard | bell-modeustawienie jest obecne, zmień je z offnaon
  • Dodaj pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggdo pliku ~/.xprofile(trzeba gnome-control-center-dataza glass.ogg)
  • Dodaj [ "$DISPLAY" ] && xset b 100do pliku~/.bashrc

Najprostszym sposobem na aktywację tego rozwiązania jest ponowne uruchomienie.

Ponadto, aby natychmiast wdrożyć to rozwiązanie dla okna terminala, które jest już otwarte, uruchom pactlpolecenie i uruchom xsetpolecenie w odpowiednim oknie terminala.

jdthood
źródło
Umieszczam pactl upload-samplepolecenie w skrypcie powłoki, ale twoja metoda jest bardziej zorganizowana. Dzięki!
JoBu1324,
Jeśli wstawisz pactlpolecenie ~/.xprofile, zostanie ono wykonane na początku sesji GUI.
jdthood,
dconf-editorWersja bell-modeustawienie wydaje się być org.gnome.settings-daemon.peripherals.keyboard.
lgarzo
@lgarzo: Dzięki za wskazówkę. Zaktualizuję odpowiedź.
jdthood,
1
@ Hibou57: Upewnij się, że masz glass.oggzainstalowany pakiet zawierający
Janus Troelsen
21

Ponieważ jest to bardzo wysoko oceniane pytanie w Google, dodam kroki, które zrobiłem, aby ponownie włączyć dźwięk w konsoli i X11:


W przypadku konsoli Linux ( CTRL+ ALT+ F1... F6):

Dlaczego nie działa domyślnie

Jak już odpowiedziano , pcspkrsterownik jądra dla PC Speaker znajduje się na czarnej liście w Ubuntu.

Tymczasowo włączaj do ponownego uruchomienia:

sudo modprobe pcspkr

Automatycznie włącz przy rozruchu:

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

(usuń lub skomentuj pcspkrwiersz, poprzedzając go znakiem #)


Dla terminali X11 (takich jak domyślne gnome-terminal)

Dlaczego nie działa domyślnie

Pod X, podobnie jak w przypadku korzystania z Unity, KDE, Gnome Shell, zdarzenia dźwiękowe są przechwytywane przez PulseAudio dzięki module-x11-bell, który jest domyślnie ładowany o /usr/bin/start-pulseaudio-x11. Próbka dźwięku PulseAudio odtwarzana jest po sygnale, bell.oggdomyślnie jest pusta. Dodatkowo głośność dzwonka może być wyciszona.

Aby tymczasowo włączyć bieżącą sesję,

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

Istnieją inne odpowiednie próbki, które możesz wypróbować /usr/share/sounds, na przykład sprawdź te na/usr/share/sounds/gnome/default/alerts/

Pamiętaj, że beepprogram nie jest tak naprawdę konieczny. Ale jeśli jest zainstalowany, używa głośnika PC. To był jedyny sposób, w jaki mogłem znaleźć włączenie brzęczyka w X:

sudo apt-get install beep

Aby automatycznie włączyć podczas rozruchu, po prostu dodaj powyższe linie do swojego ~/.profilelub całego systemu na/etc/profile


Aby to przetestować:

printf '\a'

Brzęczyk!

beep

Brzęczenie!

MestreLion
źródło
Aby automatycznie włączyć sygnał dźwiękowy głośnika PC podczas rozruchu, musisz skomentować ten wiersz w /etc/modprobe.d/blacklist.conf, aby go nie odkomentować (chcesz wyłączyć czarną listę, a nie na odwrót).
z33k
1
oba rozwiązania działają na Ubuntu 16.04 Uwaga: pcspkri bell.oggsą niezależnymi podejściami. beeppróbuje emitować sygnał dźwiękowy przy użyciu różnych metod, np. ioctl(console_fd, KIOCSOUND, period)użyj pcspkr(dźwięk pochodzi z głośnika komputera na płycie głównej), podczas gdy printf '\a'metoda oparta na systemie może działać bez użycia tylko bell.ogg(dźwięk ze zwykłych głośników). Druga metoda może nie działać, dopóki usługa pulseaudio nie zostanie uruchomiona i / lub xset b onuruchomiona
jfs
To pactl upload-sample ...było dla mnie złote. Jak ponownie na stałe skonfigurować ładowanie próbki?
ulidtko
@ulidtko: Po prostu dodaj te linie linii w swoim ~/.profilesystemie lub w /etc/profile
całym
@MestreLion źle. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggw /etc/pulseaudio/default.pa.
ulidtko
15

Zetknąłem się z tym problemem wcześniej. Z tego, co pamiętam, problem polega na tym, że dzwonek terminalu próbuje zadzwonić do wewnętrznego głośnika komputerowego (jak w starym komputerze stacjonarnym), ale laptopów i niektórych nowszych komputerów czegoś takiego brakuje.

Jedynym rozwiązaniem, jakie wtedy znalazłem, było sudo apt-get install soxi

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

na przykład

 play -n synth 0.1 sine 880 vol 0.5
YodaDaCoda
źródło
wypróbuj moje rozwiązanie - chciałbym wiedzieć, czy to działa dla Ciebie!
JoBu1324,
do tego też możesz użyć testu głośników
Janus Troelsen,
1
Można również mieć ładny dźwięk gitary zrywać: play -q -n synth 2 pluck C5. C5 jest notatką.
Pablo A
3

W końcu znalazłem rozwiązanie, które nie wymaga alsamixeropcji PC Beep. Chyba pamiętam wszystkie moje zmiany:

odkomentuj następujące elementy w /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

na ten błąd , uruchompactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

JoBu1324
źródło
Próbowałem tego, dał mi pactl Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda,
Może ten wątek pomoże - jeśli kiedykolwiek uruchomiłeś pulseaudio jako root.
JoBu1324,
Właściwie mam inny problem. Pulseaudio rzuca Failed to open module "module-esound-protocol-unix": file not found. Prawdopodobnie nie warto o tym rozmawiać, ponieważ korzystam z 13.04, ale chciałbym móc zweryfikować twoje rozwiązanie.
YodaDaCoda
Ładne, nieco inne linie dla 15.04.
VRR
2

Jeśli masz rzeczywiste głośniki podłączone do komputera i nie słyszysz sygnału dźwiękowego, prawdopodobnie jest to spowodowane tym, że używasz compiz. Compiz polega na tym, że pulseaudio łapie sygnały dźwiękowe i gra je, podczas gdy metacity omija zwykłe ustawienia i używa libcanberra do odtwarzania dźwięku. Jeśli działa z metacity, a nie z kompizacją, to jest twój problem, w przeciwnym razie odpowiedź udzielona przez htorque jest prawidłowa.

Travis Watkins
źródło
2

Sygnał dźwiękowy działa tylko wtedy, gdy komputer ma„ głośnik ”. Wiele nowoczesnych laptopów / małych urządzeń nie ma takiego głośnika ”.

Spróbuj odtworzyć taki dźwięk: play xxxxx.wav znalazłem fajny plik wav , który wydaje się krótki i słodki, ale możesz też wybrać własny. Działa dla mnie, gdy wszystko inne zawiodło.


Dzięki: tredegar i hk_centos

Widok eliptyczny
źródło
1

Alternatywne podejście - ustaw xterm / konsolę na „Visual Bell”, aby po usłyszeniu sygnału okno po prostu odwróciło kolory na krótki czas.

Mam funkcję bash o nazwie beep, aby zwrócić moją uwagę po zakończeniu polecenia.

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

I jest używany w ten sposób

longrun-command ; beep
Criggie
źródło
0

Może być za późno, ALE, dla faceta w przyszłości szukającego tego:

printf '\x07'
Schalk
źródło