+ 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を落とすとき、道連れで落ちる。