Sto usando Ubuntu, ma ho i3 come window manager invece di un ambiente desktop.
Quando la mia batteria raggiunge lo 0%, il computer si spegnerà bruscamente, nessun avviso o altro.
C'è un semplice script o una configurazione che posso impostare in modo che vada a dormire, diciamo al 4% di batteria?
Risposta accettata:
Ecco un piccolo script che controlla il livello della batteria e chiama un comando personalizzato, qui pm-hibernate
, nel caso in cui il livello della batteria sia inferiore a una certa soglia.
#!/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
È un copione molto semplice, ma penso che tu abbia l'idea e puoi adattarla facilmente alle tue esigenze. Il percorso del livello della batteria potrebbe essere diverso sul tuo sistema. Un po' più portabile sarebbe probabilmente usare qualcosa come acpi | cut -f2 -d,
per ottenere il livello della batteria. Questo script può essere programmato da cron per l'esecuzione ogni minuto. Modifica il tuo crontab con crontab -e
e aggiungi lo script:
*/1 * * * * /home/me/usr/bin/low-battery-shutdown
Un'altra soluzione sarebbe installare un ambiente desktop come Gnome o Xfce (e cambiare il gestore delle finestre in i3). Entrambi gli ambienti di destop menzionati sono dotati di demoni di gestione dell'alimentazione che si occupano dello spegnimento del computer. Ma presumo che tu non li usi deliberatamente e cerchi una soluzione più minimalista.
Correlati:come fare in modo che le variabili di ambiente "esportate" in uno script di shell rimangano invariate?