How to map the Caps Lock key to Escape key in Arch Linux

23

10

My OS is Arch Linux amd64, Gnome ENV.

I want to map the Caps Lock key to Esc (escape) in Arch Linux. I run the command:

xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'

It works well, but a moment later, the Caps Lock key works again. And I must run the command again.

I'm pretty sure that this solution worked well maybe a year ago. What's my problem? Can anyone help me to map the Caps Lock key to Escape key forever in my Arch Linux OS?

pexeer

Posted 2013-03-16T02:57:57.650

Reputation:

Answers

48

Any of the following (in increasing order of complexity):

  1. Use setxkbmap to remap the key (does not require a daemon and is independent of your desktop environment or window manager). Don't forget to add the command before the exec gnome-session (or similar) line in your ~/.xinitrc or ~/.xsession:

    setxkbmap -option caps:escape
    

setxkbmap can be found in package extra/xorg-setxkbmap.

  1. dconf-editororg.gnome.desktop.input-sources.xkb-options → Add caps:escape to the aforementioned field.
  2. gnome-session-settings → Startup Programs → Add → Name=Remap caps lock to escape, command=setxkbmap -option caps:escape
  3. Create a custom keyboard layout

FYI, I obtained the XKB rule by grepping /usr/share/X11/xkb/rules for caps and esc.

pilona

Posted 2013-03-16T02:57:57.650

Reputation: 1 173

Thanks for no. 2. I was looking for that info for ages. No I can set this on the command line via gsettings org.gnome.desktop.input-sources xkb-options ['caps:none', 'numpad:pc', 'numpad:mac'] – Oliver Jan Krylow – 2016-08-20T20:53:29.487

Regarding no. 1: If you want to swap it rather than have two escape keys, you can run setxkbmap -option caps:swapescape. – comfreak – 2019-07-31T17:51:45.973

2The dconf method worked perfectly for me thanks! – Keith Smiley – 2013-10-28T04:44:42.050

5

For use in X, the Arch Wiki Gnome page has instructions for modifying the keyboard with XkbOptions:

Using the dconf-editor, navigate to the key named org.gnome.desktop.input-sources.xkb-options and add desired XkbOptions (e.g. 'caps:swapescape') to the list.

In the console, you can create a custom keymap for the same effect. Create your personal keymap with the requisite changes for CapsLock and Escape at /usr/share/kbd/keymaps/i386/qwerty/yourmap then tar it and include a line in /etc/vconsole.conf to call it:

KEYMAP=yourmap

jasonwryan

Posted 2013-03-16T02:57:57.650

Reputation:

3

Xorg.conf

You can achieve this by editing the file /etc/X11/xorg.conf.d/00-keyboard.conf.

Example file:

Section "InputClass"
        Identifier      "system-keyboard"
        MatchIsKeyboard     "on"
        Option          "XkbLayout" "us"
        Option          "XkbModel"  "pc104"
        Option          "XkbOptions" "caps:swapescape"
EndSection  

You can specify multiple XkbOptions, for example caps:swapcaps,terminate:ctrl_alt_bksp for having esc and caps swapped but also allowing the X to be killed with CtrlAlt Backspace. You can find more info about this in man xkeyboard-config.

GUI

You can also use GNOME Tweak Tool (gnome-tweak-tool package). Just click on Typing and then choose whatever you like from the Ctrl position menu (see image below).

enter image description here

styrofoam fly

Posted 2013-03-16T02:57:57.650

Reputation: 1 746

2

You can use xmodmap. Put your ~/.Xmodmap:

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

(be sure at starting X will use your ~/.Xmodmap)

uzsolt

Posted 2013-03-16T02:57:57.650

Reputation: 1 017

This is the correct, distro-agnostic and desktop-agnostic answer. – dotancohen – 2015-11-01T11:41:51.857

When I put this in ~/.Xmodmap, nothing happens :( – Jan Warchoł – 2015-11-20T20:29:47.877

Put line xmodmap ~/.Xmodmap to your ~/.xinitrc! – uzsolt – 2015-11-21T07:04:25.407

When I put this in ~/.Xmodmap and then run xmodmap ~/.Xmodmap I get errors: xmodmap: .Xmodmap:1: bad remove modifier name 'lock=caps_lock', not allowed xmodmap: .Xmodmap:2: bad keysym target key symbol 'Escape=Caps_Lock' xmodmap: .Xmodmap:3: bad keysym target key symbol 'Caps_Lock=Escape' xmodmap: .Xmodmap:4: bad add modifier name 'lock=caps_lock', not allowed xmodmap: 4 errors encountered, aborting – comfreak – 2019-07-31T17:47:25.337

You'll need spaces around equal sign. I modified the answer. – uzsolt – 2019-07-31T18:03:15.803

0

The file /etc/X11/xorg.conf.d/00-keyboard.conf can also be auto-generated using systemd-localed. Use the following command:

localectl set-x11-keymap us "" "" caps:escape

Or, including some other useful options:

localectl set-x11-keymap us,de "" "" caps:escape,grp:alt_caps_toggle,grp_led:caps,lv3:ralt_switch_multikey,terminate:ctrl_alt_bksp,eurosign:e,rupeesign:4

Quick explanations:

  • CapsLk functions as Esc
  • Toggles between two keyboard layouts us/de with Alt+CapsLk
  • CapsLk LED indicates which layout is active
  • Right Alt (RAlt) is the "multikey" (see Compose Key)
    • RAlt+e generates
    • RAlt+4 generates (similar to how Shift+4 generates $)
  • Ctrl+Alt+Backspace kills X

friederbluemle

Posted 2013-03-16T02:57:57.650

Reputation: 492

0

! I don't know why the answers above don't work. Here is a working one for me. In your ~/.Xmodmap

! 66 is the keycode of Caps_Lock
clear    Lock
keycode  66 = Escape 

and then

$ xmodmap ~/.Xmodmap

I'm using Fedora and non-Gnome window manager. HTH

John Chain

Posted 2013-03-16T02:57:57.650

Reputation: 109