GNU Screen を Mac で使うときの話。iTerm2 が最新版で Lion のフルスクリーンモードに対応した。今まではバッテリー情報その他を iStat Menu で確認していたのだが、フルスクリーンモードではこれが見えない。不便だと思ってたら、やはり先人が何とかしてくれてました。
- MacでScreenのステータスライン(hardstatus)にCPU使用率&温度とメモリ使用率を表示させる – mfumiの日記
http://d.hatena.ne.jp/mFumi/20100401/1270132049- Screenのステータスライン(hardstatus)にMacBookのバッテリー情報を表示 – mfumiの日記
http://d.hatena.ne.jp/mFumi/20100330/1269963564
基本はこのサイトを参考に行ったのだが、メモリ使用率の点で問題発生。コードをコンパイルしてみると……
$ gcc show_memory_usage.c -o memory $ ./memory 151.087952
メモリ使用率 151%!?! これはどう考えてもおかしい。コードを少し変えて、計算の元となった値を表示してみる。
$ ./memory ratio:149.295425 wire:258358.000000 active:524380.000000 page:4096.000000 memory:2147483648.000000
アー、分かった。memory
の値が 2GB になってる。この Mac は 4GB のメモリを積んでるんで、倍率も 2 倍出ちゃったのね。ググってみると情報が出てきた。
- Re: getting total memory size on OSX?
http://lists.apple.com/archives/scitech/2005/Aug/msg00004.html
曰く、「host_basic_info.memory_size
は 4GB とかメモリ積んでるマシンじゃ動かないよ。sysctlbyname
使って hw.memsize
を得なさい。」だそうだが、正直 C 言語には素人なのでよく分からん。グーグル先生の助けを借りて、コードを無理矢理追加してみた。
#include <sys/types.h> #include <sys/sysctl.h> #include <mach/host_info.h> #include <stdio.h> int main(int argc, char *argv[]) { struct host_basic_info host; struct vm_statistics vm_info; mach_msg_type_number_t count; kern_return_t kr; vm_size_t pagesize; count = HOST_BASIC_INFO_COUNT; kr = host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&host, &count); count = HOST_VM_INFO_COUNT; kr = host_statistics(mach_host_self(),HOST_VM_INFO,(host_info_t)&vm_info,&count); kr = host_page_size(mach_host_self(),&pagesize); uint64_t memory_size; size_t len = sizeof(memory_size); sysctlbyname("hw.memsize", &memory_size, &len, NULL, 0); if(kr == KERN_SUCCESS) printf("%6.2lf\n",(((double)(vm_info.wire_count + vm_info.active_count)*pagesize)/memory_size)*100); return 0; }
$ ./memory 74.85
何とかそれっぽい数字が出た。あとは .screenrc
に設定を書き加えて終了。
hardstatus alwayslastline "%{= Gk} %-Lw%40L>%{b kg} %n %?%h%:%t%? %{-}%+Lw%-0120=%{b ky} メモリ %0`%% %{b kb}CPU %1`%% %{b kr}CPU温度 %2`℃ %{b kw}%3` %{b km}%l %{.b}%Y/%m/%d %C %A" backtick 0 10 10 $HOME/.screen/memory backtick 1 1 1 $HOME/.screen/cpu backtick 2 5 5 $HOME/.screen/temperature.sh backtick 3 10 10 $HOME/.screen/battery.sh
.screenrc
の細かい設定は以前書いた記事を見てね。