VNC経由でKVMのkeymapがおかしなことになる件
Windows等のVNCクライアントから、ホストOSのvncserverにつないで、そこからさらにvncviewerでゲストOSのVNCサーバ(libvirtが動かしてると思われるgtk-vncなるもの?)に接続したときに、":(colon)"が"*(asterisk)"になったり、とにかくキーマップが壊れる現象が毎回起こっていた。
http://www.greedy.jp/blog/nowhereman/200911/09/111248
http://www.nucl.phys.titech.ac.jp/~kenichi/xkeymap.html
以上の2箇所を見ながらうんうんうなること数日、やっと解決を見た。
# setxkbmap -print XKB extension not present on :2.0
XKBが何かわからないが、どうもX.orgを立ち上げるときに読み込まれる、キーボードの扱いを標準化したような機能らしく、
これがVNCの起動時に有効になってないことが原因で、
手動でvncserverと打とうが、serviceとして起動させようが関係なくおかしくなっていたようだ。
回避方法は以下の通り。
- vncserverの立ち上げ時(X.orgの設定が読まれるタイミング?)にXKBが有効化されるよう指定する
/etc/sysconfig/vncserversの、起動オプションを指定する箇所に +kb と付け足してやる。 例) VNCSERVERARGS[2]="-geometry 1024x768 -nohttpd +kb"
まずこれでvncserverがXKBの機能を使うようになる。
すでにサービスとして動かしている場合は、
# service vncserver restart
等が必要になるだろう。
サービスとして動いてない場合はどうなるかよくわからないけど、何とかしてvncserverのバイナリに"+kb"の引数を渡してやるのだろう。
- setxkbmapコマンドでXKB自体の設定を日本語キーボード向けに変える
うちのサーバの場合、英語っぽい設定になっていたようなので、
# setxkbmap -rules xorg -model jp106 -layout jp
を実行してやった。
# setxkbmap -print xkb_keymap { xkb_keycodes { include "xfree86(jp106)+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc(pc102)+jp(latin)+jp:2" }; xkb_geometry { include "pc(jp106)" }; };
以上の2つの設定で、上述の症状は改善された。
ポイントは、VNC接続でホストOSのデスクトップを表示させて、さらにそこからVNCクライアントを立ち上げたときにキーボード設定がうまく渡されて無かったということ。
- 参考ディレクトリ
/usr/share/X11/xkb