Сигнал звуку в оболонці не працює?


87

Я хотів би використовувати звуковий сигнал у сценарії оболонки. На жаль, жоден із методів, які я знайшов через Google, не працює для мене.

я намагався

echo -e '\a'

echo -ne '\007'

і команда beepпісля того, як я встановив її через apt.

Що може бути причиною?


Дивіться цей звіт про помилку: bugs.launchpad.net/ubuntu/+source/unity/+bug/769314
Flimm

Відповіді:


93

Спочатку біжи, sudo modprobe pcspkrа потім beepповинен працювати.

Причина цього не полягає в тому, що за замовчуванням Ubuntu більше не завантажує драйвер обладнання, який видає звукові сигнали.

Якщо це працює для вас, щоб увімкнути завантаження pcspkr назавжди відредагуйте /etc/modprobe.d/blacklist.confфайл ( gksudo geditможливо, використовуючи ) та прокоментуйте рядок, який каже, що blacklist pcspkrце виглядає приблизно так:

# потворний і гучний шум, що потрапляє на нерви кожному; це має зробити а
# приємний пульс-аудіо (Ubuntu: # 77010)
# чорний список pcspkr

3
Якщо я коментую, що blacklist pcspkrмені потрібно зробити, modprobe -r pcspkr && modprobe pcspkrщоб він працював. Також звуковий сигнал на роботу - це не те саме, що активувати звуковий дзвінок, і тому askubuntu.com/questions/22168/how-do-i-enable-the-terminal-bell все одно повинен бути відкритим.
daithib8

3
Це не працює для мене в Ubuntu 14.
Серін

90

Не будучи шанувальником звукового сигналу pcspkr, я використовую звуковий сигнал з одного із системних звуків із командою paplay встановленого імпульсного сервера.

Спочатку знайдіть звук, який вам подобається (ви можете переглядати / usr / share / звуки для деяких доступних, наприклад) та створити посилання на нього

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

Тоді майте його як команду

alias beep='paplay $BEEP'

Тепер просто запустіть, beepколи вам це потрібно. Наприклад, щоб попередити вас про завершення команди:

find . | grep treasure ; beep

1
Чи можете ви змусити його відтворювати цей звук, коли хтось біжитьecho -e '\a'
Flimm

Можливо, вам знадобиться команда читання в циклі часу або інша бібліотека, яка може контролювати натискання клавіш.
ювільо

2
Це чудове рішення! Тепер я можу робити run-my-long-test-suite.sh; beepта читати stackoverflow, поки система не буде готова.
jamesc

3
Приємно! Я використовую export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.oggі alias beep='paplay $BEEP --volume=32768'зараз, що добре працює для мене. (Зверніть увагу, що ви можете змінити гучність за beepпсевдонімом, наприклад, beep --volume=15000п'єси при гучності
-12 дБ

3
Відтворення цих ogg-файлів може призвести до порядку затримки на величину більше, ніж у сигналу внутрішнього динаміка ПК. Мало того, що затримка здається дуже мінливою. Я визнаю, що більшість людей не байдуже, але коли вам потрібна реальна швидкість або майже реальна швидкість, динамік ПК, мабуть, найкращий варіант для чутного зворотного зв'язку.
H2ONaCl

21

Щоб постійно вирішити цю проблему:

  • Запустіть, gconf-editorі якщо desktop | gnome | peripherals | keyboard | bell_modeпараметр присутній, то змініть його offнаon
  • Запустіть, dconf-editorі якщо org | gnome | settings-daemon | peripherals | keyboard | bell-modeпараметр присутній, то змініть його offнаon
  • Додати pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggв файл ~/.xprofile(необхідно gnome-control-center-dataдля glass.ogg)
  • Додати [ "$DISPLAY" ] && xset b 100у файл~/.bashrc

Найпростіший спосіб активувати це рішення - перезавантажити.

Далі, щоб негайно реалізувати це рішення для вже відкритого вікна терміналу, запустіть pactlкоманду та запустіть xsetкоманду у відповідному вікні терміналу.


Я поклав pactl upload-sampleкоманду в сценарій оболонки, але ваш метод більш організований. Дякую!
JoBu1324

Якщо ви введете pactlкоманду, ~/.xprofileвона виконується на початку сеансу GUI.
jdthood

dconf-editorВерсія bell-modeустановки , здається org.gnome.settings-daemon.peripherals.keyboard.
lgarzo

@lgarzo: Дякую за пораду. Я оновлю відповідь.
jdthood

1
@ Hibou57: Переконайтеся , що у вас є пакет , що містить glass.oggвстановлений
Janus Troelsen

21

Оскільки це дуже високо оцінене питання в google, я додам кроки, які я зробив для повторного включення звукового сигналу в обох консолях та X11:


Для консолі Linux ( CTRL+ ALT+ F1... F6):

Чому це не працює за замовчуванням

Як уже відповіли , pcspkrдрайвер ядра для динаміка ПК перебуває у чорному списку Ubuntu.

Тимчасово увімкніть до перезавантаження:

sudo modprobe pcspkr

Автоматичне включення під час завантаження:

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

(видалити або коментувати pcspkrрядок, попередньо додавши його #)


Для терміналів X11 (наприклад, за замовчуванням gnome-terminal)

Чому це не працює за замовчуванням

Під X, як при використанні Unity, KDE, Gnome Shell, події звукового сигналу фіксуються завдяки PulseAudio завдяки module-x11-bell, який завантажується за замовчуванням у /usr/bin/start-pulseaudio-x11. А звуковий зразок PulseAudio відтворює на звуковий сигнал, bell.oggза замовчуванням порожній. Крім того, обсяг дзвона може бути відключений.

Щоб тимчасово включити поточний сеанс,

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

Є й інші відповідні зразки, на які можна спробувати /usr/share/sounds, наприклад, перевірити зразки на/usr/share/sounds/gnome/default/alerts/

Зауважте, що beepпрограма насправді не потрібна. Але якщо він встановлений, він використовує динамік ПК. Це був єдиний спосіб, коли я міг увімкнути зумер під X:

sudo apt-get install beep

Для автоматичного включення під час завантаження просто додайте вищевказані рядки у вашому ~/.profileабо загальносистемному режимі на/etc/profile


Щоб перевірити це:

printf '\a'

Звук!

beep

Кайф!


Щоб автоматично увімкнути звуковий сигнал ПК-динаміка під час завантаження, ви повинні фактично коментувати зазначений рядок у /etc/modprobe.d/blacklist.conf, а не коментувати його (ви хочете відключити чорний список, а не навпаки).
z33k

1
обидва рішення працюють на Ubuntu 16.04 Примітка: pcspkrі bell.oggє незалежними підходами. beepнамагається подати звуковий сигнал, використовуючи різні підходи, наприклад, ioctl(console_fd, KIOCSOUND, period)використовуйте pcspkr(звук надходить з динаміка ПК на материнській платі), а printf '\a'метод на базі може працювати без нього, використовуючи лише bell.oggзвук (звичайний динамік). Другий метод може не працювати до тих пір, поки не буде запущена та / або xset b onзапущена служба pulseaudio
jfs

Це pactl upload-sample ...було золотим для мене. Який спосіб остаточно налаштувати завантаження зразка знову?
ulidtko

@ulidtko: Просто додайте ці рядки у вашому ~/.profileабо загальносистемному /etc/profile
просторі

@MestreLion помиляється. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggв /etc/pulseaudio/default.pa.
ulidtko

15

Я раніше стикався з цією проблемою. Як я пам’ятаю, проблема полягає в тому, що дзвінок терміналу намагається зателефонувати на внутрішній динамік комп'ютера (як на робочому столі старої школи), але у ноутбуках та деяких новіших комп'ютерах такого не вистачає.

Єдине рішення, яке я знайшов у той час, було sudo apt-get install soxі

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

напр

 play -n synth 0.1 sine 880 vol 0.5

спробуйте моє рішення - я хотів би знати, чи працює він для вас!
JoBu1324

Ви також можете використати тест для спікера
Janus Troelsen,

1
Ви також можете мати хороший тон гітари зривати: play -q -n synth 2 pluck C5. C5 - примітка.
Пабло А

3

Нарешті я знайшов рішення, яке не потребує alsamixerопції PC Beep. Я думаю, що пам’ятаю всі свої зміни:

коментувати наступне в /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

на цю помилку , запустітьpactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg


Спробував це, мені дав пакт Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda

Можливо, ця нитка допоможе - якщо ви коли-небудь запускаєте pulseaudio як root.
JoBu1324

Насправді у мене є інша проблема. Pulseaudio кидає Failed to open module "module-esound-protocol-unix": file not found. Напевно, не варто обговорювати тут, оскільки я бігаю 13.04, хоча я хотів би мати можливість перевірити ваше рішення.
YodaDaCoda

Приємно, просто трохи інші лінії за 15.04.
VRR

2

Якщо у вас підключені фактичні динаміки до комп'ютера, і ви не отримуєте звукового сигналу, швидше за все, ви використовуєте compiz. Compiz покладається на те, що імпульс-аудіо ловить звукові сигнали та відтворює їх, тоді як метакітизм обходить звичайні настройки та використовує libcanberra для відтворення звукового сигналу. Якщо це працює з metacity, а не compiz, це ваша проблема, інакше htorque відповіді відповідає.


2

3
"Не включено за замовчуванням" не означає зламати, і "героїчні зусилля" не потрібні: просто modprobe pcsprk(в консолі) або pactl upload-sample ...в X11, і дратівливий звуковий сигнал повернувся :)
MestreLion

2

" Звуковий сигнал працює лише в тому випадку, якщо на вашому ПК є" динамік ". У багатьох сучасних ноутбуках / невеликих пристроях його немає".

Спробуйте відтворити такий звук: play xxxxx.wav я знайшов хороший WAV- файл, який здається коротким і милим, але ви також можете вибрати власний. Для мене працює, коли все інше не вдалося.


Завдяки: tredegar & hk_centos


1

Альтернативний підхід - встановіть xterm / консоль на "Visual Bell", щоб коли звуковий сигнал з’явився, вікно просто інвертує свої кольори на короткий час.

У мене є функція bash під назвою звуковий сигнал, щоб привернути увагу, коли команда закінчена.

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

І він використовується таким чином

longrun-command ; beep

0

Але, можливо, пізно, але хлопець у майбутньому шукає цього:

printf '\x07'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.