LoginSignup
5
3

Linux US キーボードの CapsLock を Ctrl に変更する方法

Last updated at Posted at 2023-11-19

Linux マシンの US キーボードの CapsLock を Ctrl に変更する方法を調べました。いろんなやり方があるようです。

us-keyboard-capslock-1.png

環境

  • OS: Arch Linux x86_64
  • ホスト: MacBookAir6,2 1.0
  • デスクトップ環境: Xfce 4.18

いろんな設定方法

  • xmodmap
  • setxkbmap
  • Xorg の設定ファイル
  • グラフィカルユーザインターフェース(GUI)

xmodmap で設定する場合

xmodmap は Xorg におけるキーマップやマウスボタンのマッピングを変更するためのユーティリティです。-- ArchWiki

Xorg ディスプレイサーバーが起動するときに、/etc/X11/xinit/xinitrc が読み込まれます。
読み込まれるものの中に $HOME/.Xmodmap という Xmodmap の設定ファイルがあります。

 xmodmap は Xorg におけるキーマップやマウスボタンのマッピングを変更するためのユーティリティです。-- ArchWiki

最初はないと思うので、$HOME/.Xmodmap を作ります。
ArchWiki によると以下の設定で CapsLock を Ctrl に変更できるそうなのでおまじないとして貼り付けます。

$HOME/.Xmodmap
clear lock
clear control
keycode 66 = Control_L
add control = Control_L Control_R

以上!

これで設定が永続化されているはずです。

:tada::tada::tada:

僕のマシンでは /etc/X11/xinit/xinitrc の中身はこんな感じでした。
ここで $HOME/.Xmodmap が読み込まれることがわかると思います。

/etc/X11/xinit/xinitrc
#!/bin/sh

userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
sysresources=/etc/X11/xinit/.Xresources
sysmodmap=/etc/X11/xinit/.Xmodmap

# merge in defaults and keymaps

if [ -f $sysresources ]; then
    xrdb -merge $sysresources
fi

if [ -f $sysmodmap ]; then
    xmodmap $sysmodmap
fi

if [ -f "$userresources" ]; then
    xrdb -merge "$userresources"
fi

if [ -f "$usermodmap" ]; then
    xmodmap "$usermodmap"
fi

# start some nice programs

if [ -d /etc/X11/xinit/xinitrc.d ] ; then
 for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
  [ -x "$f" ] && . "$f"
 done
 unset f
fi

twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &
exec xterm -geometry 80x66+0+0 -name login

ちなみに /etc/X11/xinit/xinitrc は初期設定のままにしておくのが作法のようです。
万一挙動を変更したい場合は、$HOME/.xinitrc を作るとこれが代わりに読み込まれるようになるとのことです。

terminal
cp /etc/X11/xinit/xinitrc ~/.xinitrc

また、ウィンドウマネージャが開始される前にコマンドを実行したい場合は、$HOME/.xprofile ファイルを作りその中で実施します。

setxkbmap で設定する場合

setxkbmap は、キーボードレイアウトの設定ができる便利なコマンドです。現在の X セッション限定でキーボードレイアウトを設定します。

以下のコマンドを実行して CapsLock を Ctrl に変更することが可能です。

terminal
setxkbmap -option ctrl:nocaps

いつでも設定変更ができて便利ですが、このコマンドを打つだけでは設定は永続化されません。

いつでも CapsLock をオンオフできるようにコマンドを用意しておくと便利かもしれません。

~/.local/bin/capslock
#!/bin/bash

# Usage
#
#    capslock on
#    capslock off
#
[ "$1" == on ] && setxkbmap -option
[ "$1" == off ] && setxkbmap -option ctrl:nocaps

:tada::tada::tada:

Xorg の設定ファイルで設定する場合

/etc/X11/xorg.conf/etc/xorg.confXorg を設定することもできます。

僕のマシンでは /etc/X11/xorg.conf.d/00-keyboard.conf というファイルがあり、その中にキーボード関連の設定が記述されています。
コメントを読むとこれは自動生成されたものなので、どうも触らないほうがよさそうです。

/etc/X11/xorg.conf.d/00-keyboard.conf
# Written by systemd-localed(8), read by systemd-localed and Xorg. It's
# probably wise not to edit this file manually. Use localectl(1) to
# instruct systemd-localed to update it.
Section "InputClass"
        Identifier "system-keyboard"
        MatchIsKeyboard "on"
        Option "XkbLayout" "us"
        Option "XkbModel" "pc105+inet"
        Option "XkbOptions" "terminate:ctrl_alt_bksp"
EndSection

localectl コマンドを使用して systemd-localed にキーボード設定を更新するよう指示を出せる仕組みになっているようです。

localectl コマンドでキーボード設定を更新する文法は以下のとおりです。サブコマンドは set-x11-keymap で、引数を四つ取ります。

localectl set-x11-keymap LAYOUT [MODEL [VARIANT [OPTIONS]]]

まずは現在の設定を確認します。Xorg の設定ファイルを直接覗く以外にも確認する方法があります。

terminalで現在の設定を確認
localectl status

# System Locale: LANG=en_US.UTF-8
#     VC Keymap: us
#    X11 Layout: us
#     X11 Model: pc105+inet
#   X11 Options: terminate:ctrl_alt_bksp
terminalで現在の設定を確認
setxkbmap -print -verbose 10

# Setting verbose level to 10
# locale is C
# Trying to load rules file ./rules/evdev...
# Trying to load rules file /usr/share/X11/xkb/rules/evdev...
# Success.
# Applied rules from evdev:
# rules:      evdev
# model:      pc105+inet
# layout:     us
# options:    terminate:ctrl_alt_bksp
# Trying to build keymap using the following components:
# keycodes:   evdev+aliases(qwerty)
# types:      complete
# compat:     complete
# symbols:    pc+us+inet(evdev)+terminate(ctrl_alt_bksp)
# geometry:   pc(pc104)
# xkb_keymap {
#         xkb_keycodes  { include "evdev+aliases(qwerty)" };
#         xkb_types     { include "complete"      };
#         xkb_compat    { include "complete"      };
#         xkb_symbols   { include "pc+us+inet(evdev)+terminate(ctrl_alt_bksp)" };
#         xkb_geometry  { include "pc(pc104)"     };
# };

確認した現在の設定をもとに設定変更をするコマンドを組み立てます。四つの引数をどうするかの問題です。

  • LAYOUT
  • MODEL
  • VARIANT
  • OPTIONS

使用可能なパラメータ値は以下のコマンドで確認できます。

localectl list-x11-keymap-models
localectl list-x11-keymap-layouts
localectl list-x11-keymap-variants [layout]
localectl list-x11-keymap-options

僕の場合はこうなりました。VARIANT は該当しないので空にしています。変更したのは OPTIONS だけです。

terminalで設定変更をするコマンドを組み立て
sudo localectl set-x11-keymap \
  "us" \
   pc105+inet \
   "" \
   terminate:ctrl_alt_bksp,ctrl:nocaps

リブート後に設定が反映され永続化されているはずです。

:tada::tada::tada:

グラフィカルユーザインターフェース(GUI)

僕の(今使っている)マシンにはないのですが、Linuxディストリビューション によっては便利なグラフィカルユーザインターフェース(GUI)が付いてくる場合があります。
例えば、Linux Mint ではチェックボックスで簡単にキーボード設定の変更ができます。

linux-mint-keyboard-layouts-2023-02-24 23-19-40 (1).png

:tada::tada::tada:

さいごに

本記事は autoracex #257 の成果です。ありがとうございます。

toukon-qiita-macbook_20230912_091808.jpg

5
3
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
5
3