flat7th

+ Cygwin X で MS-IME

created 2006-01-05 modified 2022-09-27 

項目それはなに
えせかんなかんなサーバと同じサーバ機能(=対クライアントインタフェース)を持ち、実際のIMEにはかんな以外のものを利用する。かんなプロトコルのプロキシってとこかな。
IMEProxyえせかんなをベースに、MS-WindowsのIMEを使うようにしたもの。coLinuxの中のひとがつくってオープンソースにした。
kinput2多分、X上のIMクライアント(emacsやxterm)に対するサーバであり、かんなクライアント。だと思う。かんなサーバとしゃべることができる=えせかんな、IMEProxyともしゃべれる
emacsとか多分、kinput2用のクライアントライブラリを組み込んである...のかなぁ

おそらくこんな図

(Cygwin X 環境ではどちらも同一PC内ですが
左側 = ユーザが対面しているコンピュータ、右側 = 中央設備やサーバルームのコンピュータ のイメージ)


Cygwin setupでインストールするもの
  • X
  • emacs

tar玉でインストールするもの
(tar玉をひろって / で tar 展開)
  • canna (kinput2が依存するので)
  • imeproxy
  • kinput2
リンク
Cygwin + X + 日本語アプリケーション

Cygwin X での使い方
  • /usr/sbin/canna2imm32 &
  • X 起動
  • kinput2 -canna &
  • export XMODIFIERS='@im=kinput2'
  • (emacs 起動)
  • (Shift+スペースで幸せに入力切り替え)

おわるとき
  • (emacs 終了)
  • kinput2 を kill
  • X停止
  • canna2imm32 を kill

canna2ime32 と X の起動&停止順番はどっちが先でもOKのはず。

で今はとりあえず

~/bin/imstart
/usr/sbin/canna2imm32 &
kinput2 -canna &

~/bin/imenv
export XMODIFIERS='@im=kinput2'

~/bin/imstop
PID=$(ps |grep kinput2 |awk '{print $1}')
kill $PID

PID=$(ps |grep canna2imm32 |awk '{print $1}')
kill $PID

rm -rf /tmp/.iroha_unix


xrdb が cpp を利用するので、ないとエラーになる件は...
gcc をインストールする、のではなく、xrdb -nocpp でいける。

それを自動起動したいのだが


うーむ、.bash_profileからだといけるが、mystartwin.batから起動しようとしても上手くいかない。

mystartxwin.bat
@echo off
SET DISPLAY=127.0.0.1:0.0

SET CYGWIN_ROOT=\mycygwin
SET RUN=%CYGWIN_ROOT%\bin\run -p /usr/X11R6/bin

SET PATH=.;%CYGWIN_ROOT%\bin;%CYGWIN_ROOT%\usr\X11R6\bin;%PATH%
SET PATH=%PATH%;%CYGWIN_ROOT%\usr\local\canna\bin

SET XAPPLRESDIR=/usr/X11R6/lib/X11/app-defaults
SET XCMSDB=/usr/X11R6/lib/X11/Xcms.txt
SET XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB
SET XNLSPATH=/usr/X11R6/lib/X11/locale

SET LANG=ja_JP.SJIS

REM Cleanup after last run.
if not exist %CYGWIN_ROOT%\tmp\.X11-unix\X0 goto CLEANUP-FINISH
attrib -s %CYGWIN_ROOT%\tmp\.X11-unix\X0
del %CYGWIN_ROOT%\tmp\.X11-unix\X0
:CLEANUP-FINISH
if exist %CYGWIN_ROOT%\tmp\.X11-unix rmdir %CYGWIN_ROOT%\tmp\.X11-unix

%RUN% XWin -multiwindow -clipboard -silent-dup-error

:WAIT1
@echo waiting...
sleep 1
if not exist %CYGWIN_ROOT%\tmp\.X11-unix\X0 goto WAIT1

rem %RUN% xhost +192.168.201.101

xset fp+ /home/%USERNAME%/.ttfonts
xrdb -nocpp -merge /home/%USERNAME%/.Xresources

%RUN% xterm -sb -e /usr/bin/bash -l
rem %RUN% ck -e /usr/bin/bash --login

メモ:usr/local/canna/bin にパスを通すのは重要。
kinput2が起動しなくてしばらく悩んだ。DLLが見えてなかった。
kinput2に限らず、起動しなかったら
cygcheck 実行ファイル
とやるとよい。依存するdllをチェックできる。

~/.bash_profile
if [ $TERM == xterm ]; then
  export XMODIFIERS='@im=kinput2'
  PID2=$(ps -elf |grep canna2imm32 |awk '{print $2}')
  if [ x$PID2 == x ]; then
    imstart_imm32
  fi
  PID3=$(ps -elf |grep kinput2 |awk '{print $2}')
  if [ x$PID3 == x ]; then
    imstart_kinput2
  fi
fi

~/bin/imstart_imm32
#!/bin/bash
rm -rf /tmp/.iroha_unix
/usr/sbin/canna2imm32 > /dev/null 2>&1 &

~/bin/imstart_kinput2
#!/bin/bash
kinput2 -canna -kanjifont '-ricoh-ms_gothic-medium-*-*-*-*-*-*-*-*-*-jisx0208.1990-*' &

~/bin/imstop_imm32
#!/bin/bash
PID2=$(ps -elf |grep canna2imm32 |awk '{print $2}')
kill $PID2
rm -rf /tmp/.iroha_unix

~/bin/imstop_kinput2
#!/bin/bash
PID1=$(ps -elf |grep kinput2 |awk '{print $2}')
kill $PID1

~/.Xresources
Kinput2*conversionStartKeys: \
        Shift<Key>space \n\
        <Key>Zenkaku_Hankaku

Emacs.Fontset-0:-*-fixed-medium-*-normal-*-12-*-*-*-*-*-fontset-myFixedFontset1,\
	ascii:-*-lucidatypewriter-medium-r-*-*-12-*-*-*-m-*-iso8859-*,\
	japanese-jisx0208:-aliastt-gothic-medium-*-normal-*-12-*-*-*-c-*-jisx0208.1990-*,\
	katakana-jisx0201:-aliastt-gothic-medium-*-normal-*-12-*-*-*-c-*-jisx0201.1976-*

Emacs.geometry:96x40-10-40

XTerm*utf8: 1
*VT100.pointerColor: red
*VT100.cursorColor: red



Emacs
export XMODIFIERS='@im=kinput2'
emacs

Shift+Space で切り替えできる。

Ctrl-O で切り替えしたくない件
~/.canna
(global-unbind-key-function 'japanese-mode)
(global-unbind-key-function 'alpha-mode)

半角全角 でONできるがOFFできない件は
ハードコーディングされているとのことであきらめた。

リンク備考
http://web.kyoto-inet.or.jp/people/m-ito/linux/kinput2.html





なんか動いたかも

mystartxwin.bat
SET DISPLAY=:0.0
SET PATH=%CYGWIN_ROOT%\bin;%PATH%
rm -rf /tmp/.X0-lock
run XWin -multiwindow

@rem  :LOOP1
@rem  @echo waiting(tmp dir)...
@rem  @if exist %CYGWIN_ROOT%\tmp\.X0-lock goto END1
@rem  @sleep 1
@rem  @goto LOOP1
@rem  :END1

:LOOP2
@echo waiting(netstat no.6000)...
@netstat -a | grep :6000 > NUL
@if not ERRORLEVEL 1 goto END2
@sleep 1
@goto LOOP2
:END2

xrdb -nocpp -merge .Xresources
xset fp+ /home/%USERNAME%/.ttfonts

@rem ===CANNA2IMM32===
@bash -l -c "test x$(ps -elf |grep canna2imm32 |awk '{print $2}') == x"
@if ERRORLEVEL 1 goto SKIPIMM32
:RUNIMM32
rm -rf /tmp/.iroha_unix
run %CYGWIN_ROOT%\usr\sbin\canna2imm32
:SKIPIMM32

@rem ===KINPUT2===
@bash -l -c "test x$(ps -elf |grep kinput2 |awk '{print $2}') == x"
@if not ERRORLEVEL 1 goto RUNKINPUT2
:KILLKINPUT2
bash -l -c "kill "$(ps -elf |grep kinput2 |awk '{print $2}')""
:RUNKINPUT2
run kinput2 -canna -kanjifont "-ricoh-ms_gothic-medium-*-*-*-*-*-*-*-*-*-jisx0208.1990-*"

@rem pause
@echo ===FIN===
@sleep 3

canna2imm32は、Xを落としても残る。X起動時、canna2imm32が生きてたらそのまま使う。Windowsからログオフするまで誰も落とさない。
kinput2は、Xを落とすとき、道連れで落ちる。