KURO-BOX/T4には、TeraStationと同様のLCDディスプレイが付いています。
標準でのインストールでは機能しないので、これを機能するようにスクリプトを作成しました。
私が実際に使っているスクリプトファイルを、一番下でダウンロード出来ます。
LCD表示スクリプト(LANリンク速度、ディスク容量、ホスト名、IP、日付、ファン回転数、ケース内温度)
#!/bin/sh PATH=$PATH:/usr/local/sbin export PATH # lcd back light bright {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100} BACK_LIGHT_BRIGHT="70" miconapl -a lcd_set_bright $BACK_LIGHT_BRIGHT hostname=`cat /etc/hostname` miconapl -a lcd_set_hostname $hostname miconapl -a lcd_disp_hostname miconapl -a lcd_disp_fanspeed_on miconapl -a lcd_disp_temp_on #私の場合は固定IPなので、ここにリンク速度のスクリプトへのパスを書いています。(IP取得も同様に1回しか呼んでいません) #ここにディスク容量取得スクリプトのパス #ここにディスクRAID設定スクリプトのパス miconapl -a lcd_set_dispitem linkspeed hostname ipaddress date buffer0 buffer1 miconapl -a lcd_changemode_auto idx=1 while : do sleep 60 dispdatetime=`date '+%y %m %d %k %M %S'` miconapl -a lcd_set_date $dispdatetime idx=`expr $idx + 1` if [ $idx -ge 10 ]; then idx=1; #ここにディスク容量取得スクリプトのパス #ここにディスクRAID設定スクリプトのパス fi done
NICリンクアップ時スクリプト(DHCPなどでIPが変更になる人は/etc/network/if-up.dなどの下にスクリプトとして書いてください)
#!/bin/sh PATH=$PATH:/usr/local/sbin export LANG=C export PATH ipaddress=`ifconfig | grep "inet addr" | awk '{print $2}' | awk -F: 'NR==1 {print $2}'` miconapl -a lcd_set_ipaddress $ipaddress
リンク速度設定スクリプト
#!/bin/bash PATH=$PATH:/usr/local/sbin export PATH eth_dev="eth0" link_nolink="nolink" link_10h="10h" link_10f="10f" link_100h="100h" link_100f="100f" link_1000="1000" mii_result=`mii-tool $eth_dev` case $mii_result in *"10baseT-HD"*) set_link_speed=$link_10h;; *"10baseT-FD"*) set_link_speed=$link_10f;; *"10baseT-HD"*) set_link_speed=$link_100h;; *"10baseT-HD"*) set_link_speed=$link_100f;; *"1000baseT-FD"*) set_link_speed=$link_1000;; *) set_link_speed=$link_nolink esac miconapl -a lcd_set_linkspeed $set_link_speed exit
※リンク速度を表示する場合は
miconapl -a lcd_set_dispitem にlinkspeedを追加してください。
(リンク速度を設定することにより、本体のLinkActランプが自動的に点灯、点滅します)
ディスク容量セットスクリプト
#!/bin/bash PATH=$PATH:/usr/local/sbin export PATH device1="/dev/sda" device2="/dev/sdb" device3="/dev/sdc" device4="/dev/sdd" d1=`df -m | grep $device1 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'` d2=`df -m | grep $device2 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'` d3=`df -m | grep $device3 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'` d4=`df -m | grep $device4 | awk 'BEGIN {use=0; total=0} // {use+=$3; total+=$2} END{printf "%d", use/total*100}'` if [ $d1 -lt 0 ]; then d1=0; fi if [ $d2 -lt 0 ]; then d2=0; fi if [ $d3 -lt 0 ]; then d3=0; fi if [ $d4 -lt 0 ]; then d4=0; fi miconapl -a lcd_set_disk_capacity $d1 $d2 $d3 $d4 exit
※ディスク容量を表示する場合は
miconapl -a lcd_set_dispitem にhostnameを追加してください。
(T4のマイコン仕様書ではLinkSpeedと同じバッファを使ってるように読み取れましたが、miconaplではhostnameで表示されました)
ディスク容量セットスクリプトを定期的に動かすことで容量を再セットしてください。
また、ディスクの容量はマイコン仕様書では16進でセットしますが
miconaplが内部で変換しているようで0~100の値をセットで問題ありません。
(100まで行かなくても、95でFull表示になりました)
尚、raidを組んでいる場合はsdaやsdbの文字では正常に値が取得できませんので、md0などraidのデバイスとして登録してある文字f列をセットしてあげてください。
(一つのディスクに複数のraid用タイプfdを作成し,raidを複数組んでる場合は、このスクリプトは使用できません)
私の場合は、Disk2、Disk3、Disk3の3台をRaid5で運用していますので
device2=”/dev/md0″とし
d3=とd4=をコメントにし
miconapl -a lcd_set_disk_capacity $d1 $d2 $d2 $d2
としています。
電源ボタン監視スクリプト
#!/bin/sh GET_SW="/usr/local/sbin/miconapl -a int_get_switch_status" BEEP="/usr/local/sbin/miconapl -a bz_on button" BEEP2="/usr/local/sbin/miconapl -a bz_on boot" LCD_OFF="/usr/local/sbin/miconapl -a lcd_changemode_button" LCD_FAN_OFF="/usr/local/sbin/miconapl -a lcd_disp_fanspeed_off" LCD_TEMP_OFF="/usr/local/sbin/miconapl -a lcd_disp_temp_off" LCD_BUF2_ON="/usr/local/sbin/miconapl -a lcd_disp_buffer2" LCD_BRIGHT_ZERO="/usr/local/sbin/miconapl -a lcd_set_bright 0" COUNT=4 while : do SW=`$GET_SW |grep "int=" |sed -e "s/int=//"` case ${SW} in power_sw) COUNT=`expr ${COUNT} - 1` if [ ${COUNT} -eq 0 ] then ${BEEP2} ${LCD_OFF} ${LCD_FAN_OFF} ${LCD_TEMP_OFF} ${LCD_BUF2_ON} ${LCD_BRIGHT_ZERO} /sbin/shutdown -hP now else ${BEEP} fi sleep 1 ;; init_sw_front) ;; *) COUNT=4 sleep 2 ;; esac done
2009/11/13 輝度制御スクリプトの追加
輝度制御設定ファイル(/etc/lcd_control.confで保存してください)
################################################################### # # LCD&LED輝度コントロール設定ファイル # ################################################################### # LED輝度通常時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100} NORMAL_LED=100 # LCD輝度通常時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100} NORMAL_LCD=70 # 時刻連動使用 {true | false} TIME_LINKED=true # LED輝度減光時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100} DOWN_LED=50 # LCD輝度減光時 {0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100} DOWN_LCD=50 # LED輝度通常時刻 {0 - 23} step 1 NORMAL_START_TIME=7 # LED輝度減光時刻 {0 - 23} step 1 DOWN_START_TIME=23
輝度制御スクリプト
#!/bin/sh PATH=$PATH:/usr/local/sbin export PATH # 設定ファイル CONF_FILE=/etc/lcd_control.conf if [[ -f "$CONF_FILE" ]] then . $CONF_FILE else echo "LCD輝度制御設定ファイル $CONF_FILE が見つかりません。" exit 1 fi if [ $TIME_LINKED = 'false' ]; then exit fi while : do sleep 60 now_lcd=`miconapl -a lcd_set_bright|grep lcd_bright=|sed -n -e "s/.*=//p"` now_led=`miconapl -a led_set_bright|grep led_bright=|sed -n -e "s/.*=//p"` temphour=`date '+%k'` if [ $NORMAL_START_TIME -eq $DOWN_START_TIME ]; then # 通常時と減光時の時刻が同じ場合は、常に通常扱い mode='normal' elif [ $NORMAL_START_TIME -lt $DOWN_START_TIME ]; then # 通常時が減光時より小さい場合 if [ $NORMAL_START_TIME -le $temphour -a $DOWN_START_TIME -gt $temphour ]; then # 通常時の範囲 mode='normal' else # 減光時の範囲 mode='down' fi else # 減光時が通常時より小さい場合 if [ $DOWN_START_TIME -le $temphour -a $NORMAL_START_TIME -gt $temphour ]; then # 減光時の範囲 mode='down' else # 通常時の範囲 mode='normal' fi fi if [ $mode = 'normal' ]; then # 通常時 lcd_set_num=$NORMAL_LCD led_set_num=$NORMAL_LED else # 減光時 lcd_set_num=$DOWN_LCD led_set_num=$DOWN_LED fi # 現在の設定と違う場合は設定変更 if [ $now_lcd -ne $lcd_set_num ]; then miconapl -a lcd_set_bright $lcd_set_num fi if [ $now_led -ne $led_set_num ]; then miconapl -a led_set_bright $led_set_num fi done
2009/11/13 RAID設定スクリプトの追加
※¥は全角で書いていますので、半角に書き換えてください。(blognの制約上)
表示形式は以下の通りです。
LCD下段はRAIDの状態で表示が変わります。
RAIDなし(/proc/partitionsにmdの文字が見つからない場合)
上段:Operation MODE
下段:Normal
RAID0~6
上段:HD 2-3-4
下段:RAID○ [UUUU]
上段はmd○のArrayに使用されているドライブ番号が表示されます。
例:1,2,3,4ドライブでRAID利用=1-2-3-4
下段のUUUUの部分は/proc/mdstatで取得出来るディスクのディスクの動作状況です。
以下はエラー系です。
/proc/mdstatからRAIDの状態を取得出来なかった場合:RAID GET ERROR
/proc/mdstatからディスクの動作状況を取得出来なかった場合:RAID○
#!/bin/sh PATH=$PATH:/usr/local/sbin export PATH #md?のパーティションがあるかチェック first_md_char=`cat /proc/partitions|grep md|sed -n -e "s/.*md//p"` raid_mode="Operation MODE " if [ $first_md_char = "" ]; then #md?が見つからない(ノーマルモード) raid_mode="${raid_mode}Normal " else #md?が見つかった場合 proc_mdstat=`cat /proc/mdstat` #RAIDのドライブ構成を調べる raid_mode="HD " raid_info="" idx=0 while [ $idx -ne 4 ] do drive=`echo "$proc_mdstat"|grep ¥[${idx}]|sed -n -e "s/.¥[${idx}].*//p"|sed -n -e "s/.*sd//p"` case $drive in a)drive="1";; b)drive="2";; c)drive="3";; d)drive="4";; *)drive="";; esac #ドライブ構成文字の作成 if [ ! $drive = "" ]; then if [ ! $raid_info = "" ]; then raid_info="${raid_info}-${drive}" else raid_info="${drive}" fi fi idx=`expr $idx + 1` done #RAID表示文字(上段)の作成 raid_mode="${raid_mode}${raid_info}" #16バイトになるまで空白で埋める idx=`expr length "$raid_mode"` while [ $idx -lt 16 ] do raid_mode="${raid_mode} " idx=`expr $idx + 1` done #RAIDモード、ドライブ動作状況の取得 raid_mode_num=`echo "$proc_mdstat"|grep md${first_md_char}|sed -n -e "s/ sd.*//p"|sed -n -e"s/.*raid//p"` if [ $raid_mode_num = "" ]; then #情報取得エラー raid_mode="${raid_mode}RAID GET ERROR" else #モード取得 raid_state=`echo "$proc_mdstat"|grep '] ¥['|tr -d '¥012'|sed -n -e"s/.*] //p"` #動作状況取得 raid_mode="${raid_mode}RAID${raid_mode_num} $raid_state" fi fi #miconに文字列をセット miconapl -a lcd_set_raidmode32 "$raid_mode"
※RAID設定を表示する場合は
miconapl -a lcd_set_dispitem にraidmodeを追加してください。
※表示するRIADの情報は/proc/partitionsにて最初に取得出来るmd○のArrayとなります。
※ケース内温度によるファン回転数制御スクリプトは、ネットなどで転がっている物が使えると思いますので省略します。
2009/11/16 追記
以下は私が使っているスクリプトです。
環境に合わせて書き換えてください。
lcd_scripts.tar.bz2
/usr/loca/sbin に解凍して実行権限を与えてください。
lcd_scripts_conf.tar.bz2
このファイルはスクリプトの設定ファイルになります。
/etc に解凍して、設定を行ってください。
またこれらのスクリプトを実行するために/etc/rc.local に以下の記述を行い、起動時に実行しています。
# init LCD display if [ -x /usr/local/sbin/Keventd ] ; then /usr/local/sbin/Keventd & fi if [ -x /usr/local/sbin/Fand ] ; then /usr/local/sbin/Fand & fi if [ -x /usr/local/sbin/Displayd ] ; then /usr/local/sbin/Displayd & fi if [ -x /usr/local/sbin/lcd_control.sh ] ; then /usr/local/sbin/lcd_control.sh & fi