GNU/Linux >> Znalost Linux >  >> Ubuntu

Ubuntu – Jak přepnout notebook do režimu spánku, když dosáhne prahu nízké úrovně baterie?

Používám Ubuntu, ale jako správce oken mám místo desktopového prostředí i3.

Když moje baterie dosáhne 0 %, počítač se prostě náhle vypne, bez varování nebo tak.

Existuje nějaký jednoduchý skript nebo konfigurace, kterou mohu nastavit tak, aby přešel do režimu spánku, řekněme při 4% baterie?

Přijatá odpověď:

Zde je malý skript, který kontroluje úroveň baterie a volá vlastní příkaz, zde pm-hibernate , v případě, že je úroveň baterie pod určitou hranicí.

#!/bin/sh

###########################################################################
#
# Usage: system-low-battery
#
# Checks if the battery level is low. If “low_threshold” is exceeded
# a system notification is displayed, if “critical_threshold” is exceeded
# a popup window is displayed as well. If “OK” is pressed, the system
# shuts down after “timeout” seconds. If “Cancel” is pressed the script
# does nothing.
#
# This script is supposed to be called from a cron job.
#
###########################################################################

# This is required because the script is invoked by cron. Dbus information
# is stored in a file by the following script when a user logs in. Connect
# it to your autostart mechanism of choice.
#
# #!/bin/sh
# touch $HOME/.dbus/Xdbus
# chmod 600 $HOME/.dbus/Xdbus
# env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
# echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus
# exit 0
#
if [ -r ~/.dbus/Xdbus ]; then
  . ~/.dbus/Xdbus
fi

low_threshold=10
critical_threshold=4
timeout=59
shutdown_cmd='/usr/sbin/pm-hibernate'

level=$(cat /sys/devices/platform/smapi/BAT0/remaining_percent)
state=$(cat /sys/devices/platform/smapi/BAT0/state)

if [ x"$state" != x'discharging' ]; then
  exit 0
fi

do_shutdown() {
  sleep $timeout && kill $zenity_pid 2>/dev/null

  if [ x"$state" != x'discharging' ]; then
    exit 0
  else
    $shutdown_cmd
  fi
}

if [ "$level" -gt $critical_threshold ] && [ "$level" -lt $low_threshold ]; then
  notify-send "Battery level is low: $level%"
fi

if [ "$level" -lt $critical_threshold ]; then

  notify-send -u critical -t 20000 "Battery level is low: $level%" 
    'The system is going to shut down in 1 minute.'

  DISPLAY=:0 zenity --question --ok-label 'OK' --cancel-label 'Cancel' 
    --text "Battery level is low: $level%.nn The system is going to shut down in 1 minute." &
  zenity_pid=$!

  do_shutdown &
  shutdown_pid=$!

  trap 'kill $shutdown_pid' 1

  if ! wait $zenity_pid; then
    kill $shutdown_pid 2>/dev/null
  fi

fi

exit 0

Je to velmi jednoduchý skript, ale myslím, že ten nápad pochopíte a snadno ho přizpůsobíte svým potřebám. Cesta k úrovni baterie se může ve vašem systému lišit. Trochu přenosnější by pravděpodobně bylo použít něco jako acpi | cut -f2 -d, k získání úrovně baterie. Tento skript může být naplánován cronem tak, aby se spouštěl každou minutu. Upravte svůj crontab pomocí crontab -e a přidejte skript:

*/1 * * * * /home/me/usr/bin/low-battery-shutdown

Dalším řešením by bylo nainstalovat desktopové prostředí, jako je Gnome nebo Xfce (a změnit správce oken na i3). Obě zmíněná destop prostředí obsahují démony správy napájení, které se starají o vypnutí počítače. Předpokládám však, že je záměrně nepoužíváte a hledáte minimalistické řešení.

Související:Jak zajistit, aby proměnné prostředí „exportovaly“ ve skriptu shellu?
Ubuntu
  1. Ubuntu Server 13.10 nyní přejde do režimu spánku při zavření víka notebooku?

  2. Jak přimět Ubuntu, aby rozpoznalo síťovou kartu Wifi?

  3. Jak zablokovat Ubuntu?

  1. Přizpůsobte si terminál na Ubuntu 20.04 – jak na to?

  2. Metody kontroly stavu baterie notebooku na Ubuntu 20.04 LTS?

  3. Jak udělám, aby Ubuntu vypadalo hezky?

  1. Jak nainstalovat Nagios na Ubuntu 14.04

  2. Jak nainstalovat Nagios na Ubuntu 16.04

  3. Ubuntu – Jak vytvořit shell, který se bude zobrazovat ve vlastní distribuci (linux)??