Fórum Root.cz

Hlavní témata => Hardware => Téma založeno: jmk 15. 02. 2016, 13:37:40

Název: Debian Jessie - hibernate
Přispěvatel: jmk 15. 02. 2016, 13:37:40
Ahoj,

už několik dní zápasím s hibernací na NB. Mám aktualizovaný Debian 8.3. s Gnome3. Hibernace, kterou vyvolám manuálně tak se korektně provede. Ale při "critical action on battery" se mi NB uspí pouze do suspend. Neprovede hibernaci. V gui klikátku je pochopitelně nastaveno uspávat na disk.
Nevíte, kde se toto nastavuje? Několik slepých uliček jsem již našel, ale žádná nefunguje - např. při použití gconf-editoru v org.gnome.settings-daemon.plugins.power vůbec nemám klíče use-time-for-policy, percentage-critical a další, které se zde běžně nacházejí. Nastavení v /etc/UPower/Upower.conf také nemají žádný efekt.

Stojí za zmínku, že to nikdy nefungovalo, ale nevidím důvod proč ? - když při kritické úrovni baterky se korektně provede suspend  a manuálně vyvolaná hibernace funguje také, tak proč?

Díky za každé nakopnutí!!!
Název: Re:Debian Jessie - hibernate
Přispěvatel: JanS 16. 02. 2016, 13:45:14
Neni nejak spatne nastaven, kdy k automaticke hibernaci ma dojit? Jako ze vi, ze to nestihne pred vybitim baterky.
Dalsi vec co me napada, jestli neni mozne nejakym skriptem sledovat uroven baterky a spustit "manualni" hibernaci skriptem? Hadam...

Se sledovani stavu baterky dovede byt sranda. Me Debian ted sice detekoval stav baterky, ale uz ne pripojeni do site. Takze kdyz jsem se dostal sbaterkou nekde mezi Low a Critical, a strcil adapter do zdi, po nejake dobe na me vyzkoscilo, ze pry "Low battery" :-) Mit na to navazane usinani, to by byla teprve zabava...
Název: Re:Debian Jessie - hibernate
Přispěvatel: jmk 19. 02. 2016, 12:15:18
Event na critical-action je myslím nastaven dobře. Prostě jenom místo Hibernate provede Suspend a v tomto stavu pak vydrží třeba 3-4 hod, než se vybije baterka úplně. Našel jsem i pár návodů jak si napsat vlastní script na sledování úrovně baterky a potom provést hibernaci, ale nechtěl jsem to tak na začátek komplikovat. Sranda je, že když měním parametry v /etc/UPower/Upower.conf tak se všechny změny adekvátně projevují (např. změna úrovně vybití baterky kdy má nastat critical-action) kromě položky, která určuje co dělat při critical action :)) tak fakt nevím kde je zrada.
Název: Re:Debian Jessie - hibernate
Přispěvatel: jmk 29. 04. 2016, 13:56:44
Sice je to už starší post, ale moje řešení by mohlo někomu pomoci. čerpal jsem wiki od Archu (mimochodem velice dobře zpracovaná).

1.Provádění hibernace přes UDEV pravidla, když klesne baterka na určitou úroveň (pro sy:
vytvoříme soubor /etc/udev/rules.d/99-lowbat.rules ---> SUBSYSTEM=="power_supply", ATTR{status}=="Discharging", ATTR{capacity}=="[0-3]", RUN+="/bin/systemctl hibernate"
Položka 0-3 znamená, že se bude spouštět hibernace při 0 až 3 % baterie při nezapojeném adaptéru. vyzkoušeno na několika různých HW (HP a Lenovo) a funguje na 100%.

2. Když už jsem se přehraboval na Arch Wiki tak mně tam upoutal návod na suspend-sedation - což je ve stručnosti funkce, kdy NB provede suspend (automaticky, ručně, po zavření víka - to je jedno) tak po určité době přejde NB ze stavu suspend do stavu hibernate (tedy nepotřebuje žádné napájení). Zde je zapotřebí vytvořit script:

vytvoříme soubor /lib/systemd/system-sleep/suspend-sedation.sh s následujícím obsahem:
#!/bin/bash
# Purpose: Auto hibernates after a period of sleep
# create this file /usr/lib/systemd/system-sleep/suspend-sedation.sh
# make permision chmod u+x,g+x,o+x /lib/systemd/system-sleep/suspend-sedation.sh
# Edit the "autohibernate" variable below to set the number of seconds to sleep.
lockfile=/var/run/systemd/rtchibernate.lock
curtime=$(date +%s)
# 30 min
autohibernate=1800

case $1/$2 in
  pre/suspend)
    # Suspending. Record current time, and set a wake up timer.
    echo "Suspending until" `date -d "$autohibernate seconds"`
    echo "$curtime" > $lockfile
    rtcwake -m no -s $autohibernate
    ;;
  post/suspend)
    # Coming out of sleep
    sustime=$(cat $lockfile)
    echo -n "Back from suspend... "
    rm $lockfile
    # Did we wake up due to the rtc timer above?
    if [ $(($curtime - $sustime)) -ge $autohibernate ]
    then
        # Then hibernate
        echo "hibernate"
        /bin/systemctl hibernate
    else
        echo "wake-up"
        # Otherwise cancel the rtc timer and wake up normally.
        rtcwake -m disable
    fi
    ;;
esac


Proměnnou autohibernate nastavíme počet vteřin po kolika má NB přejít ze stavu suspend do stavu hibernate.
Na závěr se ubezpečíme, že je script spustitelný : sudo chmod u+x,g+x,o+x /lib/systemd/system-sleep/suspend-sedation.sh
Opět vyzkoušeno na různých hardwarech HP a Lenovo a 100% funkční.

Testováno na Debianu Jessie (tedy Systemd) a jeho forcích (LMDE 2 nefunguje zde příkaz /bin/systemctl hibernate).
Pro CentOS 7 a potažmo tedy Fedoru 22 a výše je nutno změnit příkaz /bin/systemctl hibernate na /usr/bin/systemctl hibernate.

3. Ještě nutno změnit parametry v /etc/UPower/UPower.conf následovně :
UsePercentageForPolicy=true (default false)
PercentageLow=10
PercentageCritical=5
PercentageAction=1

Při 10% a 5% baterie dostaneme varování, že bude systém velmi brzo uspán na disk. Při 3% se potom provede hibernace (viz bod č.1). Těsně před samotnou hibernací nedostaneme žádnou notifikaci - podle použitého DE by se musel pozměnit /etc/udev/rules.d/99-lowbat.rules Netušíte někdo jak v Gnome 3.14 a výše poslat ze scriptu notifikaci do notifikačního centra Gnome ? Potom by to už bylo dokonalé.

Snad někomu tento návod pomůže opět více zpříjemnit práci s Linuxem  ;D