OSはインストールしただけでは使えない。適切な設定が必要。
まずは通常使用する環境となるユーザを登録、設定する。
ファイル展開でインストールすると、rootにパスワードは設定されていないのでまずはそのままログインし、パスワードを設定する。なお、インストーラsysinstでインストールするとインストール途中でパスワード設定が可能
# passwd root New Password: (パスワードを入力:エコーバックされない) Retype New Password: (パスワードを入力:エコーバックされない)
デフォルトシェルは/bin/cshになっているが、 chshコマンドやvipwで/etc/passwdの変更を行える。ちなみにシステムに標準で含まれるshellは/bin/sh, /bin/csh, /bin/kshである。
普段の作業をrootで行うことは好ましくない。まぁ一人で使うにはどうでもいいっていえばそうなのだが一応お約束である。
このユーザはシステム設定作業も行う予定なので、rootと同じwheel groupにも追加する。
# useradd -m -G wheel (username) # passwd (username) New Password: (パスワードを入力:エコーバックされない) Retype New Password: (パスワードを入力:エコーバックされない)
ユーザのデフォルトシェル等変更したい場合はuseraddにオプションで指定するか、作成後にchshコマンドやvipwで/etc/passwdの変更を行えば良い。
以下のうち、単にファイルに書き込む物は実機でなくてもCFを作業用パソコンに繋いでmountして行っても良い。その場合ファイルパスは全てmountした場所からのパスになる。
これはファイル展開時にやっておいた方がいいかもしれないこと。
ファイルを展開しただけだとUTCになっているのでこれをJSTに変更する
# rm /etc/localtime # ln -s /usr/share/zoneinfo/Japan /etc/localtime
hpcshではwsconsoleフレームワークによりコンソールだけでも複数の仮想端末が使える。まずは標準で有効となっている設定を確認する。
# cat /etc/ttys # # $NetBSD: ttys,v 1.9 2006/04/06 22:31:11 uwe Exp $ # # name getty type status comments # serial port (19200bps is default WindowsCE baud rate) console "/usr/libexec/getty std.19200" vt100 off secure # Workstation console (framebuffer) ttys ttyE0 "/usr/libexec/getty std.9600" vt100 on secure ttyE1 "/usr/libexec/getty std.9600" vt100 on secure
この場合wsconsでttyE0とttyE1の2つが有効になっている。複数必要が無い場合は減らせばいいし、3つ以上必要な場合はttyE2,ttyE3と増やせば良い。なお、wsconsの設定は事項以降を参照。
最低限の設定では、マルチユーザに移行するようにしたこととhostnameしか設定していない。ここではそのほかの設定をする。
何も設定しないと以下のようにいくつかのdaemonが起動しているはず
# ps ax PID TTY STAT TIME COMMAND 0 ? DKs 0:00.00 [swapper] 1 ? Is 0:00.00 init 2 ? DK 0:00.00 [hd64461pcmcia0] 3 ? DK 0:00.00 [atabus0] 4 ? DK 0:00.00 [apmdev0] 5 ? DK 0:00.00 [pagedaemon] 6 ? DK 0:00.00 [ioflush] 7 ? DK 0:00.00 [aiodoned] 29 ? DK 0:00.00 [physiod] 147 ? Ss 0:00.00 /usr/sbin/syslogd -s 374 ? I 0:00.00 qmgr -l -t unix -u 440 ? Is 0:00.00 /usr/sbin/inetd -l 441 ? I 0:00.00 pickup -l -t fifo -u 442 ? Is 0:00.00 /usr/libexec/postfix/master 471 ? Is 0:00.00 /usr/sbin/cron 597 ttyp0 S 0:00.00 -csh 446 ttyE0 Is 0:00.00 login 846 ttyE1 Is+ 0:00.00 /usr/libexec/getty std.9600 ttyE1
このように標準ではsyslogd, inetd, postfix, cronが動作中である。なお、NetBSDのバージョンによってこれらは異なることがある。
使う必要が無い物は止める。私はこのマシンでなんらかのサービスを動かすつもりは無く、また、CFの書き換えを抑えるという意味でもlogfileも必要ないと判断して以下のように徹底的に止めることにする。
inetd=NO cron=NO postfix=NO syslogd=NO
当然ながら必要であればNOにしてはいけない。また、他に設定可能な値などは/etc/defaults/rc.confを見れば大体わかる。
システム起動時に色々と処理するが、それらの動作をrc.confで制御できる。
私の場合はCFの書き換えを減らすために以下のように指定している。
update_motd=NO clear_tmp=NO virecover=NO no_swap=NO
他にも色々あるが、とりあえず。
NetBSDの機種非依存デバイス制御のひとつとしてwscons (Workstation Console)がある。hpcshのデフォルトで使用可能になっており、コンソールでの複数仮想端末制御やキーマップ、ポインティングデバイス制御、そしてフレームバッファ制御なんかを行うことができる。
次の行を/etc/rc.confに追加する。
wscons=YES
これを追加すると、起動時に/etc/wscons.confの設定を読込み各種の初期設定が可能になる。
/etc/wscons.confでは色々な設定が可能だが、デフォルトだと仮想画面は4面を有効にしている。不要であればこのあたりを減らした方がいいかもしれない。
#screen 0 - vt100 screen 1 - vt100 #screen 2 - vt100 #screen 3 - vt100
screen 0はコンソールで有効なので設定ファイルのコメントにもあるように特に指定する必要はない。
ちなみに仮想画面の切替えは [CTRL]-[ALT]-[F1〜F12]を同時押しなのだが、Jornadaの場合、[F1]がメールアイコン、[F2]がIEアイコン、というように最上段のアプリケーションキーが対応する。
jornadaのキーボードは若干数が好くなく配列も特殊である。具体的にはtabキーがQの横ではなくAの横、caps_lockになるべきキーが0の上、ファンクションキーに相当するアプリケーションキーが8個だけ(MobileGear等は12個ある)、'_'キーが'<'の下等。MGL2を使う場合等はファンクションキーの11と12は多用するので無いのは辛い。また、Aの横は何がなんでもコントロールキーで無ければ嫌だという人もいるだろう。これらはwskbdのマッピングを変更することである程度制御が可能である。
NetBSDにおけるwskbdのキーマッピング設定は /etc/wscons.conf で mapfile で指定する方法と、直接 wsconsctl コマンドを入力して指定する方法の2種類がある。常にこの設定を使うのであれば起動時に自動的に設定してくれる /etc/wscons.conf を使用するべきである。
がしかし、2007/5/20現在問題があり正しく動作しない。キーボードが反応しなくなってしまう。
そこでまずは手作業で設定をする。
現状の設定を見るためには以下のようにコマンドを入力する。
# wsconsctl -k -f /dev/wskbd0 map > /tmp/wkfile
ここで-f を設定しないと /dev/wskbd を参照するのだが、なぜかこの/dev/wskbdによるアクセスがキーボードにはならないので必ずwskbd0を指定する。
このwskbdによる操作がおかしいことが/etc/wscons.confのmapfileによる指定できないことの原因。
出力ファイルを見ると以下のようになっている。
map= keycode 1 = Cmd_Debugger Escape keycode 2 = 1 exclam keycode 3 = 2 quotedbl keycode 4 = 3 numbersign keycode 5 = 4 dollar keycode 6 = 5 percent keycode 7 = 6 ampersand keycode 8 = 7 apostrophe keycode 9 = 8 parenleft keycode 10 = 9 parenright keycode 11 = 0 keycode 12 = minus equal keycode 13 = asciicircum asciitilde keycode 14 = Cmd_ResetEmul Delete keycode 15 = Tab keycode 16 = q Q keycode 17 = w W keycode 18 = e E keycode 19 = r R (以降省略)
ここから現状のキー配置で不満がある部分を変更すればよい。変更の方法は2種類あって、keycodeによるダイレクト指定と、現在の設定されているシンボルを使って変更する方法がある。
keycodeによる設定方法は上記の出力と同じように設定する。例えば、"tab"キーをControlキーにするには、現状のTabキーのコードである15をControl_Lにする。これをwsconsctlコマンドで設定するには以下のようにする。
# wsconsctl -k -f /dev/wskbd0 -w map+="keycode 15 = Control_L"
または、keysymを使って以下のようにする。
# wsconsctl -k -f /dev/wskbd0 -w map+="keysym Tab = Control_L"
これを設定したいキー分だけ設定すれば良い。また、起動時に自動的に設定したければこれをrc.local等から呼び出すscriptを用意すればよいのだが、やはり面倒である。
そこで標準の/etc/wsconsを変更してwskbd0を指定できるようにする。
--- etc/rc.d/wscons.orig +++ etc/rc.d/wscons @@ -137,13 +137,14 @@ mapfile) mapfile=$arg1 + dev=$arg2 ( while read entry; do case "$entry" in \#*|"") continue ;; *) - cmd="$wsctl -w \"map+=$entry\"" + cmd="$wsctl -f /dev/$dev -w \"map+=$entry\"" cmd="$cmd > /dev/null" eval $DOIT $cmd ;;
そして/etc/wscons.confには次のような行を追加する。
mapfile (キーマップファイル) wskbd0
キーマップファイルは/usr/share/wscons/keymaps/以下のファイルのように変更したいキーのみを並べて記述する。以下は例。
# Kata_Hira->F9, Han_Zen->F10 keycode 112 = Cmd_Screen8 f9 F9 keycode 41 = f10 F10 # Tab->Control, Muhenkan->Tab keycode 15 = Cmd1 Control_L keycode 123 = Tab # UP->'\'/'_', Shift_R->UP, '\'/'_'->Shift_R keycode 200 = backslash underscore keycode 115 = Shift_R keycode 54 = Up
Jorandaはファンクションキーが8個だけしかなく、そのままではMGLでのキー操作ができないため、「カタカナ/ひらがな」, 「半/全」キーをF10, F11に変更している。次にTabをコントロールキーに、無変換キーをTabにし、'↑'を'_'に、右シフトを'↑'に、'_'を右シフトに割り当てているが、このあたりは好みで変更すれば良い。なお、手元のJoranda690で試した範囲では「英数」キーがどうも有効になっていない。Caps_Lockかと思っていたがどうやら違うようだ。
なお、wsconsctlでwskbd0のキーマップを変更した場合、この状態でXsever (Xhpc) を起動すると標準のキーマップが英語キーボード配列になる。Xserver上のキーマップはwsconsのキーマップとは異なるため、注意。
NetBSD/hpcshではJornadaのタッチパネルをポインティングデバイスとして使用できる。使用するためにはまず初期設定が必要。
タッチパネルの座標系を調整するためのコマンドだが、最初に必ず実行して初期化ファイルを作成する必要がある。一度作成出来てしまえばあとは再起動後もこのファイルを読み込んでくれる。
このコマンドは、コンソール画面から入力する (X server起動する前)
# tpctl
画面がクリアされ、中央に十字マークが表れるのでそれをスタイラスでポイントする。
以降、左上、左下、右下、右上に十字マークが移動するのでそれをポイントする。
終わると/etc/tpctl.datが作成されている。このファイルはテキストファイルである。
# cat /etc/tpctl.dat HP Jornada 690 (Japanese) SN00000,0,0,639,239,5,472,574,320,120,224,230,64,24,150,799,64,216,852,817,576,216,856,171,576,24
ファイルの内容はそれぞれのハードウェア個体によって異なると思われる。
起動時にこのファイルを自動的に読み込むように、/etc/rc.confに設定を行う。
tpctl=YES
インストール時にswapパーティションを作成しなかった。これはCFには書換え回数に寿命があり、同じ場所を頻繁に書き換えているとあっという間に寿命に達してしまうから。メモリの少ないJornadaではswapに頻繁に書き出すことが予想される。ならばいっそのことswap無しにして、実メモリ以上のことはできないようにしてしまえ、ということである。
そうは言ってもどうしてもメモリが欲しい場合がある。そんなときはファイルを作成してそのファイルをswapエリアとして使用するという方法が使える。
適当なディレクトリにswap用ファイルを作成する。ここでは64Mの空ファイルの例。
# mkdir /swap # dd if=/dev/zero of=/swap/swapfile01 bs=1m count=64
swapファイルを使用する場合は以下のようにコマンドを実行する
# swapctl -a /swap/swapfile01
システム起動時に自動的に追加することも可能だが、可能な限りメモリ内で実行するようにしたいので私はやっていない。
swapファイルの使用を終了する場合は以下のようにコマンドを実行する
# swapctl -d /swap/swapfile01
# swapctl -l Device 1K-blocks Used Avail Capacity Priority /swap/swapfile01 65536 0 65536 0% 0
NetBSD/hpcshは当然のごとくネットワークカードを使える。PCMCIAカードを挿入すれば、ハードウェア的に認識する。基本的にこれらは機種に依存せず、NetBSD/i386でも何でもまったく同じ使い勝手である。
まずPCカードスロットにカードを挿入する。と認識されれば以下のようなカーネルメッセージがコンソールに出力される。
ne0 at pcmcia0 function 0: <Fast Ethernet, CF Size PC Card, 1.0> ne0: Ethernet address XX:XX:XX:XX:XX:XX ukphy0 at ne0 phy 1: Generic IEEE 802.3u media interface ukphy0: AC101 10/100 media interface (OUI 0x0010a9, model 0x0021), rev. 11 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
カードによって表示は異なる。これは10/100対応のカードのためこのような表示になっている。
これをdhcp環境でIPアドレスを割り当てるには次のようにする。
# dhclient ne0 Internet Systems Consortium DHCP Client V3.0.3 Copyright 2004-2005 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/products/DHCP Listening on BPF/ne0/XX:XX:XX:XX:XX:XX Sending on BPF/ne0/XX:XX:XX:XX:XX:XX Sending on Socket/fallback DHCPDISCOVER on ne0 to 255.255.255.255 port 67 interval 6 DHCPOFFER from 10.200.0.1 DHCPREQUEST on ne0 to 255.255.255.255 port 67 DHCPACK from 10.200.0.1 bound to 10.200.0.133 -- renewal in 256049 seconds.
もちろんIPアドレス等は環境によって異なる。
NetBSDでは、カードを挿入した直後に自動でスクリプトを走らせる機能が直接的には存在しない。なので上記を手動で実行する。なお、固定で割り当てる場合はifconfigで普通に設定する。
もちろんOS起動時には自動的に設定が可能だが、Jornadaの性格上持ち運ぶことを考えると起動時には何も設定しない方がいいんじゃないかと思う。
ワイヤレスLANカードでも操作は基本的に同じである。標準で対応しているのはPrism2といわれる802.11b対応のカードのみである。
対応カードの場合、以下のように認識する。
wi0 at pcmcia0 function 0: <NTT-ME, SS-LANCard11HQ, CD2B1AZ018, Eval-RevA> wi0: 802.11 address XX:XX:XX:XX:XX:XX wi0: using RF:PRISM2.5 MAC:ISL3873B(PCMCIA) wi0: Intersil Firmware: Primary (1.0.4), Station (1.0.3) wi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
対応カード一覧はman wiで多少出てくるが、実際には入手可能なカードは限られると思う。特に最近の11bカードはPrism3になっており使えないらしい。
無線LANの場合、ネットワーク名やWEPキーが必要な場合がある。その場合は以下のように設定する。
# ifconfig wi0 ssid (ネットワーク名) nwkey (WEPキー)
この後にdhclient wi0とすれば普通のLANカードと同じに使える。
また、wiconfigで電波が届いているアクセスポイント一覧を参照できる。
# wiconfig wi0 -D scanning ...... AP Information ap[0]: ScanReason: [ Inquiry request from host ] netname (SSID): [ hogehoge-net ] BSSID: [ XX:XX:XX:XX:XX:XX ] Channel: [ 7 ] Quality/Signal/Noise [signal]: [ 174 / 189 / 15 ] [dBm]: [ 174 / 40 / -134 ] BSS Beacon Interval [msec]: [ 100 ] Capinfo: [ ESS WEP ] DataRate [Mbps]: [ 1 ]
WPAのネットワークの場合は事情が異なる。私は今現在では使っていないのでわからない。
NetBSD自体は各種のネットワークカードに対応しているが、NetBSD/hpcshのデフォルトで使えるカードは、上記ne, wiの他はmbeと呼ばれるMB8969xカードのみ。このカードを私は持っていないため確認できない。
また、以前カーネルを変更して試したときに3Com 3C509、いわゆるEtherLinkIIIカードは、認識するも使えなかった。やはりとりあえずはNE2000互換かPrsmIIのWIカードを使うのが良い。さがせばジャンクや中古でいくらでもあると思う。
LANカードではない通信カード、つまりシリアルデバイス系の物は使える。例えば、AirEDGEのPCカード系の物とか。
使い方はhpcshに限らずNetBSD共通なので割愛。