🙌
cuiでもバッテリーを常に確認したい。
cuiかつnoteパソコンで開発したいという人もたまにいるかと思います。
メリットとしては
- 低スペックpcでもちゃんと動く
- htmlなど描画を除けば、vim,tmuxでガリガリ書いても問題ない。
- なんか出来るエンジニアっぽい。
などそれなりのメリットがあります。
ですが、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
Discussion