How to bind Ctrl+arrows to Home and End keys? xmodmap does not work

On Windows, I used to bind Ctrl+Left to Home and Ctrl + Right to End via ahk.

Now I'm struggling to achieve this behavior in Ubuntu. I've tried editing /etc/inputrc:

"\e[1;5C": end-of-line
"\e[1;5D": beginning-of-line

It works but only in the terminal window. I've also tried xmodmap:

xmodmap -e "keycode 113=Left NoSymbol Home"

but it does not work.
The strange thing here is that if I bind to Shift + Left in xmodmap it works:

xmodmap -e "keycode 113=Left Home"

My guess here is that the default behavior of Ctrl + Left(skip words) somehow gets priority over xmodmap bindings.

Where can I find where the default bindings are located and how to remove it? Or, maybe I could just bind needed behavior there ?

I'm on Ubuntu 12.04


AutoKey can do bindings like this, but it requires running a service in the background (like ahk, but unlike xmodmap).

Configure a "phrase" where the text is <home>, the paste method is Keyboard, and the hotkey is <ctrl>-<left>:

AutoKey GUI


I'm using Apple aluminum keyboard on Ubuntu workstation and the following xmodmap commands did it for me:

# remap Ctrl_L to ModeSwitch, then use it to map arrow keys so that
# they act like on the MacBook keyboard with Fn key pressed 
xmodmap -e "keycode 37=Mode_switch"
xmodmap -e "keycode 113 = Left NoSymbol Home"
xmodmap -e "keycode 114 = Right NoSymbol End"
xmodmap -e "keycode 111 = Up NoSymbol Prior"
xmodmap -e "keycode 116 = Down NoSymbol Next"

This works perfectly because my Caps Lock key is remapped to Control function using Ubuntu keyboard preferences, so the left Control key is not needed. Since it is located where the Fn key is found on MacBook keyboard, switching between desktop and MacBook keyboards does not impact muscle memory.


Autokey worked for me. The default Autokey behavior would be: map both right ctrl+arrow and left ctrl+arrow. And I wanted only right ctrl, because I used left ctrl to navigate words.

Here is the script I used in Autokey:

output = system.exec_command('xinput query-state "AT Translated Set 2 keyboard" | grep down', getOutput=True)
# 105 is right ctrl
if 'key[105]=down' in output:
    keyboard.send_keys('<end>')
else:
    keyboard.send_keys('<ctrl>+<right>')

Note: you might have a different keyboard name. Try all of them. I had 3 devices, but only one worked

xinput list --name-only | grep -i keyb
Virtual core keyboard
Virtual core XTEST keyboard
AT Translated Set 2 keyboard

P.S. I installed Autokey from GitHub, because the package in Ubuntu Software is broken.