ฉันจะเรียกใช้สคริปต์เมื่อแหล่งจ่ายไฟเสียบปลั๊กหรือออกได้อย่างไร


8

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

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

สิ่งที่ฉันสามารถคิดออกได้คือฉันสามารถค้นหาสถานะของแบตเตอรี่ด้วย

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

ขึ้นอยู่กับว่าเสียบอะแดปเตอร์ AC หรือไม่ฉันไม่รู้ว่ามันมีประโยชน์หรือไม่ แต่มันก็เจ๋งดีและฉันไม่รู้วิธีใช้grepมาก่อน

อย่างไรก็ตามมีวิธีที่ค่อนข้างสะอาดในการทำเช่นนี้หรือไม่? โดย "วิธีที่สะอาด" ฉันหมายถึงวิธีที่หนึ่งที่มีประสบการณ์สคริปต์ทุบตี จำกัด สามารถเข้าใจ

หนึ่งคำถามที่คล้ายกันฉันพบว่ามีคำตอบที่ดีคือคำถามนี้ซึ่งกล่าวว่าต่อไปนี้:

เมื่อคุณเสียบอะแดปเตอร์ AC เข้า / ออกสคริปต์ที่/etc/pm/power.dถูกเรียกด้วย> อาร์กิวเมนต์: "true" (ถ้าคุณใช้แบตเตอรี่) หรือ "false" (ถ้าคุณใช้อะแดปเตอร์ไฟ)

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

คำตอบ:


5

คุณสามารถใช้on_ac_powerเพื่อเรียกใช้สคริปต์เมื่อไฟเปิดหรือปิด

ลองทำสิ่งต่อไปนี้ในเทอร์มินัล

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

จากนี้คุณสามารถสร้างสคริปต์ของคุณเป็น

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

แก้ไข: [แนะนำโดยKasiyA ]

cron job จะเป็นความคิดที่ดีกว่าสำหรับการเรียกใช้สคริปต์ในช่วงเวลาปกติแทนที่จะใช้การวนซ้ำไม่สิ้นสุด

บันทึกสคริปต์ของคุณmyscript.shและวางเนื้อหาต่อไปนี้ไว้ในสคริปต์

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

chmod +x /path/to/myscript.shทำให้ปฏิบัติการสคริปต์จากขั้ว เปิดส่วนบุคคลของคุณcrontabเป็นEDITOR=gedit crontab -eและผนวกบรรทัดต่อไปนี้เพื่อเรียกใช้สคริปต์ของคุณทุกนาที

* * * * * /path/to/myscript.sh 

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

@TheQZ: ผมคิดว่า 'souravc' ได้ให้พื้นฐาน idea..you สามารถเขียนของคุณเองบนพื้นฐานนี้ :)
heemayl

@TheQZ แม้ว่ามันจะทำงานตลอดไป แต่จะใช้งานเพียงครั้งเดียวต่อ 10 วินาที (คุณสามารถเพิ่มเวลาในการตรวจสอบ) ดูที่คำถามวิธีการทำซ้ำ-a-คำสั่งทุก-x-ช่วงของเวลา มิฉะนั้นคุณต้องเขียนโปรแกรมภูตของคุณเองซึ่งซับซ้อนมากสำหรับผู้เริ่มต้น
souravc

@TheQZ คุณสามารถใช้คำตอบsouravcเป็นงานcron ดูส่วนที่สองของคำตอบของฉัน
αғsнιη

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