this post was submitted on 01 Oct 2024
39 points (97.6% liked)

Linux

48679 readers
367 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
39
submitted 2 months ago* (last edited 2 months ago) by eugenia@lemmy.ml to c/linux@lemmy.ml
 

I have installed Linux Mint 22 in a DELL laptop with a buggy ACPI implementation (the kernel complains about it during boot). The laptop hangs if it goes to sleep (I tried various Linux distros/kernel-versions, the result is the same).

Because of that, I have disabled SLEEP in the firmware (latest version for that laptop btw). So basically, when you close the lid, nothing happens (it just locks the screen).

However, sometimes you might be in a hurry and you close the lid to do something else, and then you forget about it. The result would be for the battery to run dry, which eventually destroys the battery.

My question is: what would be the best way to setup an audible alarm if the battery reaches 20%?

you are viewing a single comment's thread
view the rest of the comments
[–] eugenia@lemmy.ml 10 points 2 months ago* (last edited 2 months ago) (2 children)

Ok, I managed it by myself after a bit of tinkering. This is the bash script:

#!/bin/bash
while true
    do 
        battery_level=`cat /sys/class/power_supply/BAT0/capacity`
        battery_status=`cat /sys/class/power_supply/BAT0/status`
        if [ $battery_status = "Discharging" ] && [ $battery_level -lt 21 ];
        then
            /usr/bin/aplay  /home/eugenia/Music/alarm.wav
        fi
       sleep 120
    done

Obviously change the path the .wav audio file to suit yours (I downloaded mine from the internet). Then, save the file (in my case, I named it battery.sh), make the script file executable ( chmod +x battery.sh via the terminal, or via the file manager).

Then add it to the Startup Applications settings panel on your distro (usually gnome and cinnamon have one). The alarm will sound if the battery reaches below 21%.

[–] nous@programming.dev 12 points 2 months ago (2 children)

Worth running shell scripts though https://www.shellcheck.net/ (has a cli as well). Finds lots of common issues that can blow up scripts when input is not what you expect. With links to why they make the suggestions they do.

Line 4:
        battery_level=`cat /sys/class/power_supply/BAT0/capacity`
                      ^-- SC2006 (style): Use $(...) notation instead of legacy backticks `...`.

Did you mean: (apply this, apply all SC2006)
        battery_level=$(cat /sys/class/power_supply/BAT0/capacity)
 
Line 5:
        battery_status=`cat /sys/class/power_supply/BAT0/status`
                       ^-- SC2006 (style): Use $(...) notation instead of legacy backticks `...`.

Did you mean: (apply this, apply all SC2006)
        battery_status=$(cat /sys/class/power_supply/BAT0/status)
 
Line 6:
        if [ $battery_status = "Discharging" ] && [ $battery_level -lt 21 ];
             ^-- SC2086 (info): Double quote to prevent globbing and word splitting.
                                                    ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: (apply this, apply all SC2086)
        if [ "$battery_status" = "Discharging" ] && [ "$battery_level" -lt 21 ];
[–] kurwa@lemmy.world 3 points 2 months ago

That's a neat tool!

[–] eugenia@lemmy.ml 3 points 2 months ago (1 children)
[–] nous@programming.dev 9 points 2 months ago

The problem with bash scripts is they tend to explode in unexpected ways when thing don't go as intended. This could be one of the command you run returning some expected or not output which might work now but might not in the future. Best to program bash defensively.

[–] Deckweiss@lemmy.world 3 points 2 months ago* (last edited 2 months ago)

Since you say

change the path the .wav audio file

fyi, the sys BAT paths are also different per laptop. Just in case it doesn't work for somebody else or for you on a different laptop.