18
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

XKBによるHHKB (US) のためのキーマップ変更 (Ubuntu 18.04 LST)

Posted at

🌾本記事の概要
自作PCにUbuntu 18.04.04 LSTをインストールした際の手順を残しておきます。
以下,目次です。今回はfcitx-mozcのインストールからX keyboard extension (XKB) によるキーマップ変更についてです。

# マシン構成について
Ubuntu 18.04.4 LSTのインストール
NVIDIAドライバ & CUDAの更新 (ログインループ改善)
fcitx-mozcのインストール & 設定
XKBによるキーマップ変更 (for HHKB [US])

# 適宜追記

前回記事はこちら↓
Qiita『自作PCにUbuntu 18.04 LSTをインストール & セットアップ (NVIDIAドライバ関係)』

マシン構成について

今回Ubuntu 18.04.04 LSTをインストールしたマシンの構成は以下の通りです。

構成要素 購入パーツ名
マザーボード X570 Taichi (BIOS ver. 2.70; ASRock)
CPU Ryzen 7 3700X (AMD)
CPUクーラー 虎徹 Mark II (サイズ)
グラフィックボード GeForce RTX 2080 Ti VENTUS GP OC (MSI)
メモリ DDR4-3200 16 GB×2 (Crucial)
SSD (OSインストール先) MX500 500 GB 2.5インチ (Crucial)
HDD (データ保存用) WD Red 3 TB 3.5インチ (Western Degital)
電源 RM850x 850 W (80PLUS GOLD; Corsair)
ケース Define C (Fractal Design)

fcitx-mozcのインストール & 設定

今回インストールしたUbuntu 18.04.04 LST (ちなみに日本語 Remix) にはデフォルトのインプットメソッドとしてIBusがインストールされていましたが,好みの問題でFcitxに変更します
(二代目俺のメモ『Ubuntu 19.10の日本語入力をfcitx-mozcにする』を参考にさせていただきました)

fcitxfcitx-mozcをインストールし,ibusをアンインストールします。

.sh
$ sudo apt install fcitx fcitx-mozc
$ sudo apt --purge remove ibus

入力メソッドを起動します。

.sh
$ im-config

fcitxをアクティブにしたら再起動します。

.sh
$ sudo reboot

再起動できたらFcitxおよびMozcの設定を行います。私は,キーボードとして主にHHKB Professional2 Type-S (US)を使用しているので,HHKB (US) 向きの設定になります。
(JUNのブログ『HHKBをUbuntuで使う』を参考にさせていただきました)

まず,以下のコマンドを入力します。

.sh
$ sudo dpkg-reconfigure keyboard-configuration

その後開くウィンドウで
キーボードモデル:Happy Hacking
キーボードが由来する国:英語 (US)
キーボードのレイアウト:英語 (US)
AltGrとして機能させるキー:キーボード配置のデフォルト
コンポーズキー:コンポーズキーなし
Xサーバーを強制終了するのに〜:<いいえ>

と選択していきます。設定が完了したら次にFcitx設定を開きます。

.sh
$ fcitx-configtool

入力メソッドタブにおいて入力メソッドをMozcだけにし,歯車アイコンをクリックしてキーボードレイアウトを既定の入力メソッドから英語 (US)に変更します (不要?)。

全体の設定タブにおいて入力メソッドのオンオフをにします (Escを押すことでにできます)。

デフォルトのスキンがダサい [要出典] のでfcitx-skin-materialに変更します。

~/.config/fcitx/skinディレクトリを作成し,ダウンロードしたmaterialフォルダをコピーします。

Fcitxを再起動した後にFcitx設定外観タブを開き,Show Advanced Optionsにチェックを入れ,下の方にあるスキン名の欄にmaterialと入力します。

ついでにフォントとメニューのフォントをNoto Sans CJK JP Mediumに,表示するフォントロケールをja_JP.UTF-8に変更し,再起動して完了です。

XKBによるキーマップ変更 (for HHKB [US])

Fcitxに続いてMozcの設定を行う前に**HHKB (US)用のキーマップをカスタムします**。

なぜキーマップを変更したいのか

私は主にWindowsでHHKBを使用しているため,HHKBのDIPスイッチを下記のように設定しています。

SW1 SW2 SW3 SW4 SW5 SW6
ON OFF ON OFF ON OFF

具体的にはDeleteキーがBS (BackSpace)キーになり,キーボード最下部の配列が下記のようになります。

Windows-Left Alt-Left Space Alt-Left Windows-Left

UbuntuではWindowsキーはSuperキーとして機能します。

Windowsで使用する際は,alt-ime-ahkを使用して**Altキー空打ちでIMEを切り替えられるように設定**していました。Ubuntuでこれを再現する方法をすぐには見つけられなかったので,代替案としてUbuntu上で下記のようなキー配置にリマップすることにしました。

Alt-Left 無変換 Space 変換 Super-Left

無変換および変換には,それぞれIMEのオフおよびオン機能をMozcで割り振ることにします。

XKBで目的のキー配列にリマップする

はじめはxmodmapを使ってリマップしようとしましたが,いろいろ調べているうちに最近のUbuntuではxmodmapで変更したキーマップがFcitxによってリセットされてしまう,という情報を目にしました (Qiita『Ubuntuにおけるキーボードレイアウトカスタマイズ:xmodmap問題をxkbで解決』)。

で,最近の推奨としてはXKBを使うのだ,ということらしいので,XKBを経由して目的のキーマップ変更を試みることにしました。
(Honmushi blog『xkbでキーバインドを変更する』を参考にさせていただきました)

以下のコマンドを実行すると現在のXKBの設定が確認できます。

.sh
$ setxkbmap -print
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete"	};
	xkb_symbols   { include "pc+us+us:2+inet(evdev)"	};
	xkb_geometry  { include "hhk(basic)"	};
};

ここで重要なのはxkb_symbolsの項目です。
結論から言ってしまうと,最終的にxkb_symbolspc+us+us:2+inet(evdev)に上書きしたい設定 (例えばmyswap) を追加することになります。
(つまりpc+us+us:2+inet(evdev)+myswapとなります)

myswapを作成するに当たって,まずpcusに何がどのように書かれているかを確認します。
各ファイルは/usr/share/X11/xkb/symbolsディレクトリに格納されています。

pcの中を見てみると

.sh
default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

    key <ESC>  {        [ Escape                ]       };

    // The extra key on many European keyboards:
    key <LSGT> {        [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {        [ backslash,    bar     ]       };
    key <SPCE> {        [        space          ]       };

のように記述されています。

ここでkey <ESC> { [ Escape ] }
<キーシンボル> ESCEscapeという [機能] を割り当てる,ことを意味します。

つまり目的のmyswapを作成するためには,

  • Alt-LeftAlt-RightWindows-Left,およびWindows-Right<キーシンボル>
  • 無変換変換Alt-Left,およびSuper-Left[機能を表す文字]

を調べる必要があります。

なんとなく無変換変換についてはjpに書かれていそうだな,と予測して/usr/share/X11/xkb/symbols/jpの中身を見てみると

.sh
key <NFER> { [ Muhenkan             ] };

key <XFER> {
    type[Group1]="PC_ALT_LEVEL2",
    symbols[Group1]= [ Henkan, Mode_switch ]
};
.sh
key <LWIN> {        [ Super_L       ]       };
key <LALT> {        [ Alt_L         ]       };
key <SPCE> {        [ space         ]       };
key <RALT> {        [ Alt_R         ]       };
// For compatibility with other keyboards connected at the same time:
key <RWIN> {        [ Super_R       ]       };
key <RCTL> {        [ Control_R     ]       };

のような記述が見つかります。欲しかった情報をまとめると……,

<キーシンボル> [機能を表す文字列]
Alt-Left LALT Alt_L
Alt-Right RALT Alt_R
Windows-Left LWIN Super_L
Windows-Right RWIN Super_R
無変換 NFER Muhenkan
変換 XFER Henkan, Mode_switch

となります。また,Henkan, Mode_switchのコンマ以下はShiftキー等を使った複合キー設定なので,今回の目的では特に必要ありません (HenkanだけでOK)。

記述方法が判ったので,実際の設定ファイルの作成に移ります。
まず,ホームディレクトリに.xkb/symbolsおよび.xkb/keymapというディレクトリを作成します。

.sh
$ mkdir ~/.xkb/symbols ~/.xkb/keymap

次に,さきほど特定したキーシンボル等を参考にして,~/.xkb/symbolsディレクトリ内に以下のmyswapファイルを作成します。

.sh
partial modifier_keys
xkb_symbols "swapkeys" {
  key <LALT> { [ Muhenkan ] };
  key <RALT> { [ Henkan   ] };
  key <LWIN> { [ Alt_L    ] };
  key <RWIN> { [ Super_L  ] };
};

さらに,序盤に行ったsetxkbmap -printの出力結果を参考にして,~/.xkb/keymap内に以下のmykbdファイルを作成します。

.sh
xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+us:2+inet(evdev)+myswap(swapkeys)"       };
        xkb_geometry  { include "pc(pc105)"     };
};

xkb_symbolsmyswap(swapkeys)+で追記しています。

以下のコマンドを入力することで作成したキーマップを反映させます。

.sh
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null

ログイン時に自動で実行するために,.bashrc等に上記コマンドを記述しておきます。

最後にMozcの設定を行い,無変換および変換に対して,それぞれIMEのオフおよびオン機能を割り当てます。

Mozcの設定を起動し,一般タブにあるキーの選択の編集ボタンを押します。

Mozcキー設定ウィンドウが開いたら,MuhenkanおよびHenkan入力キーに対して,それぞれIMEを無効化およびIMEを有効化コマンドを割り当てます。

再起動してキーマップが目的のとおりに変更されることを確認しましょう。

以上,お疲れ様でした。

18
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?