การจัดการพลังงานมีตัวเลือก“ ไม่ทำอะไรเลย” สำหรับแบตเตอรี่ต่ำอย่างยิ่งใน 17.10


10

ฉันใช้ Ubuntu 17.10 กับ Gnome บนแล็ปท็อป Asus

ในอินเทอร์เฟซการตั้งค่าพลังงานภายใต้แท็บพลังงานมีตัวเลือกที่ด้านล่างเพื่อตั้งค่าสิ่งที่ต้องทำในกรณีที่แบตเตอรี่เหลือน้อยมาก

อย่างไรก็ตามเมื่อฉันคลิกที่ดรอปดาวน์เพื่อตั้งค่าตัวเลือกนั้นมีเพียงตัวเลือกเดียวซึ่งก็คือ "ไม่ทำอะไรเลย":

ไม่ทำอะไรเลยตัวเลือกพลังงาน

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

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


แก้ไข: นี่คือเนื้อหาของ/etc/UPower/UPower.confไฟล์ของฉัน:

# Only the system vendor should modify this file, ordinary users
# should not have to change anything.

[UPower]

# Enable the Watts Up Pro device.
#
# The Watts Up Pro contains a generic FTDI USB device without a specific
# vendor and product ID. When we probe for WUP devices, we can cause
# the user to get a perplexing "Device or resource busy" error when
# attempting to use their non-WUP device.
#
# The generic FTDI device is known to also be used on:
#
# - Sparkfun FT232 breakout board
# - Parallax Propeller
#
# default=false
EnableWattsUpPro=false

# Don't poll the kernel for battery level changes.
#
# Some hardware will send us battery level changes through
# events, rather than us having to poll for it. This option
# allows disabling polling for hardware that sends out events.
#
# default=false
NoPollBatteries=false

# Do we ignore the lid state
#
# Some laptops are broken. The lid state is either inverted, or stuck
# on or off. We can't do much to fix these problems, but this is a way
# for users to make the laptop panel vanish, a state that might be used
# by a couple of user-space daemons. On Linux systems, see also
# logind.conf(5).
#
# default=false
IgnoreLid=false

# Policy for warnings and action based on battery levels
#
# Whether battery percentage based policy should be used. The default
# is to use the time left, change to true to use the percentage, which
# should work around broken firmwares. It is also more reliable than
# the time left (frantically saving all your files is going to use more
# battery than letting it rest for example).
# default=true
UsePercentageForPolicy=true

# When UsePercentageForPolicy is true, the levels at which UPower will
# consider the battery low, critical, or take action for the critical
# battery level.
#
# This will also be used for batteries which don't have time information
# such as that of peripherals.
#
# If any value is invalid, or not in descending order, the defaults
# will be used.
#
# Defaults:
# PercentageLow=10
# PercentageCritical=3
# PercentageAction=2
PercentageLow=10
PercentageCritical=3
PercentageAction=2

# When UsePercentageForPolicy is false, the time remaining at which UPower
# will consider the battery low, critical, or take action for the critical
# battery level.
#
# If any value is invalid, or not in descending order, the defaults
# will be used.
#
# Defaults:
# TimeLow=1200
# TimeCritical=300
# TimeAction=120
TimeLow=1200
TimeCritical=300
TimeAction=120

# The action to take when "TimeAction" or "PercentageAction" above has been
# reached for the batteries (UPS or laptop batteries) supplying the computer
#
# Possible values are:
# PowerOff
# Hibernate
# HybridSleep
#
# If HybridSleep isn't available, Hibernate will be used
# If Hibernate isn't available, PowerOff will be used
CriticalPowerAction=HybridSleep

ตรวจสอบสิ่งนี้คือคุณกำลังมองหาaskubuntu.com/questions/92794/ …
Aravind

คำตอบ:


7

ขั้นตอนที่ 1: ตรวจสอบ gsettings

มีสองตัวเลือกที่คุณสามารถตรวจสอบได้ในเครื่อง:

$ gsettings get org.gnome.settings-daemon.plugins.power critical-battery-action
'suspend'
$ gsettings get org.gnome.settings-daemon.plugins.power percentage-low
'10'

จากนั้นให้เปลี่ยนพวกเขาใช้:

$ gsettings set org.gnome.settings-daemon.plugins.power critical-battery-action suspend
$ gsettings set org.gnome.settings-daemon.plugins.power percentage-low 10

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


ขั้นตอนที่ 2: ตรวจสอบ upower

การจัดการพลังงานของ Gnome ใช้upowerเพื่อยกของหนัก เพื่อให้แน่ใจว่ามันกำลังทำงานและรวบรวมสถิติแบตเตอรี่ตามที่ควรใช้:

$ upower -d 
Device: /org/freedesktop/UPower/devices/line_power_ACAD
  native-path:          ACAD
  power supply:         yes
  updated:              Sun 18 Mar 2018 02:28:25 PM MDT (135878 seconds ago)
  has history:          no
  has statistics:       no
  line-power
    warning-level:       none
    online:              yes
    icon-name:          'ac-adapter-symbolic'

Device: /org/freedesktop/UPower/devices/battery_BAT1
  native-path:          BAT1
  vendor:               COMPAL
  model:                PABAS0241231
  serial:               41167
  power supply:         yes
  updated:              Tue 20 Mar 2018 04:12:10 AM MDT (53 seconds ago)
  has history:          yes
  has statistics:       yes
  battery
    present:             yes
    rechargeable:        yes
    state:               charging
    warning-level:       none
    energy:              48.2544 Wh
    energy-empty:        0 Wh
    energy-full:         93.3552 Wh
    energy-full-design:  96.48 Wh
    energy-rate:         0.0044914 W
    voltage:             14.76 V
    percentage:          51%
    capacity:            96.7612%
    technology:          lithium-ion
    icon-name:          'battery-good-charging-symbolic'

Device: /org/freedesktop/UPower/devices/mouse_0003o046Do101Ax0008
  native-path:          /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:046D:C52B.0003/0003:046D:101A.0008
  vendor:               Logitech, Inc.
  model:                Performance MX
  serial:               E6CE4571
  power supply:         no
  updated:              Tue 20 Mar 2018 04:12:09 AM MDT (54 seconds ago)
  has history:          yes
  has statistics:       no
  mouse
    present:             yes
    rechargeable:        yes
    state:               discharging
    warning-level:       none
    percentage:          55%
    icon-name:          'battery-good-symbolic'

Device: /org/freedesktop/UPower/devices/keyboard_0003o046Do2010x0009
  native-path:          /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.2/0003:046D:C52B.0003/0003:046D:2010.0009
  vendor:               Logitech, Inc.
  model:                K800
  serial:               6DB54BFE
  power supply:         no
  updated:              Tue 20 Mar 2018 04:12:09 AM MDT (54 seconds ago)
  has history:          yes
  has statistics:       no
  keyboard
    present:             yes
    rechargeable:        yes
    state:               discharging
    warning-level:       none
    percentage:          90%
    icon-name:          'battery-full-symbolic'

Device: /org/freedesktop/UPower/devices/ups_hiddev3
  native-path:          /sys/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.4/1-1.4.4/1-1.4.4:1.0/usbmisc/hiddev3
  vendor:               CPS
  model:                CP550HGa
  serial:               BFBB104#BI1.g
  power supply:         yes
  updated:              Tue 20 Mar 2018 04:12:51 AM MDT (12 seconds ago)
  has history:          yes
  has statistics:       yes
  ups
    present:             yes
    state:               fully-charged
    warning-level:       none
    time to empty:       37.5 minutes
    percentage:          100%
    icon-name:          'battery-full-charged-symbolic'

Device: /org/freedesktop/UPower/devices/DisplayDevice
  power supply:         yes
  updated:              Tue 20 Mar 2018 04:10:14 AM MDT (169 seconds ago)
  has history:          no
  has statistics:       no
  ups
    present:             yes
    state:               fully-charged
    warning-level:       none
    time to empty:       37.5 minutes
    percentage:          100%
    icon-name:          'battery-full-charged-symbolic'

Daemon:
  daemon-version:  0.99.4
  on-battery:      no
  lid-is-closed:   no
  lid-is-present:  yes
  critical-action: HybridSleep

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


ขั้นตอนสุดท้าย - การไฮเบอร์เนตระดับต่ำ

นี่คือขั้นตอนสุดท้ายซึ่งจะดำเนินการหลังจากหมดขั้นตอนอื่น ๆ ทั้งหมด ขั้นตอนนี้ไม่ต้องใช้อูบุนตูหรือความสามัคคีหรือ Gnome หรือหรือgsettings upowerแต่จะต้องsystemd, udevและcronซึ่งถูกสร้างขึ้นในเกือบทุก Linux Distros มีหรือไม่มี GUI (Desktop)

จากArchLinux :

ไฮเบอร์เนตที่ระดับแบตเตอรี่ต่ำ

หากแบตเตอรี่ของคุณส่งเหตุการณ์ไปที่udevใดก็ตามที่ (dis) ชาร์จ 1% คุณสามารถใช้udevกฎนี้เพื่อจำศีลระบบโดยอัตโนมัติเมื่อระดับแบตเตอรี่มีความสำคัญและป้องกันไม่ให้งานที่ไม่ได้บันทึกทั้งหมดสูญหาย หมายเหตุ:แบตเตอรี่บางรุ่นเท่านั้นที่รายงานเหตุการณ์คายประจุ ทดสอบโดยทำงานudevadm monitor --propertyในขณะที่ใช้แบตเตอรี่และดูว่ามีรายงานเหตุการณ์ใด ๆ คุณควรรออย่างน้อย 1% หากไม่มีการรายงานเหตุการณ์และ/sys/class/power_supply/BAT0/alarmไม่เป็นศูนย์ดังนั้นแบตเตอรี่จะทำให้เกิดเหตุการณ์เมื่อBAT0/energy_nowลดลงต่ำกว่าค่าการเตือนและudevกฎจะทำงานตราบใดที่เปอร์เซ็นต์การคำนวณทางคณิตศาสตร์หมดลง แล็ปท็อปบางตัวมีตัวเลือกสำหรับสิ่งนี้ที่ปิดใช้งานใน BIOS ตามค่าเริ่มต้น

$ cat /etc/udev/rules.d/99-lowbat.rules

# Suspend the system when battery level drops to 5% or lower
SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-5]", RUN+="/usr/bin/systemctl hibernate"

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

แบตเตอรี่สามารถข้ามไปยังค่าที่ต่ำกว่าแทนการปฏิบัติอย่างต่อเนื่องดังนั้นudevรูปแบบการจับคู่สายสำหรับความจุทั้งหมดที่0ผ่านการ5ถูกนำมาใช้

สามารถเพิ่มกฎอื่น ๆ เพื่อดำเนินการที่แตกต่างกันขึ้นอยู่กับสถานะของแหล่งจ่ายไฟและ / หรือความจุ

หากระบบของคุณไม่มีเหตุการณ์ ACPI หรือไม่ใช้cronกับสคริปต์ต่อไปนี้:

#!/bin/sh
acpi -b | awk -F'[,:%]' '{print $2, $3}' | {
    read -r status capacity

    if [ "$status" = Discharging -a "$capacity" -lt 5 ]; then
        logger "Critical battery threshold"
        systemctl hibernate
    fi
}

กิจกรรมการทดสอบ

วิธีหนึ่งในการทดสอบudevกฎคือให้สร้างไฟล์เมื่อรัน ตัวอย่างเช่น:

$ cat /etc/udev/rules.d/98-discharging.rules

SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", RUN+="/usr/bin/touch /home/example/discharging"

สิ่งนี้จะสร้างไฟล์/home/example/dischargingเมื่อถอดปลั๊กเครื่องชาร์จแล็ปท็อป คุณสามารถทดสอบว่ากฎทำงานโดยถอดปลั๊กแล็ปท็อปของคุณและค้นหาไฟล์นี้หรือไม่ สำหรับที่สูงขึ้นudevทดสอบกฎดูudev # ทดสอบกฎก่อนที่จะโหลด

สรุป

มีขั้นตอนเพิ่มเติมในการโพสต์ระหว่างขั้นตอนที่ # 2 และ "ขั้นตอนสุดท้าย" แต่สิ่งเหล่านี้จะโพสต์เมื่อ OP เปิดเผยรายละเอียดเพิ่มเติมหลังจากการทดสอบ ในระหว่างนี้ "ขั้นตอนสุดท้าย" ควรลดคำตอบครึ่งทางเช่นเพียงรายงานเปอร์เซ็นต์ที่เหลืออยู่


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

@Questioner gsettingsเป็นขั้นตอนแรก (ง่าย) ในการตรวจสอบ ฉันได้เพิ่มupowerขั้นตอนต่อไปที่จะทำ
WinEunuuchs2Unix

ขอบคุณสำหรับการอัพเดท ฉันจะทดสอบแล็ปท็อปตามที่คุณแนะนำ ในระหว่างนี้ฉันได้เพิ่มเนื้อหาของ/etc/UPower/UPower.confไฟล์ลงในคำถามของฉัน
ถามคำถาม

@ คำถามฉันวิ่งclipboard-diffระหว่างคุณUPower.confกับเวอร์ชันที่ติดตั้งในระบบของฉัน พวกเขาเหมือนกัน
WinEunuuchs2Unix

@ คำถามคำถามคู่: 1) จะgsettings get org.gnome.settings-daemon.plugins.power activeกลับมาtrue? 2) คุณมี swap partition> ปริมาณ RAM หรือไม่
WinEunuuchs2Unix

3

นี่เป็นสคริปต์ที่เป็นมิตรที่ฉันรวบรวม!

ฉันได้สร้างโซลูชันชั่วคราวเพื่อตรวจสอบว่าแล็ปท็อปของคุณใช้ไฟ AC หรือแบตเตอรี่ (DC) หรือไม่

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

โอ้และถ้าคุณต้องการทำงานต่อในเทอร์มินัลเดียวกับที่คุณรันสคริปต์นี้เพียงแค่เรียกใช้สคริปต์เช่นนั้น:

bash power-notify.sh &

นี่เป็นสคริปต์:

#!/bin/bash
#Get battery percent
bat_percent=$(acpi | awk -F ", " '{print $2}' | tr -d %)


#When to start showing warnings... Example: 10% --> low=10
low=10
#Alert message to show when low percent is reached
alert="Low battery, $bat_percent% left..."

#Check if notify-send is installed
notfiy_send_test=$(which notify-send)
if [ $? != 0 ] 
then
    echo "Please install notify-send..."
    exit 1
fi

acpi_test=$(which acpi)
if [ $? != 0 ]
then
    echo "Please install acpi..."
    exit 1
fi


#Test if cord is plugged in 
plugged=$(acpi -a | awk -F ": " '{print $2}')

if [ $plugged == 'on-line' ]
then
    echo "Your computer is connected to a power source..."
    echo "Exiting..."
    exit 0
fi

while :
do

    if [ $bat_percent -lt $low ]
    then
        notify-send "$alert"
        sleep 15
    else
        #Check every fifteen seconds to use less resources...
        sleep 15
    fi

done

สคริปต์นี้สามารถพบได้ใน GitHub ที่นี่ ...


ระบบที่ใช้งานควรให้คำเตือนในอัตราร้อยละที่กำหนดไว้จากนั้นไฮบริดสลีปที่ 2% ฉันคิดว่านั่นคือสิ่งที่ OP กำลังมองหา สคริปต์ของคุณอาจได้รับการปรับปรุงโดยการจำศีลที่ 2% นอกจากนี้ฟองคำเตือนทุก ๆ 15 วินาทีก็เป็น IMO ที่รุนแรง ฟองข้อความ t 9%, 8%, 7% ... 3% น่าจะเป็นประโยชน์ได้มากกว่านี้ฉันคิดว่า เสียงเตือนของระบบจะช่วยให้คนไม่มองแล็ปท็อปในเวลานั้น สคริปต์นี้มีส่วนประกอบบางส่วนที่ฉันแนะนำ: askubuntu.com/questions/837078/…
WinEunuuchs2Unix

@ WinEunuuchs2Unix เป็นสคริปต์ง่ายๆ
NerdOfCode

ฉันเดาว่าสคริปต์ของคุณและสคริปต์ของฉันที่ฉันลิงก์ไว้ในความคิดเห็นล่าสุดนั้นถือว่าเป็นเรื่องง่ายโดยผู้เชี่ยวชาญ ฉันไม่แน่ใจว่าสคริปต์ที่คุณเรียกว่า "ง่าย" แม้ว่า?
WinEunuuchs2Unix

สคริปต์ของฉันอย่างแน่นอน
NerdOfCode

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