ส่งเสียงบี๊บในเชลล์สคริปต์ไม่ทำงาน?


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ดังนั้นมันมีลักษณะเช่นนี้:

# เสียงที่น่าเกลียดและเสียงดังรบกวนจิตใจของทุกคน สิ่งนี้ควรทำโดย
# nice pulseaudio bing (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.
Cerin

90

ไม่ใช่การเป็นแฟนของบี๊ป pcspkr ฉันใช้บี๊ปจากหนึ่งในระบบเสียงด้วยคำสั่ง paplay ของเซิร์ฟเวอร์ pulseaudio ที่ติดตั้ง

ก่อนอื่นให้ค้นหาเสียงที่คุณชอบ (คุณสามารถเรียกดู / usr / share / sound สำหรับเสียงที่มีให้เช่น) และสร้างการอ้างอิง

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

จากนั้นให้มันพร้อมใช้งานเป็นคำสั่ง

alias beep='paplay $BEEP'

ตอนนี้ทำงานbeepเมื่อใดก็ตามที่คุณต้องการ ตัวอย่างเช่นเพื่อเตือนคุณเมื่อคำสั่งเสร็จสิ้น:

find . | grep treasure ; beep

1
คุณช่วยให้มันเล่นเสียงนี้เมื่อมีคนวิ่งecho -e '\a'
Flimm

คุณอาจต้องใช้คำสั่งreadในขณะที่ลูปหรือไลบรารี่อื่นที่สามารถติดตามการกดแป้นได้
yuvilio

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เล่นที่ระดับ -12dB)
leftaroundabout

3
การเล่นไฟล์ ogg เหล่านี้อาจส่งผลให้ลำดับความสำคัญสูงกว่าเสียงเตือนของลำโพง PC ภายใน ไม่เพียง แต่ความหน่วงแฝงที่ดูเหมือนจะมีความผันแปรสูง ฉันรับทราบว่าคนส่วนใหญ่ไม่สนใจ แต่เมื่อคุณต้องการเวลาจริงหรือใกล้เวลาจริงการตอบสนองลำโพง PC อาจเป็นตัวเลือกที่ดีที่สุดสำหรับการตอบรับด้วยเสียง
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 Console ( CTRL+ ALT+ F1... F6):

ทำไมมันไม่ทำงานโดยค่าเริ่มต้น

ในฐานะที่เป็นคำตอบอยู่แล้วที่pcspkrเคอร์เนลไดรเวอร์สำหรับลำโพงเครื่องคอมพิวเตอร์ถูกขึ้นบัญชีดำในอูบุนตู

เปิดใช้งานชั่วคราวจนกว่าจะรีบูต:

sudo modprobe pcspkr

เปิดใช้งานโดยอัตโนมัติเมื่อบูต:

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

(ลบหรือแสดงความคิดเห็นpcspkrบรรทัดโดยเติมมันด้วย#)


สำหรับเทอร์มินัล X11 (เช่นค่าเริ่มต้นgnome-terminal)

ทำไมมันไม่ทำงานโดยค่าเริ่มต้น

ภายใต้ X เช่นเมื่อใช้ความสามัคคีของ 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โปรแกรมไม่จำเป็นจริงๆ แต่ถ้าติดตั้งแล้วจะใช้ PC Speaker มันเป็นวิธีเดียวที่ฉันสามารถค้นหาเพื่อเปิดใช้งาน buzzer ภายใต้ X:

sudo apt-get install beep

หากต้องการเปิดใช้งานโดยอัตโนมัติเมื่อบูตเพียงเพิ่มบรรทัดข้างต้นในของคุณ~/.profileหรือทั้งระบบที่/etc/profile


เพื่อทดสอบ:

printf '\a'

เสียงเตือน!

beep

ฉวัดเฉวียน!


ในการเปิดใช้งานเสียงเตือนของลำโพง pc โดยอัตโนมัติในการบู๊ตคุณต้องแสดงความคิดเห็นว่า line ใน/etc/modprobe.d/blacklist.confไม่ใช่การยกเลิกการใส่เครื่องหมายข้อคิดเห็น (คุณต้องการปิดใช้งานการขึ้นบัญชีดำไม่ใช่วิธีอื่น ๆ )
z33k

1
โซลูชันทั้งสองทำงานบน Ubuntu 16.04 หมายเหตุ: pcspkrและbell.oggเป็นแนวทางที่เป็นอิสระ beepพยายามส่งเสียงบี๊บโดยใช้วิธีการต่าง ๆ เช่นioctl(console_fd, KIOCSOUND, period)ใช้pcspkr(เสียงมาจากลำโพง PC บนเมนบอร์ด) ในขณะที่printf '\a'วิธีการที่ใช้อาจทำงานได้โดยไม่ต้องใช้เท่านั้นbell.ogg(เสียงมาจากลำโพงธรรมดา) วิธีที่สองอาจไม่ทำงานจนกว่าจะเริ่มให้บริการ pulseaudio และ / หรือxset b onทำงาน
jfs

มันpactl upload-sample ...เป็นทองคำสำหรับฉัน วิธีกำหนดค่าการโหลดตัวอย่างเป็นการถาวรอีกครั้งคืออะไร
ulidtko

@ulidtko: เพียงเพิ่มบรรทัดบรรทัดเหล่านั้นในของคุณ~/.profileหรือทั้งระบบที่/etc/profile
MestreLion

@ 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 เป็นบันทึก
Pablo A

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


พยายามนี้ pactl Connection failure: Connection refused pa_context_connect() failed: Connection refusedให้ฉัน
YodaDaCoda

บางทีกระทู้นี้อาจช่วยได้หากคุณเคยใช้งาน pulseaudio ในฐานะที่เป็นรูต
JoBu1324

ฉันมีปัญหาแตกต่างกันจริง ๆ แล้ว PulseAudio Failed to open module "module-esound-protocol-unix": file not foundพ่น อาจจะไม่คุ้มค่าที่จะพูดคุยที่นี่ตั้งแต่ฉันใช้ 13.04 แม้ว่าฉันจะชอบที่จะสามารถตรวจสอบการแก้ปัญหาของคุณ
YodaDaCoda

ดีมากบรรทัดที่แตกต่างกันเพียงเล็กน้อยสำหรับ 15.04
VRR

2

หากคุณมีลำโพงจริงเชื่อมต่อกับคอมพิวเตอร์และคุณไม่ได้ยินเสียงบี๊บอาจเป็นเพราะคุณกำลังใช้คอมพิว Compiz ใช้ pulseaudio ในการจับเสียงบี๊บและเล่นมันในขณะที่ metacity ข้ามการตั้งค่าปกติและใช้ libcanberra เพื่อเล่นเสียงบี๊บ ถ้ามันทำงานได้ดีกับ metacity และไม่ใช่ compiz ที่เป็นปัญหาของคุณมิฉะนั้นคำตอบที่ได้ก็คือ


2

เท่าที่ผมสามารถบอกได้ว่านี้เป็นข้อผิดพลาด: เสียงเตือนระบบหักใน Karmic แม้จะมีความพยายามที่กล้าหาญที่จะแก้ไขได้


3
"ไม่เปิดใช้งานโดยค่าเริ่มต้น" ไม่ได้หมายความว่าเสียและไม่จำเป็นต้องมี "ความพยายามอย่างกล้าหาญ": เพียงแค่modprobe pcsprk(ในคอนโซล) หรือpactl upload-sample ...ใน X11 และเสียงบี๊บที่น่ารำคาญก็กลับมาแล้ว :)
MestreLion

2

" ส่งเสียงเตือนจะทำงานเฉพาะในกรณีที่พีซีของคุณมี 'ลำโพง'แล็ปท็อป / อุปกรณ์ขนาดเล็กที่ทันสมัยหลายเครื่องไม่มี"

ลองเล่นเสียงแบบนี้: play xxxxx.wav ฉันพบไฟล์ wav ที่ดีที่ดูเหมือนว่าจะสั้นและหวาน แต่คุณสามารถเลือกเองได้เช่นกัน ใช้งานได้สำหรับฉันเมื่อทุกอย่างล้มเหลว


ขอบคุณ: tredegar & hk_centos


1

อีกทางเลือกหนึ่ง - ตั้งค่า xterm / console เป็น "Visual Bell" เพื่อที่ว่าเมื่อมันจะส่งเสียงบี๊บหน้าต่างจะเปลี่ยนสีในช่วงเวลาสั้น ๆ

ฉันมีฟังก์ชั่นทุบตีที่เรียกว่าบี๊บเพื่อรับความสนใจของฉันเมื่อคำสั่งเสร็จสิ้น

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

และจะใช้วิธีนี้

longrun-command ; beep

0

อาจเป็นไปได้ว่าจะช้าไป แต่สำหรับผู้ชายในอนาคตที่ต้องการสิ่งนี้

printf '\x07'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.