1

글타래: GeekTool - 책상 화면 위의 정보 표시자

GeekTool은 preference pane으로 책상 위의 화면에 정보들을 전달해서 뿌려주는 기능이 있는데, 이것은 아무래도 Mac OS X의 Dashboard와 그 성격이 닮았습니다.
다음은 GeektTool에서 표시될 수 있는 세 가지 종류의 정보 형태들입니다:

* Log 파일 - log 파일을 선택해서 (보통 /var/log 디렉토리에 위치합니다.) 해당 파일의 내용을 화면 위에 실시간으로 뿌려 줍니다. 보통 여기에 사용되는 파일들로는 /var/log/system.log, /Library/Logs/501/console.log, 그리고 /var/log/httpd/* 등이 있습니다.

* 명령어 - 실행될 Unix의 shell 명령어를 지정해 주면, 그 결과를 화면 위에 표시해 줍니다. 또한, 여기에는 재실행 시간(초)도 함께 입력해 주어야 합니다.  자주 쓰이는 명령들로는 uptime(컴퓨터 가동 시간과 사용 부하 표시), df(디스크 빈 용량 표시), netstat(네트웍 상태 표시), vm_stat(Mach 커널의 가상 메모리 사용 현황), ifconfig(네크웍 인터페이스의 현재 설정 상태 표시) 등이 사용될 수 있겠으며 sed 혹은 awk 스크립트 명령을 사용해 그 결과를 간추려서 보이게 할 수도 있습니다.

shell 명령어 사용 예:

- CPU 사용량
top -cd -l2 | grep 'CPU usage' | cut -c 33-88 | tail -1

- 가장 많이 CPU를 소모하고 있는 작업
top=$(ps -acx -o %cpu,command | sort -rin | head -n1);
echo "CPU-intensive: $top"

- 시스템 메모리 사용량과 가상 메모리 크기
sm=$(top -ocpu -Otime -R -l1 | grep 'PhysMem' | cut -c 11-75);
vm=$(top -ocpu -Otime -R -l1 | grep 'VM' | cut -c 5-9);
echo "SM Usage: $sm VM Size: $vm"

- Swap 파일들의 전체 크기
size=$(/usr/bin/du -hc /var/vm/swap* | grep 'total' | awk {'print $1'});
echo "Total size of swap files: $size"

- Page out된 메모리 용량
po=$(vm_stat | grep 'Pageouts' | awk '{print $2"*4096/1048576"}' | bc);
echo "Size of Page outs: $po MB"

- 현재 네트웍 접속 상태
netstat -na -f inet | grep -i established | sort +4

- (loopback 주소들을 제외한) 모든 내부 IP 주소들
ifconfig | grep netmask | grep -v 127.0.0.1 | awk {'print $2'}

- 외부 인터넷 IP 주소 (3가지 방법)
ip=$(curl -s whatsmyip.islayer.net | awk {'print $0'});
echo "External IP: $ip"

ip=$(curl -s http://www.whatismyip.com/automation/n09230945.asp);
echo "External IP: $ip"

echo External IP: `curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'`

- 내부적으로 마운트 된 디스크들의 빈 공간
df -hl

- 달력
echo `date "+%d %B %Y"` | awk \
'{ print substr("          ",1,(21-length($0))/2) $0; }'; \
cal | awk '{ getline; print " Mo Tu We Th Fr Sa Su"; getline; \
if (substr($0,1,2) == " 1")  print "                    1 "; \
do { prevline=$0; if (getline == 0) exit; print " "\
substr(prevline,4,17) " " substr($0,1,2) " "; } while (1) }' | \
awk -v cday=`date "+%d"` '{ fill=(int(cday)>9?"":" ");    \
a=$0; sub(" "fill int(cday)" ","["fill int(cday)"]",a); print  a }'
netstat -na -f inet | grep -i established | sort +4

- 과거 오늘의 사건
grep -h "^$(date '+%m/%d')" /usr/share/calendar/calendar.{holiday,history,computer}|cut -f2

- Mail에 등록된 계정들 중에서 아직 읽지 않은 전자우편들의 갯수
echo 'tell application "Mail" to return unread count of mailboxes of accounts' | \
osascript | perl -e "@a=split ',',<STDIN>; foreach (@a) {\$n += \$_}; \
print \"Unread Mails: \$n\n\";"

* 그림 - 인터넷 위에 떠 있는 그림들을 URL, 그림틀 형태, 투명도 등의 설정들과 함께 화면 위에 띄울 수도 있답니다.

이것들과 더불어서, 표시 정보 창을 다른 화면들보다 항상 앞에 표시해 주게끔 할 수도 있고, 이 창은 마우스 클릭을 방해하지도 않습니다.

참고로, 표시 정보들은 설정 내용과 사용 목적에 따라 따로 묶어서 분류 관리할 수도 있으며, 메뉴 막대에 올려놓고 묶음별 표시 전환이 가능합니다. (이 메뉴 기능 사용 시, 프로그램을 삭제할 때는 꼭 따라오는 uninstaller를 사용해야 깨끗하게 지우실 수 있답니다.)

http://www.macosxhints.com/images/geekpic_small.jpg
GeekTool 사용 그림. (그림을 누르면 더 큰 그림을 보실 수 있습니다)

현재 GeekTool의 최신 버전은 2.1이지만 갱신된 지도 오래되었고, Tiger에선 다음과 같은 오류를 나타내는 log를 보여주며, 결과적으로 시스템의 성능을 저하시키는 부작용 보이고 있습니다:

GeekTool: The function ..... is obsolete and will be removed in a Tiger update. Unfortunately, this app, or a library it uses, is using this obsolete function, and is thereby contributing to an overall degradation of system performance.

이 문제는 아직 정식적으로는 고쳐지질 않았으나, 다른 사용자가 공개된 GeekTool의 소스 코드를 수정한 GeekTool 2.1jaw1(DB)를 배포하고 있답니다. 이것은 위에 나타났던, Tiger에서 더는 지원하지 않는 함수를 사용하면서 시스템에 부하를 주었던 문제를 수정했으며, 또한 log 창 표시 속도와 CPU 사용량을 절약하는 기능의 개선이 있었다고 합니다. 차기 정식 버전이 발표되기 전까지는 안심하고 쓰실 수 있을듯 합니다.

+ = ²

2

댓글: GeekTool - 책상 화면 위의 정보 표시자

GeekTool을 애용하게 되면서, 이곳저곳에서 정보들을 끌어다가 화면 위에 뿌려주는 맛에, 이제는 화면 위에 남아 있는 마지막 자투리 공간마저도 채워넣을 요량으로 이리저리 궁리한 끝에, 결국 기상청 웹 사이트에서 제공하고 있는 한반도 상공에서 관측된 여러 가지 위성 영상 중에서 하나를 가져오기로 했습니다. (여러 Dashboard widget들 중에서,  Radar In Motion도 비슷한 기상 위성 동영상을 제공하고 있습니다만, Weather.com에서 제공하는 영상을 가져오는 관계로 한반도 상공 영상의 갱신 주기는 비교적 더 긴 편인 것 같습니다.)
지금부터 설명해 드릴 요령은, GeekTool을 이용해서 MTSAT-1R 위성의 최신 한반도 위성 영상들최신 레이더 영상을 화면 위에 뿌려 주는 방법을 소개해 드리겠습니다.

우선, 최신 위성 영상들을 저장해 놓을 디렉토리를 생성합니다. (아래 보기에서는 ~/Pictures/satellite_images/)
그리고 나서, GeekTool을 열고 "New entry" 단추를 눌러서 새 항목을 추가합니다.
새로 추가된 항목의 설정 부분에서 화면 위에 표시될 형태로 "Picture"를 선택하고 "Source"는 조금 전 만들어 두었던 디렉토리에 위치할 (아직은 없는) 해당 위성 영상 파일의 주소를 입력합니다.

사용 예:
[uli]적외선 영상의 경우 - file:///Users/<사용자_이름>/Pictures/satellite_images/infrared_image.gif (이 곳의 <사용자_이름> 대신에 실제 자신의 짧은 계정 이름을 입력합니다)[/uli]
[uli]가시 영상 - file:///Users/<사용자_이름>/Pictures/satellite_images/visible_image.gif[/uli]
[uli]수증기 영상 - file:///Users/<사용자_이름>/Pictures/satellite_images/water_vapor_image.gif[/uli]
[uli]합성 영상 - file:///Users/<사용자_이름>/Pictures/satellite_images/composite_image.gif[/uli]

새로 그림을 읽어오는 주기(Refresh:)는 기상청의 위성 영상이 약 1시간 단위로 갱신되므로, 3600(초)을 입력합니다.
"Location" 칸에는 영상이 표시될 위치와 크기를 조정해 주실 수 있습니다. (원래 적외선 영상의 크기는 512x512 픽셀)
"Style" 항목에서는 표시될 영상과 관련해서 투명도 등 여러 가지 설정들을 해 주실 수도 있습니다.

이제, 매시간 마다 기상청의 위성 영상을 가져오는 shell 스크립트를 입력해 줄 차례입니다.
GeekTool에 또 하나의 항목을 추가하고, 설정 내용을 "Shell"로 선택합니다.
다음에 Command: 입력 칸에 다음과 같은 해당 영상의 shell 스크립트를 입력합니다:

- 적외선 영상
site=http://www.kma.go.kr;
img=$(curl -s www.kma.go.kr/kor/weather/picture/picture_01.jsp | \
grep 'src="/kma_sat/DATA/MTSAT/GPL/' | \
awk {'print $2'} | sed 's/src="//g' | sed 's/"//g');
url="$site$img";
curl -o ~/Pictures/satellite_images/infrared_image.gif $url;
date "+Updated: %y/%m/%d %H:%M:%S"

- 가시 영상
site=http://www.kma.go.kr;
img=$(curl -s www.kma.go.kr/kor/weather/picture/picture_01.jsp | \
grep 'src="/kma_sat/DATA/MTSAT/GPL/' | \
awk {'print $2'} | sed 's/src="//g' | sed 's/"//g' | sed 's/wli/wlv/g');
url="$site$img";
curl -o ~/Pictures/satellite_images/visible_image.gif $url;
date "+Updated: %y/%m/%d %H:%M:%S"

- 수증기 영상
site=http://www.kma.go.kr;
img=$(curl -s www.kma.go.kr/kor/weather/picture/picture_01.jsp | \
grep 'src="/kma_sat/DATA/MTSAT/GPL/' | \
awk {'print $2'} | sed 's/src="//g' | sed 's/"//g' | sed 's/wli/wlw/g');
url="$site$img";
curl -o ~/Pictures/satellite_images/water_vapor_image.gif $url;
date "+Updated: %y/%m/%d %H:%M:%S"

- 합성 영상
site=http://www.kma.go.kr;
img=$(curl -s www.kma.go.kr/kor/weather/picture/picture_01.jsp | \
grep 'src="/kma_sat/DATA/MTSAT/GPL/' | \
awk {'print $2'} | sed 's/src="//g' | sed 's/"//g' | sed 's/wli/wld/g');
url="$site$img";
curl -o ~/Pictures/satellite_images/composite_image.gif $url;
date "+Updated: %y/%m/%d %H:%M:%S"

마지막으로, 갱신 주기 3600을 입력하고, "Location" 값을 영상 위에 있도록 조정해서 영상을 가져온 시각이 영상에 의해 가려지지 않도록 합니다.

최신 레이더 영상을 가져오기 위한 설정은, 기상청 레이더 영상의 주소가 고정된 관계로 간단하게 GeekTool이 해당 주소에 있는 그림을 표시해 주도록 하기만 하면 됩니다.
먼저, 최신 레이더 영상을 가져오기 위한 새로운 항목을 추가하고, 설정 내용을 "Picture"로 선택합니다.
Source 항목의 URL: 칸에는 간단하게 다음과 같은 레이더 영상의 그림 주소를 입력합니다:
http://www.kma.go.kr/kma_radar/DATA/BAS … latest.png
갱신 주기에는 기상청 레이더 영상의 갱신 주기인 600 (10분)을 입력하고, 적당한 위치와 그림 크기를 지정합니다. (원래 적외선 영상의 크기는 646x576 픽셀)

이렇게 해서, 매시간 갱신되는 최신 한반도 위성 영상들과 레이더 영상을 화면에서 바로 확인하실 수 있습니다. cool

miname씨가 수정함 (2005-10-15 09:49 PM)

+ = ²

3

댓글: GeekTool - 책상 화면 위의 정보 표시자

Console Messages를 표시해주는 Shell script입니다.

$ syslog -C | tail -n 7

마지막 숫자는 표시되는 줄의 수를 의미해서, 표시 창 크기에 맞게 조절해 주면 되겠습니다.

그리고, 다음은 미화(USD) 대비 원화 환율 (매매 기준율).

ex=$(curl -s http://finance.daum.net/exchange/exchangeDetail.daum?code=USD | grep '<dd id="hyenCost">' | awk {'print $0'} | cut -c 36-41); echo "Exchange Rate: $ex"
+ = ²

4

댓글: GeekTool - 책상 화면 위의 정보 표시자

GeekTool 스크립트(Geeklets) 모음 사이트

+ = ²

5

댓글: GeekTool - 책상 화면 위의 정보 표시자

Geeklets: weather and forecast - Brett Terpstra - 날씨 자료는 Weather Underground에서 가져오는군요.

+ = ²