Rozpocząłem długi proces przez terminal. Czy jest możliwe, aby terminal Ubuntu wydał dźwięk po zakończeniu procesu? W ten sposób nie muszę ciągle sprawdzać, ale zamiast tego zostaniemy powiadomieni dźwiękiem.
Rozpocząłem długi proces przez terminal. Czy jest możliwe, aby terminal Ubuntu wydał dźwięk po zakończeniu procesu? W ten sposób nie muszę ciągle sprawdzać, ale zamiast tego zostaniemy powiadomieni dźwiękiem.
Odpowiedzi:
Istnieją co najmniej trzy sposoby osiągnięcia tego celu poprzez umieszczenie odpowiedniego polecenia na końcu skryptu, który możesz wywołać w trakcie długiego procesu:
„Klasycznym” sposobem odtwarzania dźwięku jest użycie sygnału dźwiękowego przez głośniki komputera. Jednak to nie zadziała we wszystkich przypadkach (np. W moim systemie głośniki komputera są całkowicie wyłączone) i będziesz musiał usunąć pscpkr /etc/modprobe/blacklist.conf
i załadować pcspkr
moduł jądra.
sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
sudo modprobe pcspkr
beep [optional parameters]
Możemy również odtwarzać dowolny plik dźwiękowy w formacie wav przy użyciu aplay (domyślnie instalowany):
aplay /usr/share/sounds/alsa/Side_Right.wav
Innym sposobem jest użycie interfejsu wiersza poleceń pulseaudio, aby umożliwić odtwarzanie plików dźwiękowych, które system libsndfile
rozpoznaje na domyślnym wyjściu audio:
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
Możemy użyć domyślnych plików dźwiękowych z /usr/share/sounds/
dowolnego innego pliku dźwiękowego w innym miejscu.
Po prostu wspomniałem o tym, istnieje inny fajny sposób na osiągnięcie tego przez niewłaściwe użycie espeak , który jest domyślnie instalowany w Ubuntu <= 12.04. Zobacz, a raczej usłysz następujący przykład:
#! /bin/bash
c=10; while [ $c -ge 0 ]; do espeak $c; let c--; done; sleep 1 ## here lengthy code
espeak "We are done with counting"
W Ubuntu> = 12.10 Orca używa narzędzia do wysyłania mowy. Następnie możemy zainstalować espeak lub alternatywnie użyć spd-say "Text"
.
spd-say
.
spd-say
Narzędzie jest instalowane domyślnie i działa w moim systemie.
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
używam
make; spd-say done
Zamień „make” na dowolne długotrwałe polecenie, którego używasz.
spd-say 'get back to work
„. I jest również wstępnie zainstalowany: releases.ubuntu.com/trusty/... , dla niewidomych, jak sądzę? I -w
dla nieskończonej pętli: while true; do spd-say -w 'get back to work you lazy bum'; done
.
Aby odtworzyć dźwięk po zakończeniu polecenia:
long-running-command; sn3
(gdzie sn3
jest dźwięk numer 3) wstaw to .bashrc
:
sound() {
# plays sounds in sequence and waits for them to finish
for s in $@; do
paplay $s
done
}
sn1() {
sound /usr/share/sounds/ubuntu/stereo/dialog-information.ogg
}
sn2() {
sound /usr/share/sounds/freedesktop/stereo/complete.oga
}
sn3() {
sound /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
Lub przeczytaj poniżej, aby uzyskać więcej opcji:
Oto, czego używam do tego, o co prosisz - z jedną różnicą: nie tylko odtwarza dźwięk po zakończeniu polecenia, ale odtwarza inny dźwięk po sukcesie i błędzie. (Ale możesz to zmienić, jeśli ci się nie podoba.)
Mam wywoływaną funkcję Bash oks
, której używam na końcu długo działających poleceń:
make && make test && make install; oks
Odtwarza dźwięk i wyświetla komunikat OK lub ERROR (z kodem błędu) po zakończeniu poprzedniego polecenia.
Oto ta funkcja z dwoma pomocnikami:
sound() {
# plays sounds in sequence and waits for them to finish
for s in $@; do
paplay $s
done
}
soundbg() {
# plays all sounds at the same time in the background
for s in $@; do
# you may need to change 0 to 1 or something else:
pacmd play-file $s 0 >/dev/null
done
}
oks() {
# like ok but with sounds
s=$?
sound_ok=/usr/share/sounds/ubuntu/stereo/dialog-information.ogg
sound_error=/usr/share/sounds/ubuntu/stereo/dialog-warning.ogg
if [[ $s = 0 ]]; then
echo OK
soundbg $sound_ok
else
echo ERROR: $s
soundbg $sound_error
fi
}
Możesz umieścić go bezpośrednio w ~ / .bashrc lub w innym pliku, a następnie umieścić ten wiersz w ~ / .bashrc:
. ~/path/to/file/with/function
Zmień sound_ok
i sound_error
na inne dźwięki.
Możesz eksperymentować z sound
vs. soundbg
i zmieniać sound_ok
oraz sound_error
używać sekwencji wielu dźwięków, które lubisz, aby uzyskać pożądany efekt.
Aby znaleźć dobre dźwięki w systemie, możesz spróbować:
for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done
Oto niektóre dźwięki, których często używam i które są domyślnie dostępne na Ubuntu, które są dobre dla powiadomień - sn1 jest głośny i miły, sn2 jest bardzo głośny i wciąż całkiem miły, sn3 jest bardzo głośny i niezbyt miły:
sn1() {
sound /usr/share/sounds/ubuntu/stereo/dialog-information.ogg
}
sn2() {
sound /usr/share/sounds/freedesktop/stereo/complete.oga
}
sn3() {
sound /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
Ponownie możesz zmienić sound
na, soundbg
jeśli chcesz grać w tle, nie czekając na zakończenie dźwięku (np. Aby nie spowalniać skryptów podczas odtwarzania wielu dźwięków).
I na wszelki wypadek - oto ta sama funkcja, oks
ale bez dźwięków:
ok() {
# prints OK or ERROR and exit status of previous command
s=$?
if [[ $s = 0 ]]; then
echo OK
else
echo ERROR: $s
fi
}
Oto jak z niego korzystasz:
Przykład z sukcesem:
ls / && ls /bin && ls /usr; oks
przykład z błędem:
ls / && ls /bim && ls /usr; oks
Oczywiście w praktyce polecenia są bardziej jak:
make && make test && make install; oks
ale użyłem ls
, żebyś mógł szybko zobaczyć, jak to działa.
Możesz użyć ok
zamiast oks
wersji cichej.
Lub możesz użyć np .:
ls / && ls /bim && ls /usr; ok; sn1
aby wydrukować OK / ERROR, ale zawsze odtwarzaj ten sam dźwięk itp.
Umieszczam te funkcje na GitHub, patrz:
Źródło można pobrać z:
Dodałem soundloop
funkcję do powyższego repozytorium. Odtwarza dźwięk i może być przerwany przez Ctrl + C (w przeciwieństwie do prostego while true; do paplay file.ogg; done
, którego można by oczekiwać, ale nie działa), o co poprosił shadi w komentarzach. Jest realizowany jako:
soundloop() {
set +m
a=`date +%s`
{ paplay $1 & } 2>/dev/null
wait
b=`date +%s`
d=$(($b-$a))
[ $d -eq 0 ] && d=1
while :; do
pacmd play-file $1 0 >/dev/null
sleep $d
done
}
Jeśli uważasz, że to skomplikowane, skieruj swoje skargi do programistów PulseAudio.
while true; do paplay ...; done
tak, aby dźwięk się powtarzał, aż uderzyłem Ctrl+C
, ale kiedy to zrobię, nie łamie się. Nie mogę znaleźć żadnych specjalnych opcji, man paplay
aby dowiedzieć się, jak to zrobić. Jakieś pomysły?
Według tego\a
postać ucieka kod ASCII 7, który jest sygnał komputera.
Tak echo $'\a'
działa, aby wydać dźwięk dźwiękowy na moim komputerze lokalnym, nawet jeśli jest on wykonywany w powłoce bash działającej na komputerze, do którego jestem podłączony za pośrednictwem interfejsu terminala, takiego jak PuTTY.
Rozwijając odpowiedź Michaela Curriesa, możesz sprawić, że Bash wydrukuje znak BEL
( \a
) poprzez PROMPT_COMMAND
:
PROMPT_COMMAND='printf \\a'
Ustawienie PROMPT_COMMAND
tego sposobu spowoduje, że Bash wykona się printf \\a
na końcu każdego polecenia, co sprawi, że terminal odtworzy dźwięk (chociaż, jak wskazuje Muru, po prostu uruchomienie przerysowania zachęty spowoduje, że terminal odtworzy dźwięk, tj. Dźwięk zostanie odtworzony za każdym razem, gdy rysowany jest nowy monit, na przykład nawet po naciśnięciu ENTER).
Jest to funkcja terminalu, więc może nie działać na wszystkich terminalach; na przykład nie działa w konsoli (ale jestem pewien, że działa w gnome-terminal
i xterm
).
Komenda
speaker-test
wydaje dźwięk. Najprostsze, ale irytujące rozwiązanie. :-)
Zapoznaj się z instrukcjąspeaker-test(1)
dotyczącą opcji konfiguracji sygnału szumu.
Nie o to prosiłeś, ale możesz użyć do tego powiadomienia.
Zamień polecenie podane w innych odpowiedziach na
notify-send "Process terminated" "Come back to the terminal, the task is over"
command && (say done ; echo done) || (echo error ; say error)
Przykład 1: echo alik && (say done ; echo done) || (echo error ; say error)
da gotowe słowo.
Przykład 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error)
spowoduje powstanie słowa błędu.
* Potrzeby gnustep-gui-runtime
-
sudo apt-get install gnustep-gui-runtime
Twoje zdrowie.
Stworzyłem prosty i prawie natywny skrypt, który odtwarza dźwięk i wyświetla powiadomienie z podaną wiadomością i czasem dla Ubuntu ( Gist ):
#!/bin/sh
# https://gist.github.com/John-Almardeny/04fb95eeb969aa46f031457c7815b07d
# Create a Notification With Sound with a Given Message and Time
# The Downloaded Sound is from Notification Sounds https://notificationsounds.com/
MSSG="$1"
TIME="$2"
# install wget if not found
if ! [ -x "$(command -v wget)" ]; then
echo -e "INSTALLING WGET...\n\n"
sudo apt-get install wget
echo -e "\n\n"
fi
# install at package if not found
if ! [ -x "$(command -v at)" ]; then
echo -e "INSTALLING AT...\n\n"
sudo apt-get install at
echo -e "\n\n"
fi
# install sox if not found
if ! [ -x "$(command -v sox)" ]; then
echo -e "INSTALLING SOX...\n\n"
sudo apt-get install sox
sudo apt-get install sox libsox-fmt-all
echo -e "\n\n"
fi
# download the noti sound if this is first time
# add alias to the bashrc file
if ! [ -f ~/noti/sound.mp3 ]; then
echo -e "DOWNLOADING SOUND...\n\n"
touch ~/noti/sound.mp3 | wget -O ~/noti/sound.mp3 "https://notificationsounds.com/wake-up-tones/rise-and-shine-342/download/mp3"
sudo echo "alias noti=\"sh ~/noti/noti.sh\"" >> ~/.bashrc
source ~/.bashrc
echo -e "\n\n"
fi
# notify with the sound playing and particular given message and time
echo "notify-send \""$MSSG\"" && play ~/noti/sound.mp3" | at $TIME
Utwórz nowy katalog w domu i zadzwoń noti
mkdir ~/noti
Pobierz noti.sh i wypakuj go do powyższego katalogu noti
.
Otwórz Terminal i zmień katalog na noti
cd ~/noti
Uczyń noti.sh wykonywalnym, wydając:
sudo chmod +x noti.sh
Uruchom test w następujący sposób:
sh ~/noti/noti.sh "Test" "now"
noti "Hello From Noti" "now +1 minute"
noti "Hello From Noti" "now +5 minutes"
noti "Hello From Noti" "now + 1 hour"
noti "Hello From Noti" "now + 2 days"
noti "Hello From Noti" "4 PM + 2 days"
noti "Hello From Noti" "now + 3 weeks"
noti "Hello From Noti" "now + 4 months"
noti "Hello From Noti" "4:00 PM"
noti "Hello From Noti" "2:30 AM tomorrow"
noti "Hello From Noti" "2:30 PM Fri"
noti "Hello From Noti" "2:30 PM 25.07.18"
sudo apt-get update; noti "Done" "now"
fala sinusoidalna ffmpeg
Dla minimalistów, możesz grać sinusoidą 1000 Hz przez 5 sekund:
sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp
lub na zawsze, dopóki nie zrobisz Ctrl + C:
ffplay -f lavfi -i "sine=frequency=1000" -nodisp
Więcej informacji na: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
Testowane w Ubuntu 18.04, ffmpeg 3.4.6.