Setting a battery charge limit on Ubuntu
Jul 23, 2023
날씨가 무더워져서 그런지 리튬 배터리들이 두 개나 부풀어 있었다. 덕택에 노트북 상판도 뒤틀리고 아무튼.. 배터리가 부푸는 현상(battery swelling)을 원천적으로 방지하는 방법은 없다고 한다. 배터리 수명이 다하면서 필연적으로 발생하게 된다는 것. 두 사례의 공통점이 다소 고온인 환경 & 오랫동안 AC 전원에 연결했었기 때문에 과충전하고 연관이 있을 것으로 추측한다. 랩탑은 NAS 및 서버 대용으로 활용하고 있기 때문에 배터리가 필요하긴 해서, 충전 제한 옵션을 거는 방법을 찾아 보았다.
/sys/class/power_supply
에 가면 AC와 BAT0 (배터리 여러 개 장착 가능한 모델은 BAT1이 있을 수도 있다)이 있고, BAT0에 들어가서 보면, charge_stop_threshold
라는 파일이 있다. 기본값은 100으로 되어 있는데 이를 80으로 수정하였음. 즉, 100% 대신 80% 까지만 충전한다는 뜻이다.
재부팅하면 기본값 100으로 돌아가기 때문에 Cron을 이용해서 재부팅될 때마다 80으로 설정하도록 해야한다.
$ sudo crontab -e
(/sys/class/… 의 파일을 수정하기 때문에 root user로 crontab을 편집해야한다)
아래 내용을 추가한다.
@reboot echo 80 > /sys/class/power_supply/BAT0/charge_stop_threshold
유저 레벨에서 설정한 cron 내용은 /var/spool/cron/crontabs
에서 찾아볼 수 있다. 시스템 관련 cron 내용은 /etc/crontab
, /etc/cron.d
, /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
등이 있는데 여기는 파일 형식이 다소 달라 user를 명시하도록 되어있다.
(예)
17 * * * * root cd / && run-parts --report /etc/cron.hourly
다른 온라인 자료에서는 @reboot root echo 80 > /sys/class/power_supply/BAT0/charge_stop_threshold
로 하라는데, @reboot <user_name> <command>
의 @reboot <command>
에서 모호성이 발생하게 된다. 파일이 애초에 다르기 때문에 interactive mode에서 생성한 cron 설정 파일과 /etc에 들어있는 설정 파일의 문법이 그냥 살짝 다른 것.