2013年2月10日日曜日

Cygwin/XによるEmacs単体表示

1 ssh

 何もThinkPad X60からGNOME全体を動かさなくてもよいのだよなぁ。
 Emacsだけ動かしてDELLのXに表示してやれば、いい。
 でもうまくいかなくて「X-broadcast」してしまった。どうもXに関する知識が古くて、Xhostとか、Xauthとか、よくわからなかったのだ。ただ、もしかしたらポートをあけてなかっただけかも、と思って調べ出したらはまってしまった。やはり認証系らしいということはわかったところでsshでXプロトコルを転送できることに気づく。これだと新しくポートを開放する必要もない。
 こんな感じでDELLからThinkPad X60のemacsを起動できる。

ssh -Y xxx.xxx.xxx.xxx -f emacs

>> ssh - OpenSSH SSH クライアント (リモート ログイン プログラム)

 ただしワーニングがでる。Xauthをきちんと設定しろみたいな?
 その上、今まで苦労してきた問題(キーボードレイアウトとか)が再燃してしまった。

2 startxwin.exe

 GNOME on ThinkPad X60を動かすのとはちがって、Emacs on ThinkPad X60はちょっと手間がかかった。

  1. DELL上でX Serverを動かす。
  2. X Server上で動いているxtermとか、から「ssh -Y xxx.xxx.xxx.xxx -f emacs」を起動。

3 問題1. どうして勝手にxtermが立ち上がっちゃうの?

 まぁ、X ServerはWindowsのスタートプログラムの中にstartxwin.exeを放りこんでやれば、いいか、と思っていたのだけど、そうすると、なぜか、無条件にxtermが立ち上がる。もちろんこのxtermから「ssh -Y xxx.xxx.xxx.xxx -f emacs」をやってやれば、いいのだけど、それは面倒だ。
 なんでxtermは立ち上がってるの? 「ssh -Y xxx.xxx.xxx.xxx -f emacs」が起動できれば、それでいいじゃん。

 答えは「~/.startxwinrc」をつくってやる、だった。
 この中で「ssh -Y xxx.xxx.xxx.xxx -f emacs」を記述。でもそうすると、Xを立ち上がげると、かならずEmacs on ThinkPad X60が動いてしまうので美しくない、と反省。そこで「~/.XWinrc」でタスクトレイのXのアイコンのメニューを定義できるらしいので、そこに「ssh -Y xxx.xxx.xxx.xxx -f emacs」を設定。

  1. スタートプログラムからあらかじめ、X Serverを動かしておく。
  2. タスクトレイのXからEmacs on ThinkPad X60を動かしてやる。

 完璧な作戦だ(笑)。

4 問題2. キーボードのレイアウトがjp106じゃねーよ

 「~/.startxwinrc」の中に「setxkbmap -rules xorg -layout jp -model jp106」を記述。

5 問題3. 何か、Emacsのフォントがちょー汚いんだけど?

5.1 原因1. 環境変数LANGが設定されてない

 「~/.startxwinrc」の中に「export LANG=jaJP.UTF-8」を記述しても引き継がれない。sshがセキュリティの関係で環境変数を制御しているらしい。「ssh -Y xxx.xxx.xxx.xxx -f emacs」のときに「emacs」をシェルでラップして設定するか、呼ぶときに「export LANG=jaJP.UTF-8;emacs」見たいな感じでやれば、できると思うけど(未確認)、ThinkPad X60側のsshの環境をいじることにした。

  1. まず、sshdでユーザごとに環境変数の設定が可能なように変更。
  2. 「~/.ssh/environment」に「LANG=jaJP.UTF-8」を定義。

 このとき、「~/.ssh/rc」に「export LANG=jaJP.UTF-8」とかでやろうとすると、Xauthが動かなくなる。

>> sshd.config - OpenSSH SSH デーモン 設定ファイル

5.2 原因2. GNOMEがいろいろやってくれている

 上記の設定を終えても、同じフォントでずいぶんと見え方がちがう。
 GNOME上ほど美しくない。
 最初、アンチエイリアスが無効になっているのか、と思ったが、どうやらGNOMEがきれいに見えるように制御しているようだ。たとえば、生のGTKのスクロールバーはかなりださいが、GNOMEではかなりきれいになる(ちょっとMacっぽい)。
 外観を制御しているらしい。
 なるほどなぁ。人はKDEとか、GNOMEとか使うわけだ。
 で、ここで「/usr/local/bin/gnome-session」を動かすと、きれいにはなるのだが、GNOME自体が立ち上がってしまうので、だったら「X -broadcast」と同じじゃん、ということになる。ログイン操作が省かれただけ(でもなくて他にもいろいろ問題がでてきた)。

 gnome-wmでそのへんの制御をしているわけではないらしく、だめ。
 いろいろ試してみてgnome-appearance-propertiesを動かすと、GNOMEとスクロールバーとかも含めて同じようになることがわかった。ただgnome-appearance-properties自体(設定画面)も立ち上がってしまう。
 うーん。でもここまでかな……。GNOMEの外観(appearance)だけ、取り込もうという使い方は普通、しないだろうから。方法がないような気がする。

6 最終的に

 下記のようなシェルを書いてrunのショートカットのリンク先に「C:\cygwin\bin\run.exe /usr/bin/bash -l -c /home/yamada/emacsThinkPad.sh」と設定。


/usr/bin/startxwin
export DISPLAY=:0.0
/usr/bin/ssh -Y  xxx.xxx.xxx.xxx -f gnome-appearance-properties &
/usr/bin/ssh -Y  xxx.xxx.xxx.xxx -f emacs &
  
  

 なんだかんだと、次にWindowsでEmacsを使うときにはCygwin/Xでもいいかなぁ、と思っていたけど、この単体起動のときのフォントがいまいちというのはけっこうマイナスポイントかもしれない。

7 余談

7.1 Cygwin/X

 テキストのクリップボードは効く(XWinのデフォルト)。ただし、イメージはできなかった。WindowsのIMEから日本語入力はできない。たぶんFreeBSDのインプリメントメソッドを使う必要がある。EmacsではSKKなので無問題。

7.2 FreeBSDのバッテリーの残量はsysctlでわかるらしい。

7.3 なんとバッチが用意されていた

 DELLから簡単にEmacs on ThinkPad X60を動かそうと、Cygwinの/usr/binの下を見ていたら「startxdmcp.bat」というものが用意されていることに遅ればせながら気づく。
 「X -broadcast」でやるようにしちゃったよ。バッチの中ではXWinを使っていた。

7.4 XWinのオプション

 フルスクリーンや「-rootless」ができる。ほお。

>> XWIN