Linuxのtmuxでstatus-lineにSSIDと電波強度を表示する
tmuxを使うときにstatus-lineにSSIDなどの情報を表示している人を見かけて,自分もLinuxのターミナルで表示できたらいいなと思ってましたが,
調べても出てくるのはMacで使えるスクリプトばかりでLinux用はないのかなと思いました .
探せば出てくるだろうとは思いますが,それだったら自分で作ってしまえということでスクリプトを作って表示してみました.
スクリプトの作成
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に以下の画像のように表示されると思います.