I followed some post a while ago, and it said to make an ~/.xmodmap file like so:

! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

I did, and it now I can swap esc and caps lock by doing xmodmap ~/.xmodmap. I wanted this to be permanent, so I added that command to my ~/.bash_profile, but it doesn't seem to work; I still have to manually xmodmap. As an EEng dropout, I am tempted to just rewire my keyboard }:-) but I know there must be a better way. How can I make this work, permanently?

8 Answers 8


Execute xfce4-settings-manager, in Session and Startup -> Application autostart, add an entry, which executes xmodmap ~/.xmodmap

Or rename the file to ~/.Xmodmap

  • 1
    I renamed the file (it worked!), but I am surprised that my .bash_profile method didn't work. I thought my bash-fu was not weak :P
    – Dan Ross
    Mar 4, 2013 at 18:23

xkb has an option that does just that:

caps:swapescape      Swap ESC and Caps Lock

so you could simply add1

/usr/bin/setxkbmap -option "caps:swapescape"

to your XFCE autostart items.

1: there might be a better way to do this but I'm not a XFCE user

  • Cool, I'll give it a shot on my next reboot. Xmodmap doesn't quite work perfectly for me, I have to manually trigger it after switching keyboard languages, for example. I'm also not on XFCE anymore. That was cool, but I wanted more control at home (Arch) and better interop with the stuff my colleagues use at work (vanilla Ubuntu).
    – Dan Ross
    Nov 24, 2015 at 18:32
  • @DanRoss - Well, if you're using gnome (the only DE that I'm familiar with) it's as simple as adding caps:swapescape to your xkb-options Nov 24, 2015 at 18:47

In Xfce on Opensuse I swapped my Esc and Caps Lock keys by editing the /etc/X11/xorg.conf.d/00-keyboard.conf file as explained at the archlinux wiki. I added a line that says

Option "XkbOptions" "caps:swapescape"

to the section that starts with

Section "InputClass"

then restarted my computer and the deed was done.

Back up the file before you edit it. If you make a mistake your gui might not start and you will have to restore or edit the file from a command prompt. In Ubuntu I recall that I had to put add the option line in a keyboard configuration file that had a different name.


Using the .Xmodmap didn't work for me.

However, a quick man xmodmap says that this works and did:


which can be executed:

xmodmap .xmodmaprc

EDIT: ack...I'm wrong...the default did change a few years ago to .Xmodmap from .xmodmaprc. Creating the .Xmodmap file caused my xfce to load "funny". In .bash_profile, I put:

xmodmap .xmodmaprc

Then it worked, and I have a script that restarted my Xfce so it all works.


enter image description here

xfce desktop system keyboard has option to do it on mx linux, not sure about other distros.


I'd been performing a similar adjustment (/usr/bin/setxkbmap -variant altgr-intl -option 'ctrl:nocaps') by putting it in the application autostart, as mentioned by another answer. However, at some point it stopped working for me, so here's my alternative approach:

From the Settings menu, choose "Removable Drives and Media", then the "Input Devices" tab. Enable the option to "Automatically run a program when a USB keyboard is connected" and enter the setkbmap command of your choice.


Add this command into a bash (something.sh) file, then add it to startup applications.

setxkbmap -option caps:escape

And if you wanted to rid of it, just do this:

setxkbmap -option
  • 1
    don_crissti has already posted setxkbmap -option "caps:swapescape" as an answer.  Since the question asks how to swap Esc and Caps Lock, I wonder why you believe that this is a better answer (or even a correct one at all).  Can you justify your claim that your answer works?  Do you claim that you answer works better than don’s? … … … … … … … … … … … … … … … … … … … … Please do not respond in comments; edit your answer to make it clearer and more complete.  Include references, if possible. Apr 17, 2022 at 19:27

Edit /etc/default/keyboard and change




This works for all users, and also when not logged in.

(Xmodmap settings get lost when you plug in/out external keyboards (including usb headphones with volume keys since they register as (very small) keyboards), unless the file is named ~/.Xmodmap, but then XFCE will delay applying its own keyboard shortcuts (super-d for show desktop, super-left for tile-left etc.) for 10 seconds after login/unlock. So I wouldn't recommend using Xmodmap on XFCE.)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.