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%?

  • @Willem
    link
    52 months ago

    Systemd timer to poll upower when running on battery power, when battery is at 20%, use either system beep or set system volume and play a sound?

    • EugeniaOP
      link
      fedilink
      English
      32 months ago

      I’m sure is possible, but I’m actually asking for the exact steps/script, not the general idea. :)

      • @nous@programming.dev
        link
        fedilink
        92 months ago

        Remove the loop and sleep from the script you created so it just runs and exits.

        Then create a file at /etc/systemd/system/battery-alarm.service with the following:

        [Unit]
        Description="Sound alarm when battery is low"
        
        [Service]
        ExecStart=/usr/local/bin/battery-alarm.sh # point this to your script
        

        Then create a file at /etc/systemd/system/battery-alarm.timer with the following:

        [Unit]
        Description="Run battery-alarm.service every 2 mins"
        
        [Timer]
        OnUnitActiveSec=2m
        Unit=battery-alarm.service
        
        [Install]
        WantedBy=multi-user.target
        

        Then sudo systemctl enable --now helloworld.timer to start and enable the timer on boot.

        This will be a little more robust then your current script. It works without the user needing to log in. And there is nothing to get killed so will always trigger. The current script will just silently stop working if it ever gets killed or crashes.