i3ステータスバーに稼働時間を表示するにはどうすればよいですか?

i3ステータスバーに稼働時間を表示するにはどうすればよいですか?

i3status バーに、一般的な単位でアップタイムを表示したいのですが (1 時間を超える場合は分単位だけでなく、1 分を超える場合は秒単位だけでなく、たとえば 1 時間 2 分 30 秒の場合は「1:02:30」が理想的な時間形式です)。i3status バーにアップタイムを任意の単位で表示する方法さえ見つけることができませんでした。このレポstatus_commandGitHubではこれを実行できると主張しているようですが、これらの設定をコピーすると、この行を実行するのが困難であるというエラーが発生しました。リポジトリの設定つまり、status_command次の行になります。

status_command ~/.i3/i3status.sh ~/.i3/i3status.conf

おそらく、i3 の古いバージョンでのみ動作すると思います。これを行う方法について何かアイデアはありますか?こここれは私の現在の~/.i3status.confファイルです。私のディストリビューションは Gentoo Linux です。

答え1

解決策を見つけました。単に構文を十分に理解していなかっただけです。~/.i3/i3status.shファイルを編集する必要がありました。現在は次のとおりです。

#!/bin/sh

/usr/bin/i3status -c $HOME/.i3status.conf | while :
do
    read line
    RAM=`free -kh | grep Mem | awk '{print $3}'`
    TOTR=$(cat /proc/meminfo | grep MemT | sed 's/.*\://g' | sed 's/ *//g' | sed 's/kB//g')
    TOT=$(octave --eval "$TOTR/1024^2" | sed 's/ans = *//g' | sed 's/$/G/g' )

    # Put uptime
    uptime=`uptime | awk '{print $3 " " $4}' | sed 's/,.*//'`
    hour=$(echo $uptime | sed 's/\:.*//g')
    min=$(echo $uptime | sed 's/.*\://g')
    UP="$hour h $min m"

    # Compile C++ CPU prog and run it
    g++ -o cpu.o $HOME/.i3/cpu.cpp
    CPU=$(./cpu.o)

    printf "%s\n" "Up: $UP | CPU: $CPU% | RAM: $RAM/$TOT | $line"
done

uptimeに最も関係する行は、と最後のコマンドの間です# Put uptime# Compile C++...printf "%s\n"...の完全なi3設定ファイルは以下にあります。このリポジトリ

答え2

私の解決策:

cron.hourly でスクリプトを作成し、/tmp/uptime1 時間ごとにフォーマットされたものを作成し (1 時間以上の精度は必要ありません)、readfile とともに i3status で使用します。

read_file uptime {
        path = "/tmp/uptime"
}

脚本:

#!/bin/sh
awk '{printf("Up %dd:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime > /tmp/uptime

関連情報