CoLinuxで使うP8210

「P8210をもっといびつに使う」に 戻る

★CoLinuxをインストール

 ふと思いついてWindowsXP Tablet EditionにCoLinuxをインストールしてみた。仕事ではLinuxばっかり使っているが、帰ってからホームページ書くときはWindows使っ ていることが多い。で、Windowsが起動した状態からLinuxも使えたらそれなりに便利かも、と思って。
 そもそも、せっかくのタブレットPCなのに、Linuxばっか使っていると、せっかくのペンの使い道が無さ過ぎるし。

 このCoLinuxをインストールすると、Windowsの中の1プログラムとしてLinuxカーネルが走るのである。なんとも恐ろしい時代になったも のだ。
 ERROR STROMさんのページなどを参考に、SOURCEFORGE のここからCoLinuxの0.6.2と、debianのディスクイメージをダウンロードしてきた。ネットワークはTAPドライバを利用し、ブ リッジ接続することにした。
 TAPドライバをインストールすると、WindowsXPのコンパネのネットワークのところに「ローカルネットワーク接続2」が現われるが、名前の変更 使って「TAP」にしておく(後でdefault.colinux.xmlの中で指定するので)。この「TAP」と、ほんものの「ローカルネットワーク接 続」をコントロールパネル上で選択した後右クリックでブリッジ接続にしておく。

 こうしておいて、CoLinuxの方もしかるべく設定すれば、CoLinuxの動く機械がもう一個存在していて、ネットワークでつながれているかのごと く振舞う。便利である。ただし、コンソールはあっ てもこのままではXとかは走らない(VNC使うという手もあるが、以下ではcygwinを使ってXサーバをWindows側に用意した)

★coLinuxインストーラ
  世の中、ありがたいものを公開してくれている方がいるものである。というのは、CoLinuxをインストールしたものの、インストールされ るディストリ ビューションがdebianだったもので、設定に四苦八苦していたのである。しかしありがたいことに、Vineやそのほかのディストリビューションをイン ストールするためのファイルを公開してくれている方がいるのである。XMLinux ページのCoLinuxインストーラのページがそれ。
 ここでVine 3.1インストーラを手にいれてやってみました。いやぁすばらしい。使い慣れたVineになりましたよん。sambaも無事動いて、WindowsXPの 中で動いているCoLinuxのVineがsambaサーバになって、Linuxディレクトリを読み書きににいくというおかしな状況に。つーわけで、現在 のcoLinux起動用のXMLはこんな感じ。

<?xml version="1.0" encoding="UTF-8"?>
<colinux>
<block_device index="0" path="\DosDevices\C:\coLinux-Vine\root.ext3" enabled="true"/>
<block_device index="1" path="\Device\Harddisk0\Partition6" enabled="true" /> ←ほんもののVineの/home
<block_device index="2" path="\Device\Harddisk0\Partition5" enabled="true" /> ←ほんもののVineの/usr
<block_device index="7" path="\DosDevices\C:\coLinux-Vine\swap_device" enabled="true"/>
<bootparams>ro root=/dev/cobd0</bootparams>
<image path="vmlinux"/>
<memory size="64"/>
<network index="0" name="TAP" type="tap"/> ←ネットワークの設定。nameを Windowsから設定したのと合わせる。
</colinux>

 \Device\Harddisk0\Partition6というのは/dev/hda7であり、Vine Linuxが/homeとして使っているパーティション。これをCoLinuxからは/dev/cobd1と見えるようにしてある。Partition5 の方はVineの/usrで、この二つをCoLinuxからもマウントできるようにしてある。
  ほんもののVineの/はマウントしてないが、してもいいかもしれない。ちなみに/homeは読み書き可能にしているが、/usrは readonlyでmount(ちょっと怖いからね)。  これで後はCoLinuxの上でsambaを走らせれば、Windows側からもVine Linuxの/homeや/usr以下が読めるわけだ。

 それにしても、こんな使い方をするんなら、メモリ256Mは少なすぎるな。512Mか1Gに増設しないと、ということで512Mに増設した。1Gのメモ リは今んところ、信じら れないぐらい高い。→ADTECの対応 メモリのページ(富士通純正だともっととんでもない値段)。

★Cygwinと CoLinuxがWindowsXPの上
 うれしがって貼り付けておこう。WindowsXPの元で走るCoLinuxの上でxdviやemacsが動いているところ。ちょうどこのページを編集 中のmozilla composer(これはWindows版だ)が上に被さっている。Windows上ではATOK15が動いていて、Linux上ではATOK for  Linuxが動いていて、二つのタスクバーが同時に出ている(下にある方がATOK for  Linuxのやつ)。どっちも「話し言葉関西」モードになってたりするが(^_^;)。
 XserverはCygwinが担当している。



 何が嬉しいといって、スタートメニューにしろxdviのボタンにしろ、指で押せるということ。emacsに至っては、選択するためには「ペンでなぞる」 (指でもいいけど、わしの指は太すぎて1行ずれてしまうことがままある)だけでいいのである。

★マウス中ボタン
 Windowsのコンパネのマウス設定で「中ボタンでスクロールする」のチェックがONになっていると、中ボタンがX内で使えなくなって しまうので気をつけよう。

★Vineのxfsを使う

 CoLinuxからcygwinのXサーバを使っていたわけであるが、フォントがちょっと足りない。
 どうせVineがインストールされているわけだし、ということでVineでxfsを起動しておいて、cygwinからxfsを使うようにした。

 まず、coLinux側の/etc/X11/fs/configの最後に

no_listen = tcp

というのがあって、このままだとtcpを聞いてくれないそうなので、この前に#をつけてコメントアウト。

 やらなくてもいいのかもしれないが、/etc/rc.d/init.d/xfsの中の

daemon xfs -droppriv -daemon

の後ろに「-port 7100」を追加。んでもってCoLinuxを再起動。xfsだけ再起動でいいのかと思ったら、なぜかしないとだめだった。どうしてだろう???

 あとはcygwin側で

xset +fp tcp/coLinux:7100

しておく(cygwinの/etc/hostsに、coLinuxのIPアドレスを記述しておくこと)。このあたりを自動化するには、cygwinの /usr/X11R6/lib/xinit/xinitrcの最後を、

# start some nice programs
xhost +coLinux
xset +fp tcp/coLinux:7100
esd -public -tcp &
exec xterm -e /usr/bin/bash -l

のように変えておく(赤字が追加部分)。赤字の3行めはサウンドデーモンの設定。これでcygwin側でesdが動きはじめる。一方、CoLinux側で サウンドデバ イスとしてcygwinのesdを指定しておけば、とりあえず音は鳴る(私が試したのはKDE関係だけなので、kcontrolで「cygwin: 16001」と設定した)。

 CoLinux側からはcygwinのXを使うことになるので、CoLinux側の.loginに

setenv DISPLAY cygwin:0.0

を追加しておき、「おまえのDISPLAYはcygwinにあるんだよ」と教えておく。もちろん、/etc/hostsにcygwinのIPアドレスを書 いておく必要がある。私はtcshを使っているのでこうやっているが、bashとかを使っている人はそれなりの書き方(試してないけど、「set DISPLAY=cygwin:0.0」と、「export DISPLAY」でいいはず)でどっかに書いてちょうだい。

★CoLinuxのX上 でのIME
 こうなると、CoLinux上でもできるだけ普通のLinuxと同じようにいろいろやりたくなるところだが、一番の問題は日本語入力である。

 今のところ、二つの方法を使っている。一つはATOK for LinuxをCoLinux内で動かす。何も考えずにcygwinのXを起動したのでは、httx(ATOK for Linuxのインプットメソッド)は起動してない。CoLinux側でhttxを立ち上げてやる必要がある。

 もう一つの方法はimeproxy。 cygwinでWindowsのIMEが使えるようになるというもの。CoLinux側からは、cygwinのマシンでcannaが動いているように見え るので、「cannaserverはcygwinだよ」と教えてやりつつcannaを使うように設定すればよい。imeproxyを起動するには、 cygwin側で、

/usr/sbin/canna2imm32.exe -inet -a

を実行しておく(-aはATOK用だそうである)。

 次に、.Xdefaultsに

Emacs*useXim: True
*conversionOnKeys: Henkan
!! setup for kinput2
!!
*VT100*translations: #override Shift<Key>space:begin-conversion(JAPANESE_CONVERSION)
Kinput2.mappedWhenManaged: false
Kinput2.width:  1
Kinput2.height: 1
Kinput2*ConversionStartKeys: Shift<Key>space
Kinput2*OverTheSpotConversion.modeLocation: bottomleft
!!
*KinputProtocol.BackwardCompatible: true
*KinputProtocol.XlcConversionStartKey:  Shift<Key>space
!!
!!
*inputMethod: kinput2
Kinput2*conversionEngine: canna
Kinput2*cannahost: cygwin
Kinput2*useOverrideShellForMode: True

を追加しておく。これで、httx(ATOK for Linux)を使うにしろkinput2(canna=imeproxy)を使うにしろ、X側の設定はOK。
 さらに、.loginに

if ( "$XIM_PROG" == "atokx2" ) then
    setenv XMODIFIERS @im=htt
else
    setenv XMODIFIERS @im=kinput2
endif

を追加。これでXMODIFIERSを適切にセットする。
#!/bin/bash
case "$XIM_PROG" in
canna* | Canna*)
if [ -z "`ps xc | grep kinput2`" -a -n "$DISPLAY" ]; then
kinput2 &
fi
;;
atokx2* | AtokX2*)
if [ -z "`ps xc | grep httx`" -a -n "$DISPLAY" ]; then
if [ -f ~/.Xdefaults ]; then
xrdb -merge ~/.Xdefaults
fi
/usr/lib/im/httx -if atokx2 -xim htt_xbe &
fi
;;
esac
というファイルをstartimeとして作る(当然、chmod +xしておく)。これはVineがXを立ち上げる時に実行するスクリプトから抜き出した。
 これで、環境変数XIM_PROGがcannaならkinput2を、atokx2ならhttxを起動してくれる。CoLinuxの場合、Xを起動する のはcygwin側なので、インプットメソッドをCoLinux側で起動してやらないといけない(Vineを普通に使う時は、XもVineで動いているか らこのあたりは勝手にやってくれる)。

 Vineのスクリプトである「setime」は環境変数の面倒をみてくれるので、以上の設定をやっておけば、「setime  canna」とか「setime atokx2」とかで必要な設定をやっておいてくれる。

 後はcygwinのXが立ち上がっている状態でstartimeを実行すれば、以後立ち上げるXのプログラムでATOK for Linuxなりimeproxyなりを使った日本語入力が使える。startimeも.loginで実行させてもいいかもしれない。

 二つの問題点を書いておくと、

ATOKの場合:なぜか、「変換」キーで変換モードに入るのに、「変換」キーでは抜けられなくなる時がある????もしかしたらWindows側で窓使い の憂鬱を使っている影響???

cannaの場合:途中まで入力して、「途中まで入力して」という状態になった後で「変換して」と打つと「途中まで」が「とちゅうまで」とひらがなに戻っ てしまう。cannaってこんな動きしてたっけ???

 そこでもう一つの方法として、canna-tamagoを使う方法でやってみたところ、今のところはこれが一番よさそう。
 まず、「apt-get install tamago」しておく。次に、.loginの最後の方に

setenv CANNASERVER cygwin
setenv EMACS_IME canna-tamago

を書く。.emacs.elのcanna-tamagoを使っている部分(これまたVineの)

    (if (or (and (not (and (boundp 'CANNA) CANNA))
         (>= emacs-major-version 21))
        (equal emacs-ime "canna-tamago"))
    (progn
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       ;; emacs-dl-canna/emcws でないとき (tamago4)
      
       ;; Canna サーバの指定
       (if (null (getenv "CANNASERVER"))
      ; 下はcoLinux向けに書き直した。
           (setq canna-hostname "cygwin")
         (setq canna-hostname (getenv "CANNASERVER")))

と直した。Vineに最初からついてきたのだと、canna-hostnameでなくcanna-serverになっていてうまくいかなかった。なぜだろ う?
 後は

       (define-key global-map [henkan] 'toggle-input-method)
       (define-key isearch-mode-map [henkan] 'isearch-toggle-input-method)

として変換キーで漢字モードのONOFFをするようにして、

      ;(define-key its-mode-map [henkan] 'its-kick-convert-region)

の方はコメントアウトしておいた。これだと一応今のところは無事。一番ストレスなく動く。