メインコンテンツへスキップ

Linux + Wayland + US配列キーボードの環境でShift + CapLockを押したときにCapsLockをトグルしないようにする方法

··241 文字·2 分
Linux Fedora XKB キーボード Wayland
shiitake256
著者
shiitake256
I’m only human

動機
#

この設定の目的は、Shift + CapsLockで副作用なく全角半角を切り替えられるようにすることです。

私は普段Windows + US配列のキーボードを使用するときは、Shift + CapsLockで全角半角切り替えています。

Linuxでも同じ操作感を実現したいんですが、単にIMEの設定でShift + CapsLockに全角半角切り替えを割り当てただけでは問題があります。

問題は、Shift + CapsLockを押すと全角半角切り替えと同時にCapsLockもトグルされてしまうので、そのままでは使いづらいということです。

そこで、CapsLockのトグル機能を無効化してShift + CapsLockを純粋に全角半角切り替えのみに使用できるよう設定します。

ググってみたところXmodmapでやるのが簡単そうではあったんですが、そちらはWayland環境では使えないのでXKB(X Keyboard Extension)の設定でカスタムキーボードレイアウトを追加します。

私が使ってるディストリビューションはFedora KDE Spinです。他のディストリビューションでは違うかもしれません。

環境
#

  • OS: Fedora Linux 41 (KDE Plasma) x86_64
  • ディスプレイサーバー: Wayland
  • キーボード: US配列

設定方法
#

編集対象のファイル
#

XKBの以下の設定ファイルを編集します。

  • /usr/share/X11/xkb/symbols/us - US英語キーボードレイアウトのキーシンボル定義ファイル - このファイルへの修正が肝になります
  • /usr/share/X11/xkb/rules/base.lst - 基本的な(古典的な)キーボードレイアウト、モデル、オプションの一覧- (テキスト形式)
  • /usr/share/X11/xkb/rules/base.xml - 基本的な(古典的な)キーボード設定の構造化された定義(XML形式)
  • /usr/share/X11/xkb/rules/evdev.lst - evdevドライバー用(現在主流)のキーボードレイアウト、モデル、オプションの一覧(テキスト形式)
  • /usr/share/X11/xkb/rules/evdev.xml - evdevドライバー用(現在主流)の構造化された定義(XML形式)

/usr/share/X11/xkb/symbols/us の編集
#

以下の内容を追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
+partial alphanumeric_keys modifier_keys
+xkb_symbols "custom" {
+
+  include "us(basic)"
+  name[Group1]= "English (Custom)";
+
+  replace key <CAPS> {
+      type= "TWO_LEVEL",
+      repeat= No,
+      symbols= [       Caps_Lock,       Caps_Lock ],
+      actions= [ LockMods(modifiers=Lock), NoAction() ]
+  };
+};
  • partial alphanumeric_keys modifier_keys: キーボードのキー定義を部分的に拡張することを示します。
  • xkb_symbols "custom": カスタムキーボードレイアウトを定義するセクションです。“custom"はこのレイアウトの名前で、任意の名前を指定できます。
  • include "us(basic)": ベースとなるUSキーボードレイアウトをインクルードします。“us(basic)“はこのファイル内に定義されている基本的なUSキーボードレイアウトの名前です。
  • name[Group1]= "English (Custom)": キーボードレイアウトの第1グループ(基本レイアウト)に対する人間が読める名前を定義します。ここでは"English (Custom)“としていますが、任意の名前に変更可能です。
  • replace key <CAPS>: CapsLockキーの定義を置き換えます。
  • type= "TWO_LEVEL": CapsLockキーが2つのレベル(通常とShift)のキーであることを示します。
  • repeat= No: CapsLockキーがリピートしないことを示します。
  • symbols= [ Caps_Lock, Caps_Lock ]: 通常状態とShift押下状態の両方で同じCaps_Lockシンボルを生成することを示します。
  • actions= [ LockMods(modifiers=Lock), NoAction() ]: CapsLock単体では従来通りロック機能が働くように設定し、Shift + CapsLock(2番目のレベル)では何もアクションを実行しないように設定します。

/usr/share/X11/xkb/rules/base.lst, /usr/share/X11/xkb/rules/evdev.lst の編集
#

! variantのセクションに以下の内容を追加します。

1
2
3
! variant
...
+custom          us: English (Custom)
  • custom us: English (Custom): 先ほど定義したカスタムキーボードレイアウトを、USキーボードレイアウトのバリアントとして追加します。

/usr/share/X11/xkb/rules/base.xml, /usr/share/X11/xkb/rules/evdev.xml の編集
#

以下の内容を追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<xkbConfigRegistry version="1.1">
  <layoutList>
    <layout>
      <variantList>
+        <variant>
+          <configItem>
+            <name>custom</name>
+            <description>English (Custom)</description>
+           </configItem>
+        </variant>
      </variantList>
    </layout>
  </layoutList>
</xkbConfigRegistry>
  • <variant>: 新しいキーボードレイアウトのバリアントを定義します。
  • <configItem>: キーボードレイアウトの設定項目を定義します。
  • <name>custom</name>: 先ほど定義したカスタムキーボードレイアウトの名前を指定します。
  • <description>English (Custom)</description>: このレイアウトの人間が読める説明を指定します。

設定の反映
#

デスクトップセッションに再ログインすると、デスクトップマネージャの設定画面から先程追加したキーボードレイアウトを選択できるようになります。

参考
#

困ったときのArch Wiki