キーボードレイアウトの切替え
キーボードレイアウトはキーボードからのスキャンコードをアプリケーションに送信される文字へと変換します。
ASCII 集合以外の文字を入力するために QWERTY キーボードと非 QWERTY キーボードの両方をサポートするには、適切なキーボードレイアウトが必要です。
またキーボードレイアウトは、それ自体は文字を出力しませんがその後のキーの出力を変更するいわゆるデッドキーなどを通じて、より複雑な変換を行うこともできます。
テキストモード
OpenRC
デフォルトのコンソールキーマップは /etc/conf.d/keymaps で適切なキーマップを keymap の値に割り当てることによって設定されています。keymap の値は /usr/share/keymaps で定義されており、ほとんどのユーザーは /usr/share/keymaps/i386/qwerty/ にある値を使うことになるでしょう。必要に応じて、/usr/share/keymaps/i386/include のような適切なインクルードディレクトリから extended_keymaps 変数に値を設定します。たとえば多くのキーボードで E と C となっている位置を Alt-Gr と同時に押すことでユーロとセント(訳註: の通貨記号)が得られるようにするには、extended_keymaps="euro2" を設定します。
keymap="us"
extended_keymaps=""
最後に、変更を反映するために keymaps を再起動して、/etc/init.d/keymaps を boot ランレベルに追加してください:
root #
rc-service keymaps restart
root #
rc-update add keymaps boot
ターミナルに非 ASCII 文字を表示する必要がある場合は、/etc/conf.d/consolefont を編集してフォントを変更しなければなりません:
consolefont="cyr-sun16"
consolefont サービスを再起動し、boot ランレベルに追加してください:
root #
rc-service consolefont restart
root #
rc-update add consolefont boot
カスタムキーマップ
カスタムキーマップを作るには /usr/share/keymaps 内の既存のキーマップを参照します:
user $
vi <keymap file>.map
user $
gzip <keymap file>.map
root #
mv <keymap file>.map /usr/share/keymaps/<some directory>
これはスラッシュとアポストロフィーのキーが入れ替わっている以外は U.S. QWERTY キーマップと同様のカスタムキーマップの例です:
include "us.map"
keycode 40 = slash question
keycode 53 = apostrophe quotedbl
キーコードはシステムによって異なるかもしれません。
キーに対応付けられているキーコードを見つけるには dumpkeys の出力を見ます:
user $
dumpkeys -l
上のコマンドを使ってもキーが見つけられない場合、以下を実行します:
user $
showkey
キーを押すとそのキーコードが表示されます。終わったら、数秒待てば showkey は終了します。
systemd
systemd は /etc/vconsole.conf を使用してターミナルフォントとキーボードレイアウト設定の両方を読み込みますが、OpenRC にあるような詳細な設定はありません。有効な値は OpenRC が対応する変数でサポートしているものと同様のはずです。
KEYMAP=pl2
FONT=LatArCyrHeb-16
X11
現代の X11 アプリケーションは通常 x11-libs/libxklavier (「klavier」は「keyboard」にあたるドイツ語です)を使っており、 setxkbmap を使用して設定することができます。さらに、X11 は仮想ターミナルでサポートされているものよりずっと広範なキーボードレイアウトをサポートしています。
しっかりしたデスクトップ環境は自らキーボードレイアウトを管理していることを覚えておくべきでしょう。先述したアプリケーションを直接使う必要はありませんが、キーボードレイアウトの管理が壊れていたり無い場合には役に立つかもしれません。
KDE Plasma
System Settings を開き Input Devices モジュールへ移動します。
SDDM ログインマネージャで追加の言語を利用できるようにするには、カスタムキーマップの追加についての手順に従ってください。
デスクトップ環境全般
~/.xprofile を編集して setxkbmap をそこから実行するか、Xorg の設定ファイルでキーボードをセットアップします (例は下を見てください)。
GNOME 3 の最近のバージョンはもはや x11-libs/libxklavier を使用していないため、この方法はまったく動作しないか、またはおそらく GNOME によって上書きされるでしょう。同様に他のデスクトップ環境も初期化やレイアウト変更の一環として x11-libs/libxklavier の設定を上書きするかもしれません。
~/.xprofile はサポートしているディスプレイマネージャ (GDM、LightDM、LXDM、および SDDM でのみテストされています) 経由でログインした時にのみ読み込まれる非標準のファイルであり、ディストリビューション固有です。もっとも、このファイルはすべての一般的なディストリビューションでサポートされているようです。
X11 全般
setxkbmap を使用する
これらの変更は永続的ではなく、ユーザーが X11 を再起動するまでの間のみ保持されます。もちろん、このコマンドをスタートアップスクリプトから呼び出して X サーバーが起動するたびに適切なパラメーターがセットされるようにすることもできます。
既存の設定を調べるには:
user $
setxkbmap -query
キーボードレイアウトの設定:
user $
setxkbmap lv
キーボードレイアウト、バリエーション、モデルの設定:
user $
setxkbmap lv apostrophe -model logiultrax
2つのキーボードレイアウトと LED 表示のセットアップ:
user $
setxkbmap -layout us,ru -option grp:shifts_toggle -option grp_led:caps
キーボードの設定オプションの完全なリストについては xkeyboard-config
マニュアルを読むことをおすすめします:
user $
LESS=--chop-long-lines man xkeyboard-config
サポートされているレイアウト、バリエーション、またはその他の xkb プロパティの値をこのアプリケーションで調べることはできないようですが、それらのほとんどは /usr/share/X11/xkb/rules/base.lst ファイルに列挙されています。最も網羅的なリストは /usr/share/X11/xkb/ 内の他のファイルを調べることでのみ得られるようです。設定を正常に保つために、適切なデスクトップ環境のキーボードレイアウト管理を用いることをおすすめします。
システム全体のレイアウト設定とショートカットを使用する
この方法はデスクトップ環境がない構成、言い換えるとウィンドウマネージャを使った単なる X11 におすすめです。Gnome は gnome-control-center を使用して GDM 内でのキーボードレイアウトを変更する機能を削除したので、systemd を使用しないシステムでは GDM もこの方法に依存します。10-keyboard.conf ファイルを作成して適切なキーボード設定を構成します。ディレクトリ /etc/X11/xorg.conf.d が存在しない場合は作成してください。
Section "InputClass"
Identifier "keyboard-all"
Driver "evdev"
Option "XkbLayout" "us,br"
Option "XkbVariant" ",abnt2"
Option "XkbOptions" "grp:shifts_toggle,grp_led:scroll"
MatchIsKeyboard "on"
EndSection
上の例は Left Shift+Right Shift を切り替えのショートカットとして US とブラジル語のキーボードレイアウトを構成しています。ブラジル語レイアウトはキーボードのスクロールロック LED によって示されます。
キリル文字系言語のレイアウトを使用していて、キーボードに “Windows®” キーがある場合、
XkbVariant
オプションに ",winkeys"
を追加する必要があるかもしれません。可能な追加設定
キーボードマッピングの設定の際に使えるバリエーションや選択肢は数多くあります。これらの多くは /usr/share/X11/xkb/rules/base.lst ファイルで見つけることができます。
たとえば、altgr-intl
バリエーションを使うといくつかの国際文字を出力できる US レイアウトを構成できます:
...
Option "XkbLayout" "us,br"
Option "XkbVariant" "altgr-intl,abnt2"
...
これで Right Alt を国際文字を入力するための修飾キーとして使うことができます。
Xorg はコンポジション、すなわち コンポーズキーに続けて一連の文字を押すことによって国際文字や様々なシンボル文字を入力するオプションを提供しています。コンポジションを有効化するには compose:<compose_key>
オプションを追加します:
...
Option "XkbOptions" "grp:shifts_toggle,grp_led:scroll,compose:sclk"
...
上の compose:sclk
オプションは Scroll Lock をコンポーズキーに設定します。この設定では:
- 度の記号 '°' を入力するには Scroll Lock を押してから 'oo' とタイプします
- 著作権記号 '©' を入力するには Scroll Lock を押してから 'oc' とタイプします
- 笑顔 '☺' を入力するには Scroll Lock を押してから ':)' とタイプします
- 上付き文字の2 ('²') を入力するには Scroll Lock を押してから '^2' とタイプします
- 下付き文字の2 ('₂') を入力するには Scroll Lock を押してから '_2' とタイプします
- 直径記号 '⌀' を入力するには Scroll Lock を押してから 'di' とタイプします
...などなど。/usr/share/X11/locale/compose.dir ファイルには使用可能なすべてのコンポジションの情報源が列挙されています。
X のキーボードレイアウトを強化する
キー割当ての追加やファンクションキーへのアクションの追加などのより広範囲な変更をキーボードレイアウトに加える必要がある場合、この方法が必要です。こうした変更は実際のところパッケージのソースファイルの強化にあたるので、パッケージを次にアップデートしたときに変更が保持されるようにユーザーパッチの仕組みを使用することをおすすめします。
基本
関連する Gentoo パッケージは x11-misc/xkeyboard-config です。X でのキーボード設定は仮想コンソールでのそれよりも複雑です。関連する設定ファイルは /usr/share/X11/xkb のサブディレクトリにあります:
- keycodes
- これらのファイルはキーコードをシンボル名に関連付けます。これを変更したくなることはおそらくないでしょう。
- geometry
- これはキーボードの物理的な形状で、キーボードの図を描画するようなソフトウェアによって使用されます。これも変更したくなる可能性は低いでしょう。
- types
- ここにあるファイル群は「タイプ」を作成します。タイプはキーの宣言で使用され、そのキーとどのシフトキーの組み合わせが使用できるかを指定します。
- symbols
- これらのファイルは実際のキー割当てを指定します。
- compat
- ここにあるファイル群はキーに割り当てられる「アクション」(たとえば仮想ターミナルへの切り替えなど)を指定し、名前を与えます。
- rules
- これらのファイルはキーボードタイプや言語といった引数を受け取り、他のディレクトリの適切な仕様を有効化します。
これらのディレクトリ内のファイルについてのより完全な説明は An Unreliable Guide to XKB Configuration by Doug Palmer にあります。これは名前が示すよりもずっと高品質です。さらなるドキュメンテーションは xkeyboard-config のホームページ freedesktop.org にあります。
Xkb はキーの名前を「<AC01>」のように表します。これは「英数字 (Alphanumeric) 領域の C 行(すなわち下から3番目の行、CapsLock のある行です)のキー番号 01 、行の1番左のキー」という意味です。このキーは英語レイアウトでは A です。他の領域のキーは、F5 が「<FK05>」、左コントロールキーが「<LCTL>」というように異なった名前を持っています。
キー割当ての追加
例としてこの節ではイギリス英語キーボードレイアウトを、AltGr と共に a、o、u とタイプするとドイツ語のウムラウト文字 ä、ö、ü が生成されるように強化します。また大文字版についても適切に扱えるようにする必要があります。強化するキーは A (<AC01>)、O (<AD09>)、U (<AD07>) になります。(ß の文字は既に AltGr+S に割り当てられています。)
xkb におけるウムラウト付き文字の名前は「adiaeresis」といった具合になります。これらの名前は /usr/include/X11/keysymdef.h ファイルにありますが、名前を得るには先頭の「XK_」を取り除く必要があります。
symbols ディレクトリから正しいファイルを特定してください。これらのファイルのほとんどは2文字の国名コード(グレートブリテンなら gb のような)から名付けられているので、現在 X で選択されているキーボードレイアウトと同じものを推測します。この例では symbols/gb を強化します。
上の情報を使い、symbols/gb の既存のスキーマをコピーして新しいエントリを作成します。この例ではこれらのエントリを「basic」セクション内に追加します。内容から容易に想像できるとおり、各キーのエントリの波括弧と角括弧に囲まれた4つの項目は順に通常(キーの組み合わせなし)、Shift、AltGr、Shift+AltGr です:
key <AE02> { [ 2, quotedbl, twosuperior, oneeighth] };
追加後、このセクションはこのようになります:
default partial alphanumeric_keys
xkb_symbols "basic" {
// Describes the differences between a very simple en_US
// keyboard and a very simple U.K. keyboard layout defined by
// the SVR4 European Language Supplement and sometimes also
// known as the IBM 166 layout.
include "latin"
name[Group1]="English (UK)";
key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
key <AE03> { [ 3, sterling, threesuperior, sterling ] };
key <AE04> { [ 4, dollar, EuroSign, onequarter ] };
key <AC11> { [apostrophe, at, dead_circumflex, dead_caron] };
key <TLDE> { [ grave, notsign, bar, bar ] };
key <BKSL> { [numbersign, asciitilde, dead_grave, dead_breve ] };
key <LSGT> { [ backslash, bar, bar, brokenbar ] };
// Keys inserted by ACM, 2015-10-23.
key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
key <AD09> { [ o, O, odiaeresis, Odiaeresis ] };
key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
// End of insertion 2015-10-23
include "level3(ralt_switch_multikey)"
};
このファイルをセーブしたら X Window を再起動しましょう。典型的なデスクトップ環境の1つである XFCE は起動する度に上の設定ファイルを再読み込みします。もしエラーがあればエラーメッセージが通常の stderr に書き込まれます - X Window がコマンドラインから起動された場合、stderr はその開始された仮想ターミナルでしょう。
ファンクションキーにアクションを追加する
例として「仮想ターミナル n に切替える」(n > 12 の場合) というアクションを Ctrl、Alt、Shift がすべて押されているときの F1 - F12 に割り当てます。同様の効果は AltGr と Fn が押されているときにも発生するはずです。
まず、symbols ディレクトリ内でファンクションキーの既存の割当てを扱っているファイルを探します。そのファイルは symbols/srvr_ctrl です。これから編集しようとしている、このファイルの F1 エントリは以下のとおりです:
key <FK01> {
type="CTRL+ALT",
symbols[Group1]= [ F1, F1, F1, F1, XF86_Switch_VT_1 ]
};
このエントリについては2つ補足があります:
- これは「CTRL+ALT」タイプです; したがって標準的な Shift と AltGr を使う4つのシフトキー設定に加え、Ctrl+Alt という5番目の設定があります。今回の目標は Ctrl+Alt+Shift を使うことなので、既存のタイプの中には適切なものがなく新しく作る必要があります。
- 「アクション」
XF86_Switch_VT_1
は xkb システムにおいて定義されている単なるシンボルです。その意味は compat 内のあるファイル、具体的には compat/xfree86 によって与えられています。XF86_Switch_VT_13
(以降)のシンボルは存在しません - 代わりに、他に使われていない既存のシンボルであるF13、F14、...、F24 を流用します。
CTRL+ALT+SHIFT タイプを新しく作成する
types/pc に「CTRL+ALT」があるので、これをコピーして「CTRL+ALT+SHIFT」にリネームし Ctrl+Alt+Shift という修飾キーの組み合わせを使えるようにするのは簡単です。結果はこのようになります:
type "CTRL+ALT+SHIFT" {
modifiers = Control+Alt+Shift+LevelThree;
map[None] = Level1;
map[Shift] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Control+Alt] = Level5;
map[Shift+Control+Alt] = Level6;
preserve[Shift] = Shift;
preserve[Shift+LevelThree] = Shift;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "Ctrl+Alt";
level_name[Level6] = "Ctrl+Alt+Shift";
};
F13、...、F24 シンボルを有効化する
XF86_Switch_VT_1
シンボルは compat/xfree86 を見るとすぐ見つかります。この形式をコピーして F13、...、F24 シンボルの割当てを作成するのは簡単です。これらのシンボルの最初の1つである F13 は compat/xfree86 ではこのようになります:
interpret F13 {
action = SwitchScreen(Screen=13, !SameServer);
};
F14、...、F24 についても似たような定義をファイルに追加してください。
F1、...、F12 キーのシンボルのエントリを修正する
これで新しいタイプ CTRL+ALT+SHIFT と F13、...、F24 シンボルが定義されたので、symbols/srvr_ctrl にあるファンクションキーの定義を修正します。以下では F1 の定義について触れますが、他のファンクションキーについても似たような定義を挿入する必要があります:
key <FK01> {
type="CTRL+ALT+SHIFT",
symbols[Group1]= [ F1, F1, F13, F1, XF86_Switch_VT_1, F13 ]
};
types/pc、compat/xfree86、symbols/srvr_ctrl にこれらの変更を行い X を再起動したら、X から仮想ターミナル 13 以降に直接切替えることができます - もちろん、これらが /etc/inittab で設定されている場合に限ります。
関連項目
- Key repeat rate — controls how quickly a key press on the keyboard will repeat if the key is pressed and held for a period of time.