it-swarm-eu.dev

Pípnutí ve skriptu Shell nefunguje?

Chtěl bych použít zvukový signál ve skriptu Shell. Bohužel žádná z metod, které jsem našel přes Google, pro mě nefunguje.

Zkusil jsem

echo -e '\a'

echo -ne '\007'

a příkaz beep poté, co jsem jej nainstaloval přes apt.

Jaký může být důvod?

90
NES

První běh Sudo modprobe pcspkr a potom beep by měly fungovat.

Důvodem není, protože ve výchozím nastavení Ubuntu již nenačte hardwarový ovladač, který vydává zvukový signál.

Pokud to funguje pro vás, pak povolte načítání pcspkr natrvalo upravit /etc/modprobe.d/blacklist.conf file (pomocí gksudo gedit možná) a okomentujte řádek, který říká blacklist pcspkr tak to vypadá takto:

# ošklivý a hlasitý hluk, na nervy každého; to by mělo být provedeno pomocí 
 # pěkného pulseaudio bingu (Ubuntu: # 77010) 
 # blacklist pcspkr
94
8128

Nebýt fanouškem pípnutí pcspkr, používám pípnutí z jednoho ze systémových zvuků s příkazem paplay nainstalovaného pulseaudio serveru.

Nejprve vyhledejte zvuk, který se vám líbí (můžete například procházet/usr/sdílet/zvuky pro některé dostupné) a vytvořit odkaz na něj

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

Poté je k dispozici jako příkaz

alias beep='paplay $BEEP'

Nyní stačí spustit beep, kdykoli to budete potřebovat. Například vás upozorní na dokončení příkazu:

find . | grep treasure ; beep
96
yuvilio

Chcete-li tento problém trvale vyřešit:

  • Spusťte gconf-editor A pokud je k dispozici nastavení desktop | gnome | peripherals | keyboard | bell_mode, Změňte jej z off na on
  • Spusťte dconf-editor A pokud je k dispozici nastavení org | gnome | settings-daemon | peripherals | keyboard | bell-mode, Změňte jej z off na on
  • Přidejte pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.ogg Do souboru ~/.xprofile (Potřebujete gnome-control-center-data Pro glass.ogg)
  • Přidejte [ "$DISPLAY" ] && xset b 100 Do souboru ~/.bashrc

Nejjednodušší způsob, jak aktivovat toto řešení, je restartovat počítač.

Chcete-li toto řešení okamžitě implementovat pro již otevřené okno terminálu, spusťte příkaz pactl a v příslušném okně terminálu spusťte příkaz xset.

22
jdthood

Protože se jedná o velmi vysokou ohodnocenou otázku na google, přidám kroky, které jsem udělal, abych znovu zapnul pípnutí v konzole i X11:


Pro konzolu Linux (CTRL+ALT+F1...F6):

Proč to ve výchozím nastavení nefunguje

Protože již zodpovězeno , ovladač jádra pcspkr pro reproduktor PC je v Ubuntu blacklist.

Dočasně povolit do restartu:

Sudo modprobe pcspkr

Automaticky povolit při spuštění:

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

(smažte nebo okomentujte řádek pcspkr jeho připojením k #)


Pro terminály X11 (například výchozí gnome-terminal)

Proč to ve výchozím nastavení nefunguje

Pod X, jako při použití Unity, KDE, Gnome Shell, jsou pípání zachyceny PulseAudio díky module-x11-bell, které je ve výchozím nastavení načteno na /usr/bin/start-pulseaudio-x11. A zvukový vzorek PulseAudio hraje na pípnutí, bell.ogg, ve výchozím nastavení je prázdné. Zvonek může být navíc ztlumen.

Chcete-li dočasně povolit aktuální relaci,

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

Existují další vhodné vzorky, které můžete vyzkoušet na /usr/share/sounds, například zkontrolujte ty na /usr/share/sounds/gnome/default/alerts/

Všimněte si, že program beep není opravdu nutný. Pokud je však nainstalován, používá reproduktor PC. Byl to jediný způsob, jak jsem našel povolení bzučáku pod X:

Sudo apt-get install beep

Chcete-li při spuštění automaticky povolit, stačí přidat výše uvedené řádky do svého ~/.profile nebo celý systém na /etc/profile


Chcete-li to otestovat:

printf '\a'

Beep!

beep

Buzz!

21
MestreLion

S tímto problémem jsem se setkal již dříve. Z toho, co si pamatuji, je problém, že zvonek terminálu se pokouší zvonit interním reproduktorem počítače (jako ve staré škole), ale notebooky a některé novější počítače takovou věc chybí.

Jediným řešením, které jsem v té době našel, bylo Sudo apt-get install sox a

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

např.

 play -n synth 0.1 sine 880 vol 0.5
17
YodaDaCoda

Nakonec jsem našel řešení, které nevyžaduje alsamixer, aby měla možnost PC Beep. Myslím, že si pamatuji všechny své změny:

v /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

za tato chyba , spustit pactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

3
JoBu1324

" Pípnutí funguje pouze v případě, že počítač má 'reproduktor'. Mnoho moderních notebooků/malých zařízení žádný nemá.".

Zkuste přehrát zvuk takto: play xxxxx.wav Našel jsem soubor Nice wav , který se zdá být krátký a sladký, ale můžete si také vybrat svůj vlastní. Pracuje pro mě, když všechno ostatní selhalo.


Díky: tredegar & hk_centos

3
Elliptical view
2
htorque

Pokud máte k počítači připojené skutečné reproduktory a nemáte pípnutí, je pravděpodobné, že používáte kompas. Compiz spoléhá na to, že pulseaudio zachytí zvuky a hraje je, zatímco metacita obchází obvyklé nastavení a používá libcanberra k přehrání pípnutí. Pokud to funguje s metacilitou a nekompiluje to, co je vaším problémem, jinak by odpověď htorque byla svižná.

2
Travis Watkins

Tuto malou funkci jsem přidal do svého .bashrc jako náhradu za pípnutí:

beep () {
    if [ "$1" = --list ]
    then
        find /usr/share/sounds -type f -exec basename {} \; | sort -n | tr '\n' ' '; echo
    else
        paplay $(find /usr/share/sounds -type f -iname "${1:-bell}*" | head -1)
    fi
}

Hledá soubor v adresáři/usr/share/zvuk začínající zadaným argumentem nebo „zvonkem“ a přehraje jej. beep --list vrací seznam souborů v/usr/share/zvukech.

# Examples
beep
beep bark
beep trump
1
Kris

Alternativní přístup - nastavte svůj xterm/konzoli na „Visual Bell“, takže když zazní pípnutí, okno na krátkou dobu jednoduše převrátí své barvy.

Mám bash funkci zvanou pípnutí, abych upoutal pozornost, jakmile je příkaz dokončen.

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

A to se používá tímto způsobem

longrun-command ; beep
1
Criggie

Mohlo by to být pozdě, ale pro toho chlapa, který to v budoucnu hledá:

printf '\x07'
0
Schalk
paplay /usr/share/sounds/purple/alert.wav
0
Noel