Bip dalam skrip shell tidak berfungsi?

87

Saya ingin menggunakan suara bip dalam skrip shell. Sayangnya tidak ada metode yang saya temukan melalui Google yang berfungsi untuk saya.

Saya mencoba

echo -e '\a'

echo -ne '\007'

dan perintah beepsetelah saya menginstalnya melalui apt.

Apa yang bisa menjadi alasannya?

NES
sumber

Jawaban:

93

Jalankan pertama sudo modprobe pcspkrdan kemudian beepharus bekerja.

Alasan ini tidak terjadi karena secara default Ubuntu tidak lagi memuat driver perangkat keras yang menghasilkan bunyi bip.

Jika ini berhasil bagi Anda, maka untuk mengaktifkan pemuatan pcspkr, sunting /etc/modprobe.d/blacklist.conffile secara permanen ( gksudo geditmungkin menggunakan ) dan komentar di luar baris yang mengatakannya blacklist pcspkrsehingga terlihat seperti ini:

# Suara jelek dan keras, membuat semua orang gelisah; ini harus dilakukan oleh a
# nice pulseaudio bing (Ubuntu: # 77010)
# daftar hitam pcspkr
8128
sumber
3
Jika saya berkomentar blacklist pcspkrsaya harus lakukan modprobe -r pcspkr && modprobe pcspkruntuk membuatnya bekerja. Bunyi bip juga tidak sama dengan membunyikan bel yang dapat didengar dan karenanya askubuntu.com/questions/22168/bagaimana-melakukan-terminal- bel harus tetap terbuka.
daithib8
3
Ini tidak berfungsi untuk saya di Ubuntu 14.
Cerin
90

Bukan penggemar beep pcspkr, saya menggunakan bip dari salah satu suara sistem dengan perintah paplay server pulseaudio yang diinstal.

Pertama-tama temukan suara yang Anda suka (Anda dapat menelusuri / usr / berbagi / suara untuk beberapa yang tersedia misalnya) dan membuat referensi untuk itu

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

Kemudian memilikinya tersedia sebagai perintah

alias beep='paplay $BEEP'

Sekarang jalankan saja beepkapan pun Anda membutuhkannya. Misalnya, untuk mengingatkan Anda ketika sebuah perintah selesai:

find . | grep treasure ; beep
yuvilio
sumber
1
Bisakah Anda membuatnya memainkan suara ini ketika seseorang berlariecho -e '\a'
Flimm
Anda mungkin memerlukan beberapa perintah baca dalam loop sementara atau pustaka lain yang dapat memantau penekanan tombol.
yuvilio
2
Ini solusi hebat! Sekarang saya bisa melakukan run-my-long-test-suite.sh; beepdan membaca stackoverflow hingga sistem siap.
jamesc
3
Bagus! Saya menggunakan export BEEP=/usr/share/sounds/ubuntu/stereo/dialog-information.oggdan alias beep='paplay $BEEP --volume=32768'sekarang, itu bekerja dengan baik untuk saya. (Perhatikan bahwa Anda dapat mengganti volume dengan beepalias, mis. beep --volume=15000Memainkan pada volume -12dB.)
leftaroundabout
3
Memutar file-file ogg ini dapat menghasilkan urutan latensi yang lebih besar daripada beep speaker PC internal. Tidak hanya itu latensi tampaknya sangat bervariasi. Saya mengakui bahwa kebanyakan orang tidak peduli tetapi ketika Anda membutuhkan respons real time atau mendekati real time, speaker PC mungkin merupakan opsi terbaik untuk umpan balik yang dapat didengar.
H2ONaCl
21

Untuk memperbaiki masalah ini secara terus-menerus:

  • Jalankan gconf-editordan jika desktop | gnome | peripherals | keyboard | bell_modepengaturan hadir kemudian mengubahnya dari offkeon
  • Jalankan dconf-editordan jika org | gnome | settings-daemon | peripherals | keyboard | bell-modepengaturan hadir kemudian mengubahnya dari offkeon
  • Tambahkan pactl upload-sample /usr/share/sounds/gnome/default/alerts/glass.ogg bell.oggke file ~/.xprofile(Anda perlu gnome-control-center-datauntuk glass.ogg)
  • Tambahkan [ "$DISPLAY" ] && xset b 100ke file~/.bashrc

Cara paling sederhana untuk mengaktifkan solusi ini adalah reboot.

Selanjutnya, untuk mengimplementasikan solusi ini segera untuk jendela terminal yang sudah terbuka, jalankan pactlperintah dan jalankan xsetperintah di jendela terminal yang dimaksud.

jdthood
sumber
Saya menempatkan pactl upload-sampleperintah dalam skrip shell, tetapi metode Anda lebih terorganisir. Terima kasih!
JoBu1324
Jika Anda memasukkan pactlperintah di ~/.xprofiledalamnya dieksekusi pada awal sesi GUI.
jdthood
The dconf-editorversi bell-modepengaturan tampaknya org.gnome.settings-daemon.peripherals.keyboard.
lgarzo
@ lgarzo: Terima kasih atas tipnya. Saya akan memperbarui jawabannya.
jdthood
1
@ Hibou57: Pastikan Anda sudah glass.oggmenginstal paket yang berisi
Janus Troelsen
21

Karena ini adalah pertanyaan dengan peringkat sangat tinggi di google, saya akan menambahkan langkah-langkah yang saya lakukan untuk mengaktifkan kembali bip di konsol dan X11:


Untuk Konsol Linux ( CTRL+ ALT+ F1... F6):

Mengapa tidak bekerja secara default

Seperti yang sudah dijawab , pcspkrdriver kernel untuk Speaker PC dimasukkan daftar hitam di Ubuntu.

Aktifkan sementara sampai reboot:

sudo modprobe pcspkr

Secara otomatis mengaktifkan saat boot:

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

(hapus atau pcspkrbaris komentar dengan menambahkannya dengan #)


Untuk terminal X11 (seperti default gnome-terminal)

Mengapa tidak bekerja secara default

Di bawah X, seperti saat menggunakan Unity, KDE, Gnome Shell, acara beep ditangkap oleh PulseAudio module-x11-bell, yang dimuat secara default di /usr/bin/start-pulseaudio-x11. Dan sampel suara yang dimainkan PulseAudio pada bip,, bell.oggkosong secara default. Selain itu, volume bel dapat dibisukan.

Untuk mengaktifkan sementara untuk sesi saat ini,

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

Ada sampel lain yang cocok yang dapat Anda coba /usr/share/sounds, misalnya periksa di/usr/share/sounds/gnome/default/alerts/

Perhatikan bahwa beepprogram ini tidak benar-benar diperlukan. Tetapi jika diinstal, itu menggunakan Speaker PC. Itu satu-satunya cara saya dapat menemukan untuk mengaktifkan bel di bawah X:

sudo apt-get install beep

Untuk mengaktifkan secara otomatis saat boot, cukup tambahkan baris di atas di ~/.profile, atau di seluruh sistem Anda/etc/profile


Untuk mengujinya:

printf '\a'

Berbunyi!

beep

Berdengung!

MestreLion
sumber
Untuk secara otomatis mengaktifkan bip speaker PC saat boot, Anda harus benar-benar berkomentar mengatakan baris di /etc/modprobe.d/blacklist.conf bukan batalkan komentar (Anda ingin menonaktifkan daftar hitam, bukan sebaliknya).
z33k
1
kedua solusi bekerja pada Ubuntu 16.04 Catatan: pcspkrdan bell.oggmerupakan pendekatan independen. beepmencoba untuk berbunyi menggunakan berbagai pendekatan misalnya, ioctl(console_fd, KIOCSOUND, period)gunakan pcspkr(suara datang dari speaker PC pada motherboard) sementara printf '\a'metode berbasis dapat bekerja tanpa menggunakan hanya bell.ogg(suara berasal dari speaker biasa). Metode kedua mungkin tidak berfungsi sampai layanan pulseaudio dimulai dan / atau xset b ondijalankan
jfs
Itu pactl upload-sample ...emas bagi saya. Apa cara mengonfigurasikan pemuatan sampel secara permanen lagi?
ulidtko
@ulidtko: Cukup tambahkan garis-garis garis di Anda ~/.profile, atau seluruh sistem di/etc/profile
MestreLion
@MestreLion salah. load-sample bell.ogg /usr/share/sounds/ubuntu/stereo/bell.oggdi /etc/pulseaudio/default.pa.
ulidtko
15

Saya pernah mengalami masalah ini sebelumnya. Dari yang saya ingat, masalahnya adalah bel terminal mencoba untuk membunyikan speaker komputer internal (seperti pada desktop sekolah lama) tetapi laptop dan beberapa komputer baru kehilangan hal semacam itu.

Satu-satunya solusi yang saya temukan pada saat itu adalah untuk sudo apt-get install soxdan

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

misalnya

 play -n synth 0.1 sine 880 vol 0.5
YodaDaCoda
sumber
coba solusi saya - Saya ingin tahu apakah itu berhasil untuk Anda!
JoBu1324
Anda dapat menggunakan tes speaker untuk ini juga
Janus Troelsen
1
Anda juga dapat memiliki nada memetik gitar bagus: play -q -n synth 2 pluck C5. C5 adalah catatannya.
Pablo A
3

Saya akhirnya menemukan solusi, yang tidak perlu alsamixermemiliki opsi Bip PC. Saya pikir saya ingat semua perubahan saya:

batalkan komentar berikut dalam /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

per bug ini , jalankanpactl upload-sample /usr/share/sounds/ubuntu/stereo/bell.ogg bell.ogg

JoBu1324
sumber
Mencoba ini, pactl memberi saya Connection failure: Connection refused pa_context_connect() failed: Connection refused.
YodaDaCoda
Mungkin utas ini akan membantu - jika Anda pernah menjalankan pulseaudio sebagai root.
JoBu1324
Sebenarnya saya mengalami masalah yang berbeda. Pulseaudio melakukan lemparan Failed to open module "module-esound-protocol-unix": file not found. Mungkin tidak layak untuk dibahas di sini karena saya menjalankan 13,04, meskipun saya ingin memverifikasi solusi Anda.
YodaDaCoda
Bagus, hanya sedikit berbeda garis untuk 15,04.
VRR
2

Jika Anda memiliki speaker yang terhubung ke komputer dan Anda tidak mendapatkan bunyi bip, kemungkinan karena Anda menggunakan compiz. Compiz mengandalkan pulseaudio menangkap bunyi bip dan memainkannya sementara metacity melewati pengaturan yang biasa dan menggunakan libcanberra untuk memainkan bunyi bip. Jika itu bekerja dengan metacity dan bukan compiz itu adalah masalah Anda, jika tidak, jawaban yang diberikan htorque adalah benar.

Travis Watkins
sumber
2

" Bip hanya berfungsi jika PC Anda memiliki 'speaker'. Banyak laptop / perangkat kecil modern tidak memilikinya".

Coba mainkan suara seperti ini: play xxxxx.wav Saya menemukan file wav bagus yang tampaknya pendek dan manis, tetapi Anda dapat memilih sendiri. Bekerja untuk saya ketika semuanya gagal.


Terima kasih kepada: tredegar & hk_centos

Pandangan elips
sumber
1

Pendekatan alternatif - atur xterm / konsol Anda ke "Visual Bell" sehingga ketika berbunyi bip, jendela hanya membalikkan warnanya untuk waktu yang singkat.

Saya memiliki fungsi bash yang disebut bip untuk mendapatkan perhatian saya setelah perintah selesai.

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

Dan ini digunakan dengan cara ini

longrun-command ; beep
Criggie
sumber
0

Mungkin terlambat, tetapi bagi lelaki di masa depan yang mencari ini:

printf '\x07'
Schalk
sumber