ฉันจะเล่นเสียงที่กำหนดเองเมื่อแบตเตอรี่ต่ำได้อย่างไร


13

ฉันต้องการให้คอมพิวเตอร์ของฉันเล่นไฟล์เสียงที่กำหนดเองเมื่อแบตเตอรี่ต่ำ (พูด 10%) ฉันจะทำสิ่งนี้ได้อย่างไร ขอบคุณ

คำตอบ:


6

ฉันแค่อยากจะตอบเท่าที่ผมใช้คำแนะนำเกี่ยวกับหน้านี้สำหรับการกำหนดค่าของตัวเองcrontab -eงาน

ฉันใช้ Lubuntu (เชื่อใจ) และข้างต้นไม่ได้ผลสำหรับฉัน แต่ด้วยการปรับแต่งเล็กน้อย ระดับประสบการณ์ (ใน) ของฉันคือฉันค่อนข้างสามารถอ่านสคริปต์และคำสั่งพื้นฐานได้ แต่ไม่สามารถเขียนได้ตั้งแต่ต้นใน linux disto ฉันพูดถึงว่าเพราะถ้าฉันสามารถ cobble กันปลุกแบตเตอรี่ทำงานส่วนใหญ่คุณอ่านนี้ควรจะสามารถเช่นกัน!

ดังนั้น .... สคริปต์และคำอธิบายพื้นฐาน ....

ตามโพสต์ด้านบนโดย Glutanimate และ Scott Goodgame (ขอบคุณมาก ๆ !) โดยทั่วไปแล้วฉันทำสิ่งต่อไปนี้:

ในการรับ mpg123 และสามารถเล่นเสียงได้:

sudo apt-get install acpi mpg123

ไฟล์ที่จะเปิดเพื่อเขียนคำสั่ง:

crontab -e

คำสั่งที่จะเข้าสู่ตอนท้ายของไฟล์:

*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi

คำอธิบายข้างต้น

เครื่องหมายดอกจันเมื่อเริ่มต้น

เครื่องหมายดอกจันห้าตัวแสดงความถี่ในการเรียกใช้คำสั่ง

  • ดาวดวงแรก = นาที: 0-59
  • ดาวดวงที่สอง = ชั่วโมง: 0-23
  • ดาวดวงที่สาม = วันที่: 0 - 31
  • ดาวดวงที่สี่ = เดือน: 0 - 12
  • ดาวดวงที่ห้า = วันของสัปดาห์: 0 - 6 (0 หมายถึงวันอาทิตย์)

*/1 * * * *

หมายถึง 'เรียกใช้นี้ทุกนาที'

หาก / แล้ว / FI:

IF [ stuff inside these brackets ] ; THEN do something ; FI

ฉันคิดว่าคุณส่วนใหญ่คุ้นเคยกับข้อความ IF / THEN มาก FI ที่ส่วนท้ายสรุปคำสั่ง IF

เล่นเสียง:

mpg123 /home/andy/Alarm.mp3

เพียงใช้mpg123เพื่อเล่นไฟล์ที่เรียกว่าAlarm.mp3อยู่ในไดเรกทอรี/home/andy/ภายใน

ข้อมูลแบตเตอรี่เอาท์พุท:

acpi -b

นี่จะแสดงสถานะของแบตเตอรี่ บนแล็ปท็อปของฉันมันให้ผลลัพธ์เช่น:

Battery 0: Discharging, 74%, 02:35:18 remaining

ไพพ์ถึงคำสั่ง awk

 | awk ' { print ( $(NF-2)-0)}'`  -lt "15"

โอเคเรากำลังส่งออกสถานะของแบตเตอรี่ด้านบนแล้วพิมพ์ค่าที่สอง(NF-2)ซึ่งในตัวอย่างข้างต้นคือ '74% ' อย่างไรก็ตามเราต้องลบ 'เปอร์เซ็นต์' -0 เราต้องการที่จะเปรียบเทียบค่าปัจจุบันมีมูลค่า 15 -lt "15" ดังนั้นเพื่อสรุปเป็นภาษาอังกฤษธรรมดา

หากค่าของแบตเตอรี่น้อยกว่า 15% จากนั้นเล่นไฟล์เสียง

ฉันซาบซึ้งฉันได้ทำมันลดลงบ้างและบางทีคำอธิบายของฉันอาจได้รับการปรับปรุงให้ดีขึ้น แต่หวังว่ามันจะช่วยให้คนอื่นเข้าใจวิธีการเพิ่มสัญญาณเตือนสำหรับแบตเตอรี่และหลีกเลี่ยงแล็ปท็อปของพวกเขา

โชคดี!


แก้ไข

ตกลง ... ดังนั้นปรากฎว่าเมื่อแล็ปท็อปของฉันกำลังชาร์จไฟเอาต์พุตของ

acpi -b

คือ:

Battery 0: Charging, 35%, 01:04:08 until charged

ในขณะที่แบตเตอรี่อยู่

Battery 0: Discharging, 36%, 01:22:36 remaining

ดังนั้นการใช้พารามิเตอร์ที่กล่าวถึงในตอนแรกของ

print ( $(NF-2)-0)

แสดงผลลัพธ์ที่ต่างกันเพราะจำไว้ว่าค่าบิตNF จะระบุจำนวนรายการย้อนหลังจากส่วนท้ายของเอาต์พุตที่จะแสดงดังนั้นด้วยเอาต์พุตบนแบตเตอรี่ของ

Battery 0: Discharging, 36%, 01:22:36 remaining

$(NF-2) แสดงผล '36% 'ขณะที่แล็ปท็อปชาร์จ

Battery 0: Charging, 35%, 01:04:08 until charged

$(NF-2) เอาท์พุท '00: 50: 12 'คือระยะเวลาที่เหลือจนกว่าจะมีการเรียกเก็บเงิน

The -0after $(NF-2)minuses เป็นศูนย์จากค่าดังนั้นเมื่อค่าเป็นเปอร์เซ็นต์-0จะเปลี่ยนจากสิ่งเช่น '36% 'เป็น' 36 ' เมื่อค่าเอาต์พุตถูกรับรู้ว่าไม่ใช่ตัวเลขเช่นเอาต์พุตเวลาของ '01: 04: 08 'ข้างต้นค่า-0ส่งคืนจะเป็น' 0 ' ดังนั้นคุณสามารถเห็นปัญหาของฉัน - เมื่อแล็ปท็อปของฉันมีค่าใช้จ่ายมูลค่าส่งออกจะเป็น '0' เสมอ เนื่องจากฉันต้องการเล่นการเตือนเมื่อค่าเอาต์พุตน้อยกว่า 15 มันแปลเป็นสัญญาณเตือนแบตเตอรีที่จะดับทุก ๆ นาทีเมื่อชาร์จ!

ฉันอ่านเพิ่มอีกเล็กน้อยเกี่ยวกับผลลัพธ์ของawkคำสั่งและปรากฎว่าฉันไม่จำเป็นต้องทำให้มันอ่านค่าที่สองจากจุดสิ้นสุดฉันสามารถเริ่มจากจุดเริ่มต้นของเอาต์พุตและข้ามไปข้างหน้า สิ่งนี้ดีกว่ามากเมื่อสถานะแบตเตอรี่ของฉันเริ่มต้นเหมือนกันไม่ว่าจะเป็นการชาร์จหรือใช้แบตเตอรี่ในแง่ของจำนวนพารามิเตอร์นั่นคือพารามิเตอร์ตัวที่สี่จากจุดเริ่มต้นมักจะเป็นค่าการชาร์จเป็นเปอร์เซ็นต์

ดังนั้น ... เพื่อให้อ่านค่าที่สี่คำสั่งจะเปลี่ยนจาก

awk ' { print ($(NF-2)-0)}'

ถึง

awk ' { print ($4)-0}'

หรือในรัศมีภาพเต็ม:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi

อีกครั้งฉันหวังว่าจะช่วยใครบางคน! ขอให้โชคดีและขอบคุณสำหรับการอ่าน!


โบนัสแก้ไข

โอเคเพิ่มอีกนิดแหย่ไปรอบ ๆ และฉันก็หาวิธีตั้งระดับเสียงเป็น 100% และเปิดเสียงก่อนเล่นสัญญาณเตือน - เพราะงั้นลองหน้ากันดูว่าจุดไหนของสัญญาณเตือนแบตเตอรี่ถ้าคุณไม่ได้ยินเพราะคุณ คุณตั้งระดับเสียงไปที่ระดับต่ำหรือปิดเสียงได้หรือไม่!

อย่างไรก็ตามคำสั่งที่คุณต้องการคือ:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi

อย่างที่คุณเห็นทุกอย่างที่ฉันทำคือใส่สตริงคำสั่ง

pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&

(เป็นการรวม&&หลาย ๆ คำสั่งเข้าด้วยกัน)

ขอให้โชคดีอีกครั้ง!

แก้ไขล่าสุด

ตกลงดังนั้น ... หนึ่งสุดท้าย (หวังว่า!) แก้ไข ... เห็นได้ชัดว่าเครื่องหมายเปอร์เซ็นต์เป็นเครื่องหมายพิเศษเมื่อใช้งาน cron ดังนั้นคุณต้อง 'หลีกเลี่ยง' เครื่องหมายเปอร์เซ็นต์ด้วยการใส่เครื่องหมายแบ็กสแลช ( \) ด้านหน้าแต่ละเครื่องหมาย%ดังนั้นเชลล์จะไม่ตีความผิดพลาด (mis)

ดังนั้นโดยทั่วไปแทนที่

100%

กับ

100\%

ดังนั้นคำสั่งที่คุณต้องการจริงๆคือ:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then pactl set-sink-volume 0 100\% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi

วุ้ยความหวังว่าจะเรียงลำดับให้คุณเป็นมันมีสำหรับฉัน !! (ในที่สุด)


นี่เป็นคำอธิบายที่ดีมาก! แต่น่าเสียดายที่มันยังเล่นเสียงทุกนาทีเมื่อชาร์จด้วย
OpnSrcFan

5

คุณสามารถตั้งค่างาน cron ซึ่งจะตรวจสอบสถานะของแบตเตอรี่หลังจากทุก 5/10 นาทีและจากนั้นขึ้นอยู่กับเปอร์เซ็นต์ของแบตเตอรี่มันจะเล่นเสียงบางอย่าง

ในการเล่นเสียงที่คุณสามารถใช้ได้

mpg123 filename.mp3

เพื่อทำการติดตั้ง

sudo apt-get install mpg123

ในการรับสถานะแบตเตอรี่จากบรรทัดคำสั่งคุณสามารถใช้คำสั่งนี้

upower -i /org/freedesktop/UPower/devices/battery_BAT0

ใช้grepคุณสามารถดึงข้อมูลที่แน่นอนดังต่อไปนี้

upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"

ตอนนี้คุณสามารถใส่สิ่งเหล่านี้ทั้งหมดในเชลล์สคริปต์ (และifเงื่อนไขเพื่อตรวจสอบว่าสถานะแบตเตอรี่ต่ำกว่า 10%) และเพียงแค่กำหนดเส้นทางของเชลล์สคริปต์นี้ไปยังงาน cron

ดังนั้นหลังจากทุก 5 นาที (คุณสามารถเปลี่ยนช่วงเวลานี้) สถานะแบตเตอรี่ของคุณจะถูกตรวจสอบและหากแบตเตอรี่ต่ำกว่า 10% ไฟล์เสียงที่คุณให้จะถูกเล่น!

หวังว่านี่จะช่วยได้!


3
Thats ขวาเพียงคนเย็นใช้ mpg123 :)
สกอตต์ Goodgame

3

วิธีง่าย ๆ ในการทำเช่นนี้คือการเพิ่มการตรวจสอบอย่างง่าย ๆ ให้กับ crontab ของคุณ (cron เป็นระบบที่รันสิ่งต่าง ๆ ตามปกติที่ผู้ใช้กำหนดในพื้นหลัง)

ก่อนอื่นคุณต้องติดตั้งเครื่องเล่น mp3 บรรทัดคำสั่งและ acpi เพื่อให้สามารถอ่านสถานะของแบตเตอรี่ได้

จากเทอร์มินัลให้เรียกใช้สิ่งต่อไปนี้เพื่อติดตั้งแพ็คเกจ

sudo apt-get install acpi mpg123

ถัดไปขณะที่ยังอยู่ในเทอร์มินัลให้พิมพ์crontab -eและป้อนต่อไปนี้ที่ท้ายไฟล์ เพียงเปลี่ยนผู้ใช้เป็นชื่อผู้ใช้ของคุณและ. mp3 เป็นชื่อไฟล์ของคุณในโฮมไดเร็กตอรี่ของคุณ

*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'`  -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3   ;fi

กด Control-O (ตัวอักษร) แล้วกด Enter เพื่อบันทึก กด Control-x เพื่อออก

สิ่งเพิ่มเติมที่คุณอาจต้องการอ่าน ...

Ubuntu CronHowto

คู่มือ Ubuntu


ไม่ทำงานที่นี่: ➜ ~ ถ้า [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; aplay /home/felipelalli/Music/siren.wav; fi [: นิพจน์จำนวนเต็มที่คาดไว้: ยังคง➜ ~ acpi แบตเตอรี่ 0: การปลดปล่อย 9%, 00:17:56 ที่เหลือ
Felipe

2

ที่จริงฉันใช้คำตอบของAndy Pyneแต่มันไม่ได้ผลสำหรับฉัน cron รันโค้ด แต่มันไม่ได้เล่นเสียง ในที่สุดฉันก็พบวิธีแก้ปัญหาและแบ่งปันได้ที่นี่:

ขั้นตอนที่ 1:ติดตั้ง mpg3

sudo apt-get install acpi mpg123

ขั้นตอนที่ 2: บันทึกคำสั่งต่อไปนี้ใน~/bin/battery_alert

#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ `acpi -b | awk ' { print ($3)}'`  == "Discharging," ] ; then
    # Discharging
    # Monitor for low battery
    if [ `acpi -b | awk ' { print ($4)-0}'`  -le "15" ] ; then
        pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_low.mp3 ;
    fi
else
    # Charging
    if [ `acpi -b | awk ' { print ($4)-0}'`  -eq "100" ] ; then
        # Fully charged
        pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_full.mp3 ;
    fi
fi

สคริปต์นี้เล่น battery_low.mp3 หากแล็ปท็อปกำลังชาร์จและชาร์จน้อยกว่าหรือเท่ากับ 15% (หากเชื่อมต่อไฟฟ้ากระแสสลับจะไม่เตือนคุณ) รหัสนี้จะแจ้งเตือนคุณหากค่าใช้จ่ายเป็น 100% หากคุณไม่ต้องการการแจ้งเตือนสำหรับสถานะที่ชาร์จจนเต็มให้ลบส่วนอื่นออกจากรหัสนี้

ขั้นตอนที่ 3:ทำให้ไฟล์ปฏิบัติการได้โดยใช้คำสั่งต่อไปนี้

chmod +x ~/bin/battery_alert

ขั้นตอนที่ 4:เรียกใช้ไฟล์นี้โดยใช้ cron โดยเพิ่มคำสั่งต่อไปนี้ที่ส่วนท้ายของไฟล์ opend by crontrab -ecommand

*/5 * * * * /home/user/bin/battery_alert

(อย่าลืมที่จะมีบรรทัดว่างหลังจากคำสั่งนี้)

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