ฉันต้องการกำหนดค่า i3WM เพื่อตั้งค่าระดับเสียงสูงสุด (เช่น 150%) ดังนั้นฉันจะไม่เพิ่มระดับเสียงเป็นมูลค่ามหาศาลโดยไม่ตั้งใจ ฉันสร้างสคริปต์ทุบตีซึ่งการดำเนินการเชื่อมโยงกับปุ่ม volume_up องค์ประกอบทั้งหมดทำงานได้ดีแยกกัน แต่เมื่อฉันรวมทุกอย่างเข้าด้วยกัน มีบางอย่างผิดปกติ
รหัสสคริปต์ทุบตี:
#!/bin/bash
max_volume_pc=$1
current_volume_pc=$(รายการ pactl จม | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1 )) | tail -n 1 | sed -e 's,.* \( [0-9][0-9]*\)%.*,\1,')
ถ้า (($current_volume_pc < $max_volume_pc-10)) ; แล้ว
pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3สถานะ
อื่น
a=$(($max_volume_pc - $current_volume_pc))
pactl set-sink-volume @DEFAULT_SINK@ +$a% && $refresh_i3status
ไฟ
ผูกในไฟล์กำหนดค่า i3:
bindsym XF86AudioRaiseVolume exec ~/.config/i3/custom_configs/volume_up.sh 150
อะไรที่ใช้ได้ดี:
- การเพิ่มจำนวนเมื่อผูกเป็นเพียงคำสั่งเดียวสำหรับการเพิ่มระดับเสียงด้วย pactl (ไม่มีสคริปต์ทุบตีใด ๆ เพียงแค่เรียกใช้คำสั่ง pactl ในไฟล์กำหนดค่า i3 เช่นเดียวกับคำสั่งในคำสั่ง if ด้านบน)
- ดำเนินการเฉพาะสคริปต์ทุบตีด้านบนจากเทอร์มินัล
- ดำเนินการทุกอย่างพร้อมกัน แต่เมื่อ
current_volume_pc
ฮาร์ดโค้ดเป็นค่าบางอย่าง
ดังนั้นทุกอย่างจึงชี้ไปที่ปัญหาในการรับค่าปริมาณปัจจุบันเมื่อเรียกใช้สคริปต์ผ่านการกระทำที่ผูกกับคีย์ แต่ฉันไม่รู้ว่าจะแก้ไขอย่างไร นอกจากนี้ยังไม่มีข้อผิดพลาดในการสื่อสารจาก i3 และระบบปฏิบัติการของฉันคือ Ubuntu 20.04 หากข้อมูลเหล่านี้จะเป็นประโยชน์กับใครบางคน ฉันยังลองใช้วิธีอื่นในการผูกไวยากรณ์ แต่ผลลัพธ์ก็เหมือนเดิมเสมอ และไวยากรณ์ที่ให้ไว้ด้านบนดูเหมือนจะเป็นตรรกะที่สุดสำหรับฉัน
ฉันยังพบ reddit ด้วยคำถามที่คล้ายกันที่นี่: https://www.reddit.com/r/i3wm/comments/dens5j/limiting_pulseaudio_max_volume/แต่ฉันไม่เข้าใจว่าเกิดอะไรขึ้นในไฟล์ของ dikduk และฉันคิดว่าเป็นการดีกว่าสำหรับฉันที่จะขอความช่วยเหลือในการแก้ไขปัญหาของตัวเอง แทนที่จะคัดลอกวิธีแก้ปัญหาของคนอื่นมาวาง