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

  • Eugenia@lemmy.mlOP
    link
    fedilink
    English
    arrow-up
    3
    arrow-down
    1
    ·
    11 hours 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
      arrow-up
      7
      ·
      10 hours 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.