GeekToolとは
GeekToolはデスクトップを好きに着飾ることができるアプリです。
かなり有名なものだと思います。
イメージとしてはWindowsVistaのガジェットが近いと思います。
インストール
公式サイトからDownloadしてインストールしてください。
設定
アプリケーションを起動すると↓の様なウィンドウが立ち上がります。
左側に表示されているアイコンをデスクトップ上にドラッグ&ドロップすることで、表示領域を確保することができます。
各項目の内容は以下の様な感じです。
- Geeklets
- File
- テキストを表示する
- Image
- 画像を表示する
- Shell
- シェルスクリプトの実行結果を表示する
- File
- Manage group
- 表示項目をグループ分けして、個別に有効/無効の設定ができる
- チェックボックス
- Enable
- 有効 / 無効
- Automaticaly launch at login
- ログイン時に自動起動するか(何故か毎回チェックが外れてる…)
- Show in menu bar
- メニューバーに起動アイコンを設置するかどうか
- Enable
また、各ウィンドウを設置すると詳細設定が出てきます。今回は割愛(逃)!
※ シェルスクリプトの場合、定期実行させないとリアルタイム性がありませんのでご注意を。
本題
せっかくシェルスクリプトが動くなら何かかっこいいことしようぜ!
ということで、コマンドとかシェルスクリプトとかをちょこっとかじりながら書いてきたものです。
もっとうまくやれると思いますが、残念な部分は大目に見てください。
1. PROCESS MONITOR
###イメージ
スクリプト
psの出力結果を表示するだけ!ですがひと工夫!
#!/bin/sh
ps -acrxo "command pid %cpu %mem time" | grep -vw "grep\|top\|ps" | head -11
ps
プロセスを出力するコマンド
利用しているオプション
- a: 自分以外のユーザーのプロセスも表示
- c: コマンド名のみを表示
- r: 実行中のプロセスのみ表示
- x: 制御端末のないプロセスの情報も表示
- o: 出力フォーマットの指定
grep
行の抽出を行うコマンド
利用しているオプション
- v: マッチしないものを表示
- w: 単語で検索
head
指定した行数分、上から表示するコマンド
利用しているオプション
- -11: カラム名+抽出された上位10プロセス(計11行)を表示
2. NETWORK MONITOR
イメージ
スクリプト
#!/bin/sh
ext_info=`curl --silent api.ipify.org --max-time 5`
en0_info=`ifconfig en0 |grep inet |grep netmask |grep -v 127.0.0.1 |awk '{print $2}'`
en2_info=`ifconfig en2 |grep inet |grep netmask |grep -v 127.0.0.1 |awk '{print $2}'`
wait
if [ -n "$ext_info" ];
then
echo "External : $ext_info"
else
echo "External : OFFLINE"
fi
unset ext_info
if [ -n "$en0_info" ];
then
wifi_network=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I |awk -F: '/ SSID: / {print $2}' |sed -e 's/.*SSID: //'`
wifi_txRate=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I |awk -F: '/ lastTxRate: / {print $2}' |sed -e 's/.*lastTxRate: //'`
wifi_maxRate=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I |awk -F: '/ maxRate: / {print $2}' |sed -e 's/.*maxRate: //'`
wifi_channel=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I |awk -F: '/ channel: / {print $2}' |sed -e 's/.*channel: //' -e 's/,1//'`
echo "Wi-Fi : $en0_info"
echo "- SSID :$wifi_network"
echo "- Channel :$wifi_channel"
echo "- Transmit Rate :$wifi_txRate"
echo "- Max Rate :$wifi_maxRate"
unset wifi_network
unset wifi_txRate
unset wifi_maxRate
unset wifi_channel
else
echo "Wi-Fi : INACTIVE"
fi
unset en0_info
if [ -n "$en2_info" ];
then
echo "Ethernet : $en2_info"
else
echo "Ethernet : INACTIVE"
fi
unset en2_info
3. USAGE MONITOR
イメージ
スクリプト
#!/bin/sh
myData=`top -l 1`
typeset -i cnt=0
echo "CPU \c"
myCPU=`echo "$myData" |awk -F '[ % ]' '/CPU usage/ {print $3+$6}' |bc`
myCPU=`echo "tmp=$myCPU; tmp /= 1; tmp" |bc`
while [ $cnt -lt $myCPU ]
do
echo "\033[1;32m|\033[0m\c"
cnt=`expr $cnt + 5`
done
while [ $cnt -lt 99 ]
do
echo "|\c"
cnt=`expr $cnt + 5`
done
printf %6d $myCPU && echo "%\c"
echo "\r"
unset myCPU
cnt=0
echo "Memory \c"
# カーネル, OS系使用量
myWiredMem=`echo "$myData" |grep "PhysMem" |sed -e "s/(//g" |awk '{print $4}' |sed s/M// |sed s/\(//`
myUsedMem=`echo "$myData" |awk '/PhysMem/ {print $2}' |egrep "[0-9]M" |sed s/M//`
myFreeMem=`echo "$myData" |awk '/PhysMem/ {print $6}' |egrep "[0-9]M" |sed s/M//`
myTotalMem=`sysctl hw.memsize |awk '{print $2}'`
myTotalMem=`echo "tmp=$myTotalMem; tmp /= 1048576; tmp" |bc`
# Macが10Gと省略し始めるので頑張ってみた
if [ ! -n "$myUsedMem" -a -n "$myFreeMem" ]; then
myUsedMem=`echo |awk '{print t - f - a}' t=$myTotalMem f=$myFreeMem a=$myWiredMem`
fi
if [ ! -n "$myFreeMem" -a -n "$myUsedMem" ]; then
myFreeMem=`echo |awk '{print t - u - a}' t=$myTotalMem u=$myUsedMem a=$myWiredMem`
fi
myUsedPer=`echo "tmp=($myUsedMem * 100 / $myTotalMem); tmp" |bc`
myWiredUsedPer=`echo "tmp=($myWiredMem * 100 / $myTotalMem); tmp" |bc`
myTotalUsedPer=`echo |awk '{print a + u}' a=$myWiredUsedPer u=$myUsedPer`
while [ $cnt -lt $myTotalUsedPer ]
do
if [ $cnt -lt $myUsedPer ];
then
echo "\033[1;32m|\033[0m\c"
else
echo "\033[0;36m|\033[0m\c"
fi
cnt=`expr $cnt + 5`
done
while [ $cnt -lt 99 ]
do
echo "|\c"
cnt=`expr $cnt + 5`
done
printf %6d $myTotalUsedPer && echo "%\c"
echo "\r"
unset myData
unset myWiredMem
unset myUsedMem
unset myFreeMem
unset myTotalMem
unset myUsedPer
unset myWiredUsedPer
unset myTotalUsedPer
cnt=0
echo "Disk \c"
myDisk=`df |awk '/dev\/disk1/ && NF>1 {print $5}' |sed 's/\%//'`
while [ $cnt -lt $myDisk ]
do
echo "\033[1;32m|\033[0m\c"
cnt=`expr $cnt + 5`
done
while [ $cnt -lt 99 ]
do
echo "|\c"
cnt=`expr $cnt + 5`
done
printf %6d $myDisk && echo "%\c"
echo "\r"
unset myDisk
unset cnt
まとめ
今回のNetwork MonitorとCPU Monitorは、Mac OSのバージョンアップがあるたびにコマンドの出力結果とかが変わるので、維持管理が面倒です。
それでも、自分で作るのはやっぱり楽しいですね。
ちゃんと表示されなくなってメンテ(改築?)を行うので、ツギハギ感が半端ないですが…
ちなみに、ただかっこいいものを表示させたいだけなら、検索すればGeekToolの設定ファイル(スクリプトとかのエクスポートファイル)が出てくるのでそれをインポートするといいと思います。
拾ってきたものを自分好みに改良するのもいいと思います。
表示設定でフォント、カラー、サイズ等が設定できるので、見た目だけでもこだわって自分だけのデスクトップを作ってください!