X でのキーが変になる件

関連:xserver-xorg-input-kbd: settings in xorg.conf ignored

最近 Debian を sid にアップグレードすると、X に入ったときにキー配列が us になってたり、Ctrl-Alt-Fn でコンソールに切り替えられなくなったりしてる。

xserver-xorg-input-kbd がキー設定について hal を見るようになったようで、xorg.conf に何を書いても無視されてしまう。

hal が提供するキー設定の元は console-setup が生成した /etc/default/console-setup に書かれており、

XKBMODEL="jp106"
XKBLAYOUT="jp,jp"
XKBVARIANT="latin,"
XKBOPTIONS="grp_led:scroll"

とか書かれている*1。こいつを

XKBMODEL="jp106"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS="ctrl:nocaps"

などと書き直して、コンソールを再設定し、それを hal に反映させる。

# invoke-rc.d console-setup restart
# invoke-rc.d hald restart

hal が設定を読めていることを確認。

# lshal | grep xkb
  input.xkb.layout = 'jp'  (string)
  input.xkb.model = 'jp106'  (string)
  input.xkb.options = 'ctrl:nocaps'  (string)
  input.xkb.rules = 'base'  (string)
  input.xkb.layout = 'jp'  (string)
  input.xkb.model = 'jp106'  (string)
  input.xkb.options = 'ctrl:nocaps'  (string)
  input.xkb.rules = 'base'  (string)
  input.xkb.layout = 'jp'  (string)
  input.xkb.model = 'jp106'  (string)
  input.xkb.options = 'ctrl:nocaps'  (string)
  input.xkb.rules = 'base'  (string)
  input.xkb.layout = 'jp'  (string)
  input.xkb.model = 'jp106'  (string)
  input.xkb.options = 'ctrl:nocaps'  (string)
  input.xkb.rules = 'base'  (string)

このあと xinit してみて、Xorg.0.log に、

(II) XINPUT: Adding extended input device "AT Translated Set 2 keyboard" (type: KEYBOARD)
(**) Option "xkb_rules" "evdev"
(**) Option "xkb_model" "jp106"
(**) Option "xkb_layout" "jp"
(**) Option "xkb_options" "ctrl:nocaps"

と書かれていればおk。

*1:dpkg-reconfigure console-setup するとまたこの変な設定が復活する。