LINUX.ORG.RU

Автогибернейт при низком заряде батареи


0

1

Раньше юзал laptop-mode, который автоматически гибернейтил ноутбук при низком заряде батареи. Но его работа походу зависела не только от уровня заряда батареи, но и от расположения звезд, потому что при заданных 4% он гибернейтил ноут то при 3%, то при 1%, а то и вообще не успевал. Решил в итоге пересесть на gnome-power-manager, который просто отлично выполнял свои обязанности и чётко при нуле всегда успешно и вовремя гибернейтил систему. Но при обновлении до гном3 оно стало просить запущенный gnome-settings-daemon, который мне нафиг не нужен на моем уютном опенбоксе. Поэтому вопрос: чем можно его заменить?

★★★★★

>чем можно его заменить?

sleepd. Юзал когда-то в Дебиане для этих целей, но в Генте его нет в портедже, да и не нужен стал.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

> xfce-power-manager

Уже пробовал, не запускается:

pevzi@pevzi-laptop:~$ xfce4-power-manager
pevzi@pevzi-laptop:~$ 

> PowerDevil

Наверняка за собой кучу всего тянет. Легковесное что-нибудь бы.

> sleepd

Хм, сейчас попробую, спасибо.

pevzi ★★★★★
() автор топика

используй acpi. Все почему и что будешь понимать.

Tanger ★★★★★
()
Ответ на: комментарий от GotF

Опа, что-то не так было с пакетом (недоустановился походу). Переустановил — все заработало. Ну, сейчас оценю.

pevzi ★★★★★
() автор топика
Ответ на: комментарий от gentoo_root

sleepd что-то не собирается. В принципе, если xfceшный будет нормально работать, на нем и останусь. Жду, пока батарея сядет.

pevzi ★★★★★
() автор топика

На нетпуке использую следущее:

# cat /etc/cron.d/battery

* * * * * /etc/acpi/actions/battery.sh -cronexec

# cat /etc/acpi/actions/battery.sh

#!/bin/bash

charge_full=96
charge_good=33
charge_warn=10
charge_crit=4
charge_susp=2

BAT="/proc/acpi/battery/BAT0"
PATH=/bin:/usr/bin
ICN="/usr/share/icons/gnome/48x48/status"
ICNA="/usr/share/icons/gnome/48x48/actions"
ICND="/usr/share/icons/gnome/48x48/devices"
susp_script="/etc/acpi/actions/lid.sh"
ntf=/usr/bin/notify-send
export DISPLAY=:0
TMP_FILE="/tmp/batt_acpibug.0000"
SLEEPTME=0

dsgncap=$(grep -P 'design capacity:\s+\d+\w+' $BAT/info | grep -oP '\d+')
fullcap=$(grep -P 'last full capacity:\s+\d+\w+' $BAT/info | grep -oP '\d+')
remcap=$(grep -P 'remaining capacity:\s+\d+\w+' $BAT/state | grep -oP '\d+')

if [ -x /usr/bin/bc ]; then
    capper=$(echo "x=${fullcap}/(${dsgncap}/100); scale=0; print (x+0.5)/1;"|bc -l)
    remper=$(echo "x=${remcap}/(${fullcap}/100); scale=0; print (x+0.5)/1;"|bc -l)
else
    let "capper=$fullcap/($dsgncap/100)"
    let "remper=$remcap/($fullcap/100)"
fi

stdmsgp="Remaining capacity: ${remper}% (${remcap} mAh)"
stdmsga="Design capacity:		$dsgncap mAh
Last full capacity:		$fullcap mAh (${capper}%)
Remaining capacity:		$remcap mAh (${remper}%)"

State()
{
    sleep $SLEEPTME
    state=$(grep 'charging state:' $BAT/state | grep -oP '\s+\w+$' | grep -oP '\w+')
}

Cronexec()
{
    State
    if [ x$state = xdischarging ]; then
	if [ $remper -le $charge_susp ]; then
	    $ntf -u critical -i "$ICN/battery-empty.png" \
	    "SUSPEND" "Bye."
	    Str
	elif [ $remper -le $charge_crit ]; then
	    $ntf -u critical -t 64000 -i "$ICN/battery-caution.png" \
	    "BATTERY CAUTION" "$stdmsgp. System will be suspended in ~1 min."
	elif [ $remper -le $charge_warn ]; then
	    ICO=battery-low.png
	    WRD=LOW
	    Ntf
	fi
    fi
}

Str()
{
    $susp_script
}

Ntf()
{
    $ntf -u low -t 8000 -i $ICN/$ICO "BATTERY $WRD" "$stdmsga"
}

Acpid()
{
    if [ ! -f $TMP_FILE ]; then
	touch $TMP_FILE
	SLEEPTME=2
	Mainf
	setsid bash -c "sleep 5 && rm -f $TMP_FILE"&
    fi
}

Mainf()
{
    State
    if [ x$state = xcharged ]; then
	ICO=battery-full-charged.png
	WRD=CHARGED
    elif [ x$state = xcharging ]; then
	WRD=CHARGING

	if [ $remper -ge $charge_full ]; then
	    ICO=battery-full-charging.png
	elif [ $remper -gt $charge_good ]; then
	    ICO=battery-good-charging.png
	elif [ $remper -gt $charge_warn ]; then
	    ICO=battery-low-charging.png
	else
	    ICO=battery-caution-charging.png
	fi

    elif [ x$state = xdischarging ]; then
	WRD=DISCHARGING

	if [ $remper -ge $charge_full ]; then
	    ICO=battery-full.png
	elif [ $remper -gt $charge_good ]; then
	    ICO=battery-good.png
	elif [ $remper -gt $charge_warn ]; then
	    ICO=battery-low.png
	else
	    Cronexec
	fi

    fi

    Ntf
}

case "$1" in
    -cronexec)
	Cronexec
        ;;
    -acpid)
	Acpid
	;;
    -help)
	echo "Usage: $0 {-cronexec|-acpid|-help}"
	;;
    *)
	Mainf
esac

# cat /etc/acpi/actions/lid.sh

#!/bin/sh
# script by Fluxx from linuxquestions slackware forum
# discover video card's ID
ID=`/sbin/lspci | grep VGA | awk '{ print $1 }' | sed -e 's@:@/@'`

# securely create a temporary file
TMP_FILE=`mktemp /tmp/video_state.XXXXXX`
trap 'rm -f $TMP_FILE' 0 1 15

# switch to virtual terminal 1 to avoid graphics
# corruption in X
chvt 1

/sbin/hwclock --systohc

# remove the webcam module
#! rmmod uvcvideo

# write all unwritten data (just in case)
sync

# dump current data from the video card to the
# temporary file
cat /proc/bus/pci/$ID > $TMP_FILE

# suspend-to-ram
# (samwise) not using this it stuffs up the screen brightness
echo -n mem > /sys/power/state

# suspend-to-disk
#echo -n disk > /sys/power/state

# standby
#echo -n standby > /sys/power/state

# force on for now...
xset dpms force on

/sbin/hwclock --hctosys

# restore the webcam module
#! modprobe uvcvideo

# restore video card data from the temporary file
# on resume
cat $TMP_FILE > /proc/bus/pci/$ID

# switch back to virtual terminal 2 (running X)
chvt 6; sleep 2
chvt 7

# remove temporary file
rm -f $TMP_FILE

Второй скрипт показывает уведомления при вставке/отсоединении сетевого шнура и остатке заряда батарей менее 10%, а при заряде менее 4% запускает последний скрипт - усыпляюшший (не мой, если что. Найден где-то в интернетах).

nbw ★★★
()
Ответ на: комментарий от nbw

Зависимость - notify-send, ага. Если есть соответствующие иконки (см. в теле скрипта) - они будут показываться в уведомлениях.

nbw ★★★
()
Ответ на: комментарий от nbw

Ах, да, забыл один элемент (применяется, если нужна обработка событий от acpid)

# cat /etc/acpi/events/battery

event=battery.*
action=/etc/acpi/actions/battery.sh -acpid %e
nbw ★★★
()
Ответ на: комментарий от gentoo_root

Уже собрал. Просто ставил из аура, а там применяется какой-то патч, который устарел и не накладывается. В комментариях выложили другой, им нормально пропатчилось. Жду разряда батареи.

pevzi ★★★★★
() автор топика
Ответ на: комментарий от nbw

Ох, спасибо конечно, но остановлюсь наверно все-таки на чем-нибудь готовом.

pevzi ★★★★★
() автор топика
Ответ на: комментарий от pevzi

>xfce4-power-manager вполне корректно отработал.

Ну так остался бы на нём. Он ещё и заряд батарейки показывает. Или sleepd лучше?

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

А, зачем-то решил попробовать оба (: что лучше — пока не знаю.

Он ещё и заряд батарейки показывает


Для меня не критично, у меня tint2 всю жизнь это делал.

pevzi ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.