Linuxのtmuxでstatus-lineにSSIDと電波強度を表示する

tmuxを使うときにstatus-lineにSSIDなどの情報を表示している人を見かけて,自分もLinuxのターミナルで表示できたらいいなと思ってましたが, 調べても出てくるのはMacで使えるスクリプトばかりでLinux用はないのかなと思いました .
探せば出てくるだろうとは思いますが,それだったら自分で作ってしまえということでスクリプトを作って表示してみました.

スクリプトgithubにあります.

github.com

スクリプトの作成

SSIDと電波強度を取得するシェルスクリプトを作って,.tmux.confスクリプトを呼び出せばstatus-lineに出力されます.
正規表現をまともに使ったことがないのでなんじゃこりゃと思われるかもしれません...)

#!/bin/sh

function get_airport_status() {
    if [ -z $(iwconfig wlp5s0 | grep -o unassociated) ]; then
        ssid=`iwconfig wlp5s0 | grep -oP '(?<=").+(?="\s)'`
        rssi=`iwconfig wlp5s0 | grep -oP '(?<=level=)\d+(?=/100\s)'`
        signals=(▂ ▃ ▄ ▆ █ ▁)
        signal=""
        rssi_=$((rssi / 20 + 1))
        if [ $((rssi % 20)) -eq 0 ] && [ ${rssi_} -gt 1 ]; then
            rssi_=$((rssi_ - 1))
        fi
        for ((i=0; i < 5; i++)); do
            if [ $i -lt ${rssi_} ]; then
                signal=${signal}${signals[$i]}
            elif [ $i -ge ${rssi_} ]; then
                signal=${signal}${signals[5]}
            fi
        done
        airport=" #[fg=colour10,underscore]${ssid}#[default] | ${signal} "
    else
        airport="#[fg=red,bold]  #[default]"
    fi
    echo "#[bold]|#[default]${airport}#[bold]|#[default]"
}

function main() {
    local airport=$(get_airport_status)
    echo "${airport}"
}

main $@

自分の環境ではwlp5s0だったので使用する際はifconfigなりiwconfigなどで調べて適宜変えてください.
Unicodeの0x2581~0x2588のブロック要素を使っています.
vimで編集するときは Ctrl+v u 文字コードで入力できます.

  • iwconfigコマンドはネットワークインターフェースの情報を取得することが出来ます.そこでgrepコマンドでSSIDとSignal Levelの値を抜き出す.
  • 電波強度は0~100の範囲で値を取れるので,5段階に分けブロックで可視化する.

.tmux.confの設定

作成したスクリプトを.tmux.confで呼び出すように設定を書き加えます.

# status-rightの設定
set-option -g status-right-length 65
set-option -g status-right "#[fg=cyan]#H#[default]#(sh ~/.dotfiles/tmux_status_line)#[fg=cyan]%Y/%m/%d %H:%M:%S#[default]"

色の指定はtmux.confスクリプトのどちらで指定しても反映されます.

#(sh script)のように記述することで指定したスクリプトを実行してくれます.
tmuxを起動するとstatus-lineに以下の画像のように表示されると思います.

f:id:mryyomutga:20181111015343j:plain