cuiでもバッテリーを常に確認したい。


cuiかつnoteパソコンで開発したいという人もたまにいるかと思います。
メリットとしては

  1. 低スペックpcでもちゃんと動く
  2. htmlなど描画を除けば、vim,tmuxでガリガリ書いても問題ない。
  3. なんか出来るエンジニアっぽい。

などそれなりのメリットがあります。
ですが、cuiのときに画面上で電源を確認する方法が限られるので、半ば億劫な方もいるかと思います。
upower, acpiなどのコマンドをいちいち打ってられないと。
そのための解決方法をここに書きます。

やり方

acpiコマンド、upowerコマンドを使って、PS1に充電残量の文字列を入れたらいけそう。

バッテリー残量表示関数

充電残量の表示はacpiを使っている場合とupowerを使っている場合があります。
osからするとメジャーな方を使いましょう。
下記のような関数を設定するとacpiとupowerの差を吸収できます。
この関数を.bashrcなどで自動で読み込まれるようにしておきます。

function cui_battery_info {
  if command -v upower > /dev/null; then

    # バッテリー残量
    local percentage=$(
      upower -i /org/freedesktop/UPower/devices/battery_BAT0 | \
        grep "percentage:" | \
        rev | cut -d ' ' -f 1 | rev
    )
    local timeto
    local sentense=remaing
    timeto=$(
      upower -i /org/freedesktop/UPower/devices/battery_BAT0 | \
        grep "time to empty:" | \
        rev | cut -d ' ' -f 1-2 | rev
    )
    if [ -z "${timeto}" ]; then
      timeto=$(
        upower -i /org/freedesktop/UPower/devices/battery_BAT0 | \
          grep "time to full:" | \
          rev | cut -d ' ' -f 1-2 | rev
      )
      sentense=charging
    fi
    echo $timeto $sentense \($percentage\)
  elif command -v acpi > /dev/null; then

    local percentage=$(acpi | awk -F, '{print $2}' | sed 's/ //g')
    local timeto
    local sentense=remaing
    timeto=$(acpi | awk -F, '{print $3}' | cut -d ' ' -f 2)
    if acpi | grep Charging > /dev/null; then
      sentense=charging
    fi
    echo $timeto $sentense \($percentage\)
  else
    echo "acpi and upower command not found." >&2
    return 127
  fi
}

PS1の変更

~/.bashrcに書くのが一般的かと思います。

grub側で設定がGUIでない場合か、systemdでGUIでない場合はバッテリー残量が
プロンプトの$の前に電池残量が表示されるようになります。

~/.bashrc
# example write ~/.bashrc
systemd_unit=$(cat /proc/cmdline | xargs -n 1 | grep systemd.unit | cut -d '=' -f 2)
if [ "graphical.target" != "$(systemctl get-default)" ] || [ ! -z $systemd_unit ] && [ "graphical.target" != "$systemd_unit" ]; then
  if ! echo $PS1 | grep battery > /dev/null; then
   export PS1="(battery: \$(cui_battery_info))${PS1}"
  fi
fi

ソースコード

最新のソースコードは下にあります。
github