結論
GUIの設定で変更可能ならそちらを使う(GNOMEなど)。
それができない場合は localectl
を使う。
以下日本語配列のMacBookで右commandキーをcontrolに置き換える例。
localectl set-x11-keymap "jp,us" "applealu_jis" "," "ctrl:swap_rwin_rctl"
参考
Xorg でのキーボード設定 - ArchWiki
variant の設定に関する警告は一読しておくこと。上記の例は jp,us
に対していずれもデフォルトの variant を設定している。
詳細
Linuxのデスクトップ環境を使っていると、いろいろなところでキーボードレイアウトやキーマップが設定される。
そのため、設定を変えても別のところで上書きされたりして反映されないことがある。
基本的には利用しているデスクトップ環境が用意しているキーボード設定画面から変更できればそれが一番いい方法だが、たとえばxfceではキーボード設定が貧弱なので修飾キーの入れ替えなどはできない。
そこで Xorg でのキーボード設定 - ArchWiki に記載されている localectl
経由で設定する方法を利用する。
以前は setxkbmap
を .xinitrc
で実行したり、Xorgの設定を直接書き換えたりして設定していたが、今は systemd
経由で設定を反映する localectl
がいい方法だろう。
localectl
の操作方法は概ね他の systemd
の制御コマンドと同様で、大してオプションもないので簡単に扱える。(詳細は man localectl
を参照)
設定可能な keymaps, layouts, models, variants, options は各種list系コマンドで確認できるが、 options については /usr/share/X11/xkb/rules/base.lst
を見たほうが説明付きでわかりやすい。
余談
修飾キー以外の設定として _
をShiftなしで入力できるようにしているが、その設定は .Xmodmap
で行っている。
それに合わせて最初 .Xmodmap
に修飾キーの置き換え設定も記述したが、うまく反映されなかった。(明示的に xmodmap .Xmodmap
で読みこめば反映された)