お気に入りの Ubuntu キーバインド設定(i,j,k,l)

# はじめに
私のお気に入りのキーバインドは前に[僕のMacのキーバインド設定を披露させてください!](https://qiita.com/guchipon/items/4a238cb44a842bb9da01)という記事で紹介しました。
その記事はMac編ですが今回はUbuntu編です。
「半角英数」と「かな入力」の切り替えが「無変換+e」になったのが変更点です。

# 使用環境とツール
* Ubuntu 20.04
* xmodmap

# 前提
そもそもMozcの設定などができていて「半角全角キー」を押すと半角英数入力とかな入力の切り替えができるということを前提としています。

# 手順
1. 下調べ
2. 設定ファイルの作成
3. 設定の反映
4. 設定の永続的な反映

## 下調べ
設定ファイルの作成に関しては
[Linuxで自由自在にキーバインドを拡張する方法を試したら簡単だった](https://ara1yu.hatenablog.com/entry/2017作成/02/11/185340)
を参考にしました。

以下のコマンドを実行してください。

```
xev
```

実行したあと、任意のキーを押すとそのキーの情報をとる事が出来ます。
以下は、「無変換キー」を押して離したときの出力です。

```
KeyPress event, serial 37, synthetic NO, window 0x3600001,
    root 0x195, subw 0x0, time 1713434, (160,-17), root:(421,557),
    state 0x0, keycode 102 (keysym 0xff7e, Mode_switch), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3600001,
    root 0x195, subw 0x0, time 1713546, (160,-17), root:(421,557),
    state 0x2000, keycode 102 (keysym 0xff7e, Mode_switch), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

```
ここから把握すべきことは 「keycode 102」 作成です。つまり「無変換キー」に対応するキーコードは102であるということがわかります。
今回使う「i, j, k, l」キーのキーコード、全角半角キーのキー名を調べてみてください(答え: Zenkaku_Hankaku)。
以降はこのキーコードを使ってキーバインド設定をしていきます。

## 設定ファイルの作成
ホームディレクトリにkeyboardディレクトリを作成し、そこに keybind_config というファイルを作成してください。
keycode の番号は環境ごとに異なる可能性があるので、ご自身の環境でxevコマンドを用いてkeycodeを調べ、設定を記述し保存してください。

```
keycode 102 = Mode_switch

keycode 40 = d D BackSpace BackSpace
keycode 26 = e E Zenkaku_Hankaku Zenkaku_Hankaku

keycode 31 = i I Up Up
keycode 44 = j J Left Left
keycode 45 = k K Down Down
keycode 46 = l L Right Right
```

簡単に記述を解説します。

```
keycode [番号] = [普通に押したとき] [Shift押しながら] [Mode_switch 押しながら] [Shift + Mode_switch 押しながら]
```

今回は Mode_switch を「無変換キー(キーコード102)」としたので上のような設定で所望のキーバインドを設定できます。



## 設定の反映
以下のコマンドで作成した設定を反映させます。ファイルのパスを間違えないようにしましょう。

```
xmodmap [設定ファイル名]
```

## 設定の永続的な反映
作戦としては、
1. ログイン時にターミナルが自動で開くようにする
2. ~/.bashrc にbashが起動したときに上記の「設定の反映」でのコマンドが実行されるようにする
という流れです。

### ログイン時にターミナルが自動で開くようにする
以下の記事を参考にしました
[Ubuntu起動と同時に自動でターミナルを開く](https://qiita.com/dfukunaga/items/a59e5b18172b048190ec)

### ~/.bashrc の編集
~/.bashrc に以下を追記してください。

```bash
# apply keybind-setting-file in ~/keyboard/keybind_config
if [ -f ~/keyboard/keybind_config ]; then
    xmodmap ~/keyboard/keybind_config
fi

```

保存して終了してください。
これで作業は終了です。PCを再起動してログインしてみてください。ターミナルが自動で開き、キーバインド設定が反映されているはずです。

# うまく行かないときの確認事項
* ターミナルが開かない。 -> 参照先の記事をもとに作成したファイルのファイル名もしくはファイル内の記述が間違っていないか。
* キーバインド設定が反映されない。 -> シェルスクリプトに誤字がある。(ifブロック内のxmodmapコマンドの引数であるファイルのパスは正しいか)
* 突然に設定したキーバインドで動作しなくなった -> ターミナルを開いてみてください(~/.bashrcに記述したコマンドが実行されます。)

# Ubuntu 22.04 にアップグレードしたら...
[こちらのサイト](https://askubuntu.com/questions/1403490/xmodmap-doesnt-work-anymore-after-upgrading-to-22-04)のようにUbuntu 22.04にアップグレードすると、xmodmapが動きません。
以下にxmodmapが動くようにする設定変更の手順を記します。

1. ログインしているなら、一度ログアウト
1. ログインするユーザを選択
1. パスワードを入力する前に右下の歯車マークをクリックして「Ubuntu on xorg」を選択(おそらくUbuntuが選択されているので)
1. パスワードを入力してログイン

ログインする度にこの作業をする必要はないのでご安心を。

# 終わり
しばらくはこのキーバインドが気に入っているのでこの設定で行こうと思います。
しかし、一度このように設定を自分で作ってしまえば、変更も自分で自由自在にできるようになります。
みなさんも、この記事を参考に独自の設定をしてみてください。