ฉันต้องการให้คอมพิวเตอร์ของฉันเล่นไฟล์เสียงที่กำหนดเองเมื่อแบตเตอรี่ต่ำ (พูด 10%) ฉันจะทำสิ่งนี้ได้อย่างไร ขอบคุณ
ฉันต้องการให้คอมพิวเตอร์ของฉันเล่นไฟล์เสียงที่กำหนดเองเมื่อแบตเตอรี่ต่ำ (พูด 10%) ฉันจะทำสิ่งนี้ได้อย่างไร ขอบคุณ
คำตอบ:
ฉันแค่อยากจะตอบเท่าที่ผมใช้คำแนะนำเกี่ยวกับหน้านี้สำหรับการกำหนดค่าของตัวเอง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
เครื่องหมายดอกจันเมื่อเริ่มต้น
เครื่องหมายดอกจันห้าตัวแสดงความถี่ในการเรียกใช้คำสั่ง
*/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 -0
after $(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
วุ้ยความหวังว่าจะเรียงลำดับให้คุณเป็นมันมีสำหรับฉัน !! (ในที่สุด)
คุณสามารถตั้งค่างาน 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% ไฟล์เสียงที่คุณให้จะถูกเล่น!
หวังว่านี่จะช่วยได้!
วิธีง่าย ๆ ในการทำเช่นนี้คือการเพิ่มการตรวจสอบอย่างง่าย ๆ ให้กับ 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 เพื่อออก
สิ่งเพิ่มเติมที่คุณอาจต้องการอ่าน ...
acpi |awk '{print substr($NF, 0, length($NF)-1)}'
-lt "10"]; aplay /home/felipelalli/Music/siren.wav; fi [: นิพจน์จำนวนเต็มที่คาดไว้: ยังคง➜ ~ acpi แบตเตอรี่ 0: การปลดปล่อย 9%, 00:17:56 ที่เหลือ
ที่จริงฉันใช้คำตอบของ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 -e
command
*/5 * * * * /home/user/bin/battery_alert
(อย่าลืมที่จะมีบรรทัดว่างหลังจากคำสั่งนี้)