J'utilise Ubuntu, mais j'ai i3 comme gestionnaire de fenêtres au lieu d'un environnement de bureau.
Lorsque ma batterie atteint 0 %, l'ordinateur s'éteint brusquement, sans avertissement ou quoi que ce soit.
Existe-t-il un script ou une configuration simple que je peux configurer pour qu'il se mette en veille à, disons, 4 % de batterie ?
Réponse acceptée :
Voici un petit script qui vérifie le niveau de la batterie et appelle une commande personnalisée, ici pm-hibernate
, si le niveau de la batterie est inférieur à un certain seuil.
#!/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
C'est un script très simple, mais je pense que vous avez compris l'idée et que vous pouvez facilement l'adapter à vos besoins. Le chemin vers le niveau de la batterie peut être différent sur votre système. Un peu plus portable serait probablement d'utiliser quelque chose comme acpi | cut -f2 -d,
pour obtenir le niveau de la batterie. Ce script peut être programmé par cron pour s'exécuter toutes les minutes. Modifiez votre crontab avec crontab -e
et ajoutez le script :
*/1 * * * * /home/me/usr/bin/low-battery-shutdown
Une autre solution serait d'installer un environnement de bureau comme Gnome ou Xfce (et de changer votre gestionnaire de fenêtres en i3). Les deux environnements de bureau mentionnés comportent des démons de gestion de l'alimentation qui s'occupent d'éteindre l'ordinateur. Mais je suppose que vous ne les utilisez pas délibérément et que vous recherchez une solution plus minimaliste.
En relation :Comment faire en sorte que les variables d'environnement soient "exportées" dans un script shell ?