Я розпочав довгий процес через термінал. Чи можливо змусити термінал Ubuntu видати звук, коли процес закінчиться? Таким чином, мені не потрібно тримати перевірку, але натомість буде повідомлено звуком.
Я розпочав довгий процес через термінал. Чи можливо змусити термінал Ubuntu видати звук, коли процес закінчиться? Таким чином, мені не потрібно тримати перевірку, але натомість буде повідомлено звуком.
Відповіді:
Існують щонайменше три способи командного рядка, щоб досягти цього, поставивши команду пристосування в кінці сценарію, яку ви можете викликати для свого тривалого процесу:
"Класичний" спосіб відтворення звуку - використовувати звуковий сигнал через колонки ПК. Однак це не спрацює у всіх випадках (наприклад, у моєму системному комп'ютері динаміки повністю відключені), і вам потрібно буде видалити pscpkr /etc/modprobe/blacklist.conf
і завантажити pcspkr
модуль ядра.
sudo sed -i 's/blacklist pcspkr/#blacklist pcspkr/g' /etc/modprobe.d/blacklist.conf
sudo modprobe pcspkr
beep [optional parameters]
Ми також можемо відтворити будь-який звуковий файл у форматі wav за допомогою aplay (встановлений за замовчуванням):
aplay /usr/share/sounds/alsa/Side_Right.wav
Іншим способом є використання інтерфейсу командного рядка pulseaudio для ввімкнення відтворення будь-яких звукових файлів, які ваша система (в libsndfile
) розпізнає на звуковому виході за замовчуванням:
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
Ми можемо використовувати звукові файли за замовчуванням з /usr/share/sounds/
будь-якого іншого звукового файлу в іншому місці.
Тільки що згадував про це, є ще один приємний спосіб досягти цього шляхом неправильного використання espeak , який встановлений за замовчуванням в Ubuntu <= 12.04. Дивіться, а точніше чуйте такий приклад:
#! /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"
В Ubuntu> = 12.10 Orca використовує розмову-диспетчер. Потім ми можемо встановити еспік або використовувати альтернативно spd-say "Text"
.
spd-say
.
spd-say
Утиліта встановлена за замовчуванням і працює в моїй системі.
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
я використовую
make; spd-say done
Замініть "make" будь-якою давно запущеною командою, яку ви використовуєте.
spd-say 'get back to work
'. І поставляється попередньо встановленим: release.ubuntu.com/trusty/… , для сліпих людей, я думаю? І -w
для нескінченних циклів: while true; do spd-say -w 'get back to work you lazy bum'; done
.
Для відтворення звуку після закінчення команди:
long-running-command; sn3
(де sn3
звук № 3) помістіть це .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
}
Або читайте нижче для отримання додаткових варіантів:
Ось, що я використовую саме для того, що ви просите - з однією різницею: він не тільки відтворює звук, коли команда закінчується, але і відтворює різний звук при успіху та помилці. (Але ви можете змінити це, якщо вам це не подобається.)
У мене є функція Bash, яку називаю oks
в кінці довгих команд, що виконуються:
make && make test && make install; oks
Він відтворює звук і відображає ОК або ПОМИЛКУ (з кодом помилки), коли попередня команда закінчується.
Ось ця функція з двома помічниками:
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
}
Ви можете помістити його у свій ~ / .bashrc безпосередньо або помістити в якийсь інший файл, а потім помістити цей рядок у свій ~ / .bashrc:
. ~/path/to/file/with/function
Зміна sound_ok
і sound_error
на деякі інші звуки.
Ви можете експериментувати з sound
VS. soundbg
і змінами sound_ok
і sound_error
використовувати послідовності багатьох звуків , які ви хотіли б отримати результат , який ви хочете.
Щоб знайти хороші звуки у вашій системі, ви можете спробувати:
for i in /usr/share/sounds/*/stereo/*; do echo $i; paplay $i; sleep 1; done
Ось деякі звуки, які я часто використовую, які доступні в Ubuntu за замовчуванням, які добре підходять для сповіщень - sn1 - це голосно і приємно, sn2 дуже гучно і все ще дуже приємно, sn3 надзвичайно гучний і не такий приємний:
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
}
Знову ж , ви можете змінити , sound
щоб , soundbg
якщо ви хочете грати у фоновому режимі , не чекаючи звуку до кінця (наприклад, не баритися ваші сценарії , коли ви граєте багато звуків).
І про всяк випадок - тут така ж функція, як oks
і без звуків:
ok() {
# prints OK or ERROR and exit status of previous command
s=$?
if [[ $s = 0 ]]; then
echo OK
else
echo ERROR: $s
fi
}
Ось як ви його використовуєте:
Приклад з успіхом:
ls / && ls /bin && ls /usr; oks
Приклад з помилкою:
ls / && ls /bim && ls /usr; oks
Звичайно, на практиці команди більше схожі на:
make && make test && make install; oks
але я використав, ls
щоб ви могли швидко побачити, як це працює.
Ви можете використовувати ok
замість oks
безшумної версії.
Або ви можете використовувати, наприклад:
ls / && ls /bim && ls /usr; ok; sn1
друкувати ОК / ПОМИЛКА, але завжди відтворювати один і той же звук тощо
Я ставлю ці функції на GitHub, дивіться:
Джерело можна завантажити з:
Я додав soundloop
функцію до вищевказаного репо. Він відтворює звук і може бути перерваний Ctrl + C (на відміну від простого, while true; do paplay file.ogg; done
який можна було б очікувати, але він не працює), як запитав Шаді в коментарях. Він реалізується як:
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
}
Якщо ви вважаєте, що це складно, будь ласка, направляйте скарги розробникам PulseAudio.
while true; do paplay ...; done
так, щоб звук повторювався, поки не вдарив Ctrl+C
, але коли я це роблю, він не ламається. Я не можу знайти жодних спеціальних варіантів, man paplay
щоб зрозуміти, як змусити це працювати. Будь-які ідеї?
У відповідності з цим\a
символ вислизає ASCII код 7, який є сигналом комп'ютера.
Так echo $'\a'
працює звуковий сигнал на моїй локальній машині, навіть коли він виконується на оболонці bash, що працює на комп'ютері, до якого я підключений через термінальний інтерфейс, як PuTTY.
Розгортаючи відповідь Майкла Керріса, ви можете змусити Баша друкувати символ BEL
( \a
) через PROMPT_COMMAND
:
PROMPT_COMMAND='printf \\a'
Установка PROMPT_COMMAND
таким чином змусить Bash виконати printf \\a
в кінці кожної команди, яка зробить термінал відтворювати звук (хоча , як Muru вказує, просто запускаючи redrawal в рядку змусить термінал відтворювати звук, тобто звук буде відтворюватися щоразу, коли з'являється нове запит, наприклад, навіть при натисканні ENTER).
Це функція терміналу, тому вона може працювати не у всіх терміналах; наприклад, він не працює в консолі (але я впевнений, що він працює gnome-terminal
і в xterm
).
Команда
speaker-test
видає шум звуку. Найпростіше, але дратівливе рішення. :-)
Перегляньте посібник ізspeaker-test(1)
опцій для налаштування шумового сигналу.
command && (say done ; echo done) || (echo error ; say error)
Приклад 1: у echo alik && (say done ; echo done) || (echo error ; say error)
результаті вийде готове слово.
Приклад 2: non_existing_command_error && (say done ; echo done) || (echo error ; say error)
призведе до помилки слово.
* Потреби gnustep-gui-runtime
-
sudo apt-get install gnustep-gui-runtime
Ура.
Я створив простий і майже рідний сценарій, який відтворює звук і відображає сповіщення із заданим повідомленням та часом для 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
Створіть у своєму будинку новий Каталог і зателефонуйте йому noti
mkdir ~/noti
Завантажте noti.sh та дістаньте його до вищевказаного реєструnoti
.
Відкрийте термінал і змініть каталог на noti
cd ~/noti
Зробіть noti.sh виконуваним, видавши:
sudo chmod +x noti.sh
Виконайте тест так:
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"
ffmpeg синусоїда
Для мінімалістів там ви можете грати синус 1000 Гц протягом 5 секунд:
sudo apt-get install ffmpeg
ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp
або назавжди, поки ви не зробите Ctrl-C:
ffplay -f lavfi -i "sine=frequency=1000" -nodisp
Більше інформації на сайті: https://stackoverflow.com/questions/5109038/linux-sine-wave-audio-generator/57610684#57610684
Тестовано в Ubuntu 18.04, ffmpeg 3.4.6.