2010年7月15日木曜日

ThinkPad X301 のLED制御

仕事仲間から教わったのですが、ThinkPad の各種LEDは /proc/acpi/ibm/led から制御できるらしく、少し調べてみました。
# cat /etc/redhat-release 
Fedora release 13 (Goddard)
# cat /proc/acpi/ibm/led 
status:         supported
commands:        on,  off,  blink ( is 0-15)
つまりは、この /proc/acpi/ibm/led に、"0 blink" などの文字列を書き込めばいいということがわかります。0~15 までの数字で、どの LED かを指定するようです。それで、
# for i in `seq 0 15`; do echo $i; echo $i blink > /proc/acpi/ibm/led; done
とやってみると、電源ボタンの LED (白) とその隣のサスペンド LED (緑) が点滅を始めることが確認できました。対応する LED 番号は、それぞれ 0 と 7 です。残念ですが、ThinkVantage ボタンの LED (青) には変化ありませんでした・・・(-.- 残念。ドライバのソースを見てみると、
   5019 static const char * const tpacpi_led_names[TPACPI_LED_NUMLEDS] = {
   5020         /* there's a limit of 19 chars + NULL before 2.6.26 */
   5021         "tpacpi::power",
   5022         "tpacpi:orange:batt",
   5023         "tpacpi:green:batt",
   5024         "tpacpi::dock_active",
   5025         "tpacpi::bay_active",
   5026         "tpacpi::dock_batt",
   5027         "tpacpi::unknown_led",
   5028         "tpacpi::standby",
   5029         "tpacpi::dock_status1",
   5030         "tpacpi::dock_status2",
   5031         "tpacpi::unknown_led2",
   5032         "tpacpi::unknown_led3",
   5033         "tpacpi::thinkvantage",
   5034 };
   5035 #define TPACPI_SAFE_LEDS        0x1081U
"drivers/platform/x86/thinkpad_acpi.c"
というように ThinkVantage ボタンの LED には、12 が割り当てられているようなのですが、
# echo 12 on > /proc/acpi/ibm/led
とやっても反応なしでした。ボタンだという違いがあるので、光るためには、さらに条件が必要なのだろうか。ねむいので、また今度調べてみます。

2010年7月13日火曜日

bash で扱える整数の上限

bash で扱える整数の上限(limit)を調べる必要があり、小さなスクリプトを書きました。最近は、32bit 版の Linux ディストリビューションでも LLONG_MAX まで扱えるようです。
# cat /etc/redhat-release 
CentOS release 4.8 (Final)
# uname -a
Linux centos 2.6.9-89.0.18.ELsmp #1 SMP Tue Dec 15 14:25:00 EST 2009 i686 i686 i386 GNU/Linux
# bash --version
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
# cat test_int_limit.bash 
#!/bin/bash

test_int_limit() {
        local -i i=2147483646
        echo -e "INT_MAX-1 = "$i
        let i++
        echo -e "INT_MAX   = "$i
        let i++
        echo -e "INT_MAX+1 = "$i
echo
        i=4294967294
        echo -e "ULONG_MAX-1 = "$i
        let i++
        echo -e "ULONG_MAX   = "$i
        let i++
        echo -e "ULONG_MAX+1 = "$i
echo
        i=9223372036854775806
        echo -e "LLONG_MAX-1 = "$i
        let i++
        echo -e "LLONG_MAX   = "$i
        let i++
        echo -e "LLONG_MAX+1 = "$i
echo
}

test_int_limit
# ./test_int_limit.bash 
INT_MAX-1 = 2147483646
INT_MAX   = 2147483647
INT_MAX+1 = 2147483648

ULONG_MAX-1 = 4294967294
ULONG_MAX   = 4294967295
ULONG_MAX+1 = 4294967296

LLONG_MAX-1 = 9223372036854775806
LLONG_MAX   = 9223372036854775807
LLONG_MAX+1 = -9223372036854775808

2011-12-28追記
tcsh および ksh についても調べましたので、それぞれ下記を参照ください。
ksh で扱える整数の上限
tcsh で扱える整数の上限

2010年7月11日日曜日

ThinkPad X301 をメモリ8GBに増強

X301(2777RM5)のカタログスペックでは、4GBまでとなっているが、ThinkPad Club などで8GBでの動作報告があったので、昨日、秋葉原の某店にて、この日最安値のMicron PC3-8500 4GB を2枚購入してきて増設(2GB→8GB)しました。特にトラブルなく成功し、これで仮想マシンを動かすのに十二分なサイズになりました。
# uversion 
Red Hat Enterprise Linux Server release 6.0 Beta    2777RM5

BIOS version  : 6EET50WW (3.10 )  03/16/2010
System serial : xxxxxxx

CPU model  : Intel(R) Core(TM)2 Duo CPU     U9400  @ 1.40GHz
Processors : 2  (1 sockets, 2 cores per CPU, HT: not supported or disabled)

Memory : 7832 MB

Linux : 2.6.32-37.el6.x86_64  x86_64  (my41)

# grep Crash /proc/iomem 
  02000000-05ffffff : Crash kernel
ご覧のように kdump に 64MB 割り当ています(crashkernel=64M)が、7832MB だと 296MB ほど少ない計算になります。が、これは GA に割かれているからということらしいです。dmesg の中の次の箇所から、なんとなくわかる。まあ、全体からすればゴミみたいなもんですが、いちおう納得してすっきりしておきます。
# dmesg
...
Linux agpgart interface v0.103
agpgart-intel 0000:00:00.0: Intel GM45 Chipset
agpgart-intel 0000:00:00.0: detected 32764K stolen memory
ACPI: Battery Slot [BAT0] (battery present)
agpgart-intel 0000:00:00.0: AGP aperture is 256M @ 0xd0000000...
ところで、わたしはメモリを買ってきたら必ず memtest86 または memtest86+ を流してチェックをかけます。今回も RHEL6 Beta2 の DVD から実行できる memtest86+ を利用しました。エラーなしで終了しています。さすがに 8GB ということで、2時間ぐらいかかりました。精神衛生上よろしくないので、かならず儀式としてやっていることです。 ちょっと話題が飛びますが、SSD や HDD も Windows 上の hddscan というソフトで初期導入時に必ずチェックしてから使い始めます。古い X300 のほうの SSD は、少々不良ブロックが出来てしまってます。その件については、また今度書こうと思います。

2010年7月10日土曜日

ThinkPad X301 で RHEL6 Beta2

RHEL6 Beta2 が出たので早速 X301 にインストールした。 もっぱら Windows から Poderosa で、サーバへリモートアクセスするという使い方しかしていなかったため、デスクトップ Linux についての知識が不足中。 自分のために、メモを残しておく。

・無線LAN
Linux で無線LANは初めてだったが、とりたてて苦労せずに接続できた。 ちなみに、ニンテンドー WiFi ネットワークアダプターを使ってます。安かったので、DS 接続用も兼ねて導入したもの。周期的にハングする(ルーティングができなくなり管理画面も接続不可になる)のですが、1ヶ月ぐらいはもつので、リセット運用してます。サポートに問い合わせる時間ももったいないので。

・トラックポイント
デフォルトではスピードが遅すぎるので調整したかったが、Mouse Preferences / Pointer Speed では制御できず、ネットで調べたところ、次の /sys ファイルで調整できるようです。先人の方に感謝。
# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.0 Beta (Santiago)
# uname -r
2.6.32-37.el6.x86_64
# cat /sys/devices/platform/i8042/serio1/serio2/speed 
160
# cat /sys/devices/platform/i8042/serio1/serio2/sensitivity 
224
数字は、自分好みに設定後の値です。デフォルトは次の箇所で定義されてます。
    245 static void trackpoint_defaults(struct trackpoint_data *tp)
    246 {
    247         tp->press_to_select = TP_DEF_PTSON;
    248         tp->sensitivity = TP_DEF_SENS;
    249         tp->speed = TP_DEF_SPEED;
    250         tp->reach = TP_DEF_REACH;
"kernel-2.6.32-37.el6/linux-2.6.32.x86_64/drivers/input/mouse/trackpoint.c"
    108 /*
    109  * Default power on values
    110  */
    111 #define TP_DEF_SENS             0x80
    112 #define TP_DEF_INERTIA          0x06
    113 #define TP_DEF_SPEED            0x61
    114 #define TP_DEF_REACH            0x0A
"kernel-2.6.32-37.el6/linux-2.6.32.x86_64/drivers/input/mouse/trackpoint.h"
ログイン時の自動設定は、別途行ってこのBlogにメモする予定。現在は、設定シェルを手動で実行しています。

2010-08-22追記
結局は最も簡単な /etc/rc.d/rc.local へ追記するという対処にしています。hotplug でと思ってましたが。


・タッチパッド
比較的嫌われもののタッチパッドですが、たまに、タッチパッド手前のマウスボタンを使いたい時があり、BIOS で OFF にする以外の方法が無いかネットで調べたところ、gpointing-device-settings というのを入れれば制御出来ることがわかった。しかし、RHEL6 Beta2 には収録されていないようなので、Fedora 12 のものを拾ってきてインストールしました。RHEL6 は Fedora 12 をベースにしているので、たいがいそちらから拾ってくれば動くのでは・・・ System / Preferences / Pointing Devices というメニューが追加されるので、その中の Speed の3つの項目を全てほぼゼロ(1ドットくらい)にすることで、タッチパッドによるマウス移動が最小限に小さくなり、誤操作することがなくなります。しかも、タッチパッド手前のマウスボタンが使えるし、タッチパッドによるスクロール機能も動きます。スクロールの方は、わたしはあまり使いませんが。

・Desktop Effects
Compiz というのがあるは知っていたが、こりゃいい! マウスポインターを画面右上に持って行くと、ウインドウセレクトできるのだが、このインタフェースがすごくうまく出来ている。Windows のアレよりずっとセンスがいいと思った。仮想デスクトップ切り替え時のサイコロエフェクトも、俯瞰表示もすばらしい。
人気ブログランキングへ にほんブログ村 IT技術ブログへ