How do I remap certain keys or devices?
I'm searching for a way to remap certain keys in ubuntu.
i.e.
I'd like to change PgUp to Home or PgDown to End.
Does a built-in command or a tool exist reassign keys in Ubuntu/GNOME?
xorg keyboard shortcut-keys
add a comment |
I'm searching for a way to remap certain keys in ubuntu.
i.e.
I'd like to change PgUp to Home or PgDown to End.
Does a built-in command or a tool exist reassign keys in Ubuntu/GNOME?
xorg keyboard shortcut-keys
checkout my answer here. It doesn't worth copy and paste same answer. Perhaps it would help you.
– Rahul Virpara
Jun 2 '12 at 9:40
1
Any Emacs-like bindings here for CTRL-P/N for unit steps?
– Léo Léopold Hertz 준영
Jul 7 '15 at 13:12
Since some timexmodmap
is depricated! to get a system wide setting you have to usexkb
. So edit the language file in/usr/share/X11/xkb/symbols/
to add your changes there. See askubuntu.com/a/898462/34298
– rubo77
Mar 30 '17 at 21:48
add a comment |
I'm searching for a way to remap certain keys in ubuntu.
i.e.
I'd like to change PgUp to Home or PgDown to End.
Does a built-in command or a tool exist reassign keys in Ubuntu/GNOME?
xorg keyboard shortcut-keys
I'm searching for a way to remap certain keys in ubuntu.
i.e.
I'd like to change PgUp to Home or PgDown to End.
Does a built-in command or a tool exist reassign keys in Ubuntu/GNOME?
xorg keyboard shortcut-keys
xorg keyboard shortcut-keys
edited Aug 14 '14 at 8:53
Tim
19.6k1484139
19.6k1484139
asked Feb 5 '11 at 13:20
NESNES
13.9k3489113
13.9k3489113
checkout my answer here. It doesn't worth copy and paste same answer. Perhaps it would help you.
– Rahul Virpara
Jun 2 '12 at 9:40
1
Any Emacs-like bindings here for CTRL-P/N for unit steps?
– Léo Léopold Hertz 준영
Jul 7 '15 at 13:12
Since some timexmodmap
is depricated! to get a system wide setting you have to usexkb
. So edit the language file in/usr/share/X11/xkb/symbols/
to add your changes there. See askubuntu.com/a/898462/34298
– rubo77
Mar 30 '17 at 21:48
add a comment |
checkout my answer here. It doesn't worth copy and paste same answer. Perhaps it would help you.
– Rahul Virpara
Jun 2 '12 at 9:40
1
Any Emacs-like bindings here for CTRL-P/N for unit steps?
– Léo Léopold Hertz 준영
Jul 7 '15 at 13:12
Since some timexmodmap
is depricated! to get a system wide setting you have to usexkb
. So edit the language file in/usr/share/X11/xkb/symbols/
to add your changes there. See askubuntu.com/a/898462/34298
– rubo77
Mar 30 '17 at 21:48
checkout my answer here. It doesn't worth copy and paste same answer. Perhaps it would help you.
– Rahul Virpara
Jun 2 '12 at 9:40
checkout my answer here. It doesn't worth copy and paste same answer. Perhaps it would help you.
– Rahul Virpara
Jun 2 '12 at 9:40
1
1
Any Emacs-like bindings here for CTRL-P/N for unit steps?
– Léo Léopold Hertz 준영
Jul 7 '15 at 13:12
Any Emacs-like bindings here for CTRL-P/N for unit steps?
– Léo Léopold Hertz 준영
Jul 7 '15 at 13:12
Since some time
xmodmap
is depricated! to get a system wide setting you have to use xkb
. So edit the language file in /usr/share/X11/xkb/symbols/
to add your changes there. See askubuntu.com/a/898462/34298– rubo77
Mar 30 '17 at 21:48
Since some time
xmodmap
is depricated! to get a system wide setting you have to use xkb
. So edit the language file in /usr/share/X11/xkb/symbols/
to add your changes there. See askubuntu.com/a/898462/34298– rubo77
Mar 30 '17 at 21:48
add a comment |
7 Answers
7
active
oldest
votes
Notice: As of 2013, Ubuntu and derivatives no longer use xmodmap
, but instead use xkb
. For more information see this answer. The answer below is no longer relevant for current releases.
For remapping certain keys you need two tools. First xev (command-line tool) and second xmodmap (also command-line tool). Both should be available in Ubuntu without extra installing them.
Start terminal window and run
xev
. Now it's active and waits for you to press a key. Then press the key whose behaviour you want to change. i.e. PgUp.
xev
will output some information about the pressed key. The third line is important. It should look similar to:
state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
in this example
Prior
is the name of the behaviour the key is assigned to at the moment, the number keycode is the internal id to recognize the key.
Now do this with another key i.e. PgDown give this output
state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
Here again the interesting part for us is
keycode 115
andNext
- the name of the behaviour.
now when you want to swap the two keys use
xmodmap
.
xmodmap -e "keycode 110 = Next"
This changes the key with keycode 110 on your keyboard to the action
Next
. It's pretty simple.
Note that if the key you are mapping should have a different meaning when used with the Shift key (for example for British keyboard layouts, Shift+2 gives quotation marks) then you can simply list the secondary command after the first. For example if you want the key with code 53 to map to backslash normally, but to the bar symbol when used with shift, you might do:
xmodmap -e "keycode 53 = backslash bar"
Additional information: The sequence of these mappings is Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. To skip a column use NoSymbol
. Moreover, here is a comprehensive list of all keysyms.
Note: These change are for the active X session only and will be lost after reboot.
When you want to save the changes permanently you have to run the following commands after the ones above:
xmodmap -pke >~/.Xmodmap
(it creates a file named .Xmodmap
in your home directory (~
))
Then you have to create a file named .xinitrc
in your home directory where you put command xmodmap .Xmodmap
in.
You can now modify .Xmodmap
and run xmodmap .Xmodmap
from console to see the changes immediately. The changes in .Xmodmap
will persist.
source: Ubuntu Foruns
Bonus stuff:
If the key you are remapping has different behavior depending on a state (
like how the keys in the numeric keyboard depend on NumLock) you simply have to do xmodmap -pm
to get a list of modifiers and then do:
xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"
Suppose, for example, that you want to get a period instead of a comma on the numeric keyboard (useful for most programmers), but you want to keep the "delete" behavior when NumLock is off.
xmodmap -e "keycode 91 mod2 = KP_Delete period"
mod2
, because xmodmap -pm
tells us that mod2
is Num_Lock
, the other names are obtained by pressing the keys in xev
.
3
xev
is not able to catchFn
key pressings
– om-nom-nom
Feb 15 '12 at 15:08
3
The selected answer didn't work for remapping the Caps-lock key for me on Ubuntu 12.10. I was able to to do this by going to System Settings -> Keyboard -> Layout Settings -> Options, which has a list of keys and alternative behaviors. Worked flawlessly in Unity and terminal.
– Allyl Isocyanate
Oct 10 '12 at 19:17
If you have multiple keyboards connected, will these tools see a difference between the same key on another keyboard?
– Jop V.
Jun 27 '13 at 17:10
1
Strange, I did everything, but my keymappings still reset after restarting.
– Costa
Dec 27 '13 at 3:39
1
I don't think I have an-event
flag in Ubuntu 12.04. It throws an error and doesn't mention "event" inman xev
.
– isomorphismes
Feb 17 '14 at 14:47
|
show 5 more comments
If you're trying to move a Shift key, there are a few extra steps:
xmodmap -e "keycode 62 = Up" # Shift => Up
xmodmap -e "keycode 111 = Shift_R" # Up => Shift
xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
xset r 62 # Make the new Up key autorepeat
xset -r 111 # Prevent the new Shift key from autorepeating
+1 The most unix-y answer of all of those for a modifier (I had already done so way, way back with my iBook 2, when I wanted the enter key to have the function of Control_R, but had forgotten the details).
– rbrito
Jan 6 '13 at 8:47
2
An important answer for users using keyboards on Lenovo Laptops
– Einar Ólafsson
May 1 '17 at 15:38
add a comment |
I've just had an afterthought.. I think you may mean something entirely different by "remap".. but I'll leave my answer as it is... (I don't know how to re-assign one key to behave as another)
UPDATE: my 'afterthought' has been confirmed; ( I've answered the wrong question :)... please see NES's Community Wiki answer (accepted above).
There are two general ways to remap rebind a key.
- locally to a particular program
(a key can be used for different things in different apps/windows) - globally for a specific user
(a key has the same function in all windows)
For 'local to a program' methods, there is sometimes a way to change keybindings offered by the app itself... eg.
Firefox
has an addon called keyconfig ... for some info see this MozillZine post
Most Ubuntu programs are Gnome based and there is a specific utility to modify the keybinding for any menu item of these Gnome apps... It is called Editable Menu Accelerator
... It is a very 'touchy' tool, but quite powerful.. You can enable it by running gconf-editor
(via Terminal or Alt+F2)... navigate to desktop
--gnome
--interface
and select can_change_accels
.... You can then change menu items to virtual anything you like (per program/window)... I suggest you disable it as soon as you've done what you need..
Otherwise you can set up Global hotkeys. I use a program called xbindkeys , and there is also an option available via the Main Menu -- Preferences, called Keyboard Shortcuts
If you use xbindkeys, you will need to add it to your "Startup Applications" (Main Menu -- Preferences) ... Also (as suggested by Stefano Palazzo) I have previously written a more detailed description of xbindkeys in an answer on this askubuntu page
+1, very nice! A suggestion: You should integrate your great answer from another question into this one, maybe also explain the configuration format of xbindkeys a little bit.
– Stefano Palazzo♦
Feb 5 '11 at 14:17
1
The bit about assigning other keys could be handled byxdotool
, check out the man page, I've used it to solve this problem.
– Stefano Palazzo♦
Feb 5 '11 at 14:24
i recently found another approach with a tool called xmodmap in combination with a tool called xev. i don't know what the differences between xmodmap and xbindkeys are, but this works pretty well for me. some advice with tool to prefer of the named two? Here is a very helpful step by step guide which describes xmodmap and xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
– NES
Feb 5 '11 at 14:28
@NES.. It appears I've addressed the wrong point.. You seem to want to actually remap the way a particular key is interpreted by the OS, ie, a non-standard keyboard interpretation, whereas I've been refering to a standard keyboard-interpretation, and simply overloading the default key-assignments. (I think what you are after is similar to swapping the left and right mouse buttons) .. Well it seems my answer was good for the wrong thing :)
– Peter.O
Feb 5 '11 at 14:52
yes, but no problem. the answer is also interesting. the step by step guide i posted the link above was the right way. so i'll post a short answer with the solution that other users have a good guide. thanks fred
– NES
Feb 5 '11 at 15:42
|
show 1 more comment
Here is how I tried to switch the mapping of the ENTER key to the SHIFT key
(and vice versa):
$ uname -a
REPORTS:
Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux
$ which xmodmap
REPORTS:
/usr/bin/xmodmap
$ which xev
REPORTS:
/usr/bin/xev
$ xev
(ignore the next fifty lines or so)
PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XmbLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
What's important is the third line of each keypress:
FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".
REVERSE THE MAPPING:
$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"
SAVE THE RESULTS:
$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc
ADD
xmodmap ~/.Xmodmap
$ sudo reboot
The main problem was that the reversal did NOT work.
The ENTER key was mapped to the SHIFT_R key; but the SHIFT_R key was not mapped to the ENTER key. Go figure.
add a comment |
In order to do global remaps independently of X, you can make use of console-setup(5) instead.
In my case I wanted to remap Caps Lock key to D, since my D-key is broken :)
First I used dumpkeys(1) to get a template for a mapping, in the case of the D-key, the interesting bit is the mapping for keycode 32 (on my keyboard); Note that there are two spaces in the grep pattern!
$ sudo dumpkeys | grep "keycode 32" > tempfile
$ cat tempfile
keycode 32 = +d
shift keycode 32 = +D
altgr keycode 32 = +eth
shift altgr keycode 32 = +ETH
control keycode 32 = Control_d
shift control keycode 32 = Control_d
altgr control keycode 32 = Control_d
shift altgr control keycode 32 = Control_d
(121 lines total...)
In order to change the map to apply to Caps Lock (keycode 58 on my keyboard) instead
sed 's/32/58/' -i tempfile
Now it reads
keycode 58 = +d
shift keycode 58 = +D
altgr keycode 58 = +eth
(etc...)
To add this remap to the default map, it simply needs to be appended to the remap include file for console-setup
sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'
and console-setup needs to be reconfigured (skipping low priority questions with -phigh
)
sudo dpkg-reconfigure console-setup -phigh
Now the remap should be completed, and be loaded automatically on boot.
add a comment |
I spent one whole day in trying to create a shortcut for Ctrl+Pageup
.
I first tried xmodmap
but that can't generate modifier events. So it is impossible to create a shortcut that generates for example the Control
event.
I then tried xbindkeys
with xmacro
. That sort of works, but xbindkeys
is not able to capture some key combinations on my system, such as Alt + ___
.
So I finally used Unity's own Keyboard Shortcuts -> Custom Shortcuts to setup my shortcut.
And instead of xmacro
, I have now used xvkbd
program to generate the keyboard events, but that is just a personal preference. Both xmacro
and xvkbd
work almost the same. One additional tip is to add a delay parameter in xmacro
or xvkbd
to ensure that the events don't get lost.
add a comment |
For me AutoKey from Software Center worked the best. It has intuitive GUI, to add new binding click New -> Phrase and
- Add name, click OK
- At "Phrase Settings" section make sure the paste using is set to keyboard
- Add hotkey that you want to use
- Add command into text field, eg to emulate left arrow key - it'd be
<left>
(list of special keys is here).
add a comment |
protected by Seth♦ Mar 10 '14 at 21:07
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
7 Answers
7
active
oldest
votes
7 Answers
7
active
oldest
votes
active
oldest
votes
active
oldest
votes
Notice: As of 2013, Ubuntu and derivatives no longer use xmodmap
, but instead use xkb
. For more information see this answer. The answer below is no longer relevant for current releases.
For remapping certain keys you need two tools. First xev (command-line tool) and second xmodmap (also command-line tool). Both should be available in Ubuntu without extra installing them.
Start terminal window and run
xev
. Now it's active and waits for you to press a key. Then press the key whose behaviour you want to change. i.e. PgUp.
xev
will output some information about the pressed key. The third line is important. It should look similar to:
state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
in this example
Prior
is the name of the behaviour the key is assigned to at the moment, the number keycode is the internal id to recognize the key.
Now do this with another key i.e. PgDown give this output
state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
Here again the interesting part for us is
keycode 115
andNext
- the name of the behaviour.
now when you want to swap the two keys use
xmodmap
.
xmodmap -e "keycode 110 = Next"
This changes the key with keycode 110 on your keyboard to the action
Next
. It's pretty simple.
Note that if the key you are mapping should have a different meaning when used with the Shift key (for example for British keyboard layouts, Shift+2 gives quotation marks) then you can simply list the secondary command after the first. For example if you want the key with code 53 to map to backslash normally, but to the bar symbol when used with shift, you might do:
xmodmap -e "keycode 53 = backslash bar"
Additional information: The sequence of these mappings is Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. To skip a column use NoSymbol
. Moreover, here is a comprehensive list of all keysyms.
Note: These change are for the active X session only and will be lost after reboot.
When you want to save the changes permanently you have to run the following commands after the ones above:
xmodmap -pke >~/.Xmodmap
(it creates a file named .Xmodmap
in your home directory (~
))
Then you have to create a file named .xinitrc
in your home directory where you put command xmodmap .Xmodmap
in.
You can now modify .Xmodmap
and run xmodmap .Xmodmap
from console to see the changes immediately. The changes in .Xmodmap
will persist.
source: Ubuntu Foruns
Bonus stuff:
If the key you are remapping has different behavior depending on a state (
like how the keys in the numeric keyboard depend on NumLock) you simply have to do xmodmap -pm
to get a list of modifiers and then do:
xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"
Suppose, for example, that you want to get a period instead of a comma on the numeric keyboard (useful for most programmers), but you want to keep the "delete" behavior when NumLock is off.
xmodmap -e "keycode 91 mod2 = KP_Delete period"
mod2
, because xmodmap -pm
tells us that mod2
is Num_Lock
, the other names are obtained by pressing the keys in xev
.
3
xev
is not able to catchFn
key pressings
– om-nom-nom
Feb 15 '12 at 15:08
3
The selected answer didn't work for remapping the Caps-lock key for me on Ubuntu 12.10. I was able to to do this by going to System Settings -> Keyboard -> Layout Settings -> Options, which has a list of keys and alternative behaviors. Worked flawlessly in Unity and terminal.
– Allyl Isocyanate
Oct 10 '12 at 19:17
If you have multiple keyboards connected, will these tools see a difference between the same key on another keyboard?
– Jop V.
Jun 27 '13 at 17:10
1
Strange, I did everything, but my keymappings still reset after restarting.
– Costa
Dec 27 '13 at 3:39
1
I don't think I have an-event
flag in Ubuntu 12.04. It throws an error and doesn't mention "event" inman xev
.
– isomorphismes
Feb 17 '14 at 14:47
|
show 5 more comments
Notice: As of 2013, Ubuntu and derivatives no longer use xmodmap
, but instead use xkb
. For more information see this answer. The answer below is no longer relevant for current releases.
For remapping certain keys you need two tools. First xev (command-line tool) and second xmodmap (also command-line tool). Both should be available in Ubuntu without extra installing them.
Start terminal window and run
xev
. Now it's active and waits for you to press a key. Then press the key whose behaviour you want to change. i.e. PgUp.
xev
will output some information about the pressed key. The third line is important. It should look similar to:
state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
in this example
Prior
is the name of the behaviour the key is assigned to at the moment, the number keycode is the internal id to recognize the key.
Now do this with another key i.e. PgDown give this output
state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
Here again the interesting part for us is
keycode 115
andNext
- the name of the behaviour.
now when you want to swap the two keys use
xmodmap
.
xmodmap -e "keycode 110 = Next"
This changes the key with keycode 110 on your keyboard to the action
Next
. It's pretty simple.
Note that if the key you are mapping should have a different meaning when used with the Shift key (for example for British keyboard layouts, Shift+2 gives quotation marks) then you can simply list the secondary command after the first. For example if you want the key with code 53 to map to backslash normally, but to the bar symbol when used with shift, you might do:
xmodmap -e "keycode 53 = backslash bar"
Additional information: The sequence of these mappings is Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. To skip a column use NoSymbol
. Moreover, here is a comprehensive list of all keysyms.
Note: These change are for the active X session only and will be lost after reboot.
When you want to save the changes permanently you have to run the following commands after the ones above:
xmodmap -pke >~/.Xmodmap
(it creates a file named .Xmodmap
in your home directory (~
))
Then you have to create a file named .xinitrc
in your home directory where you put command xmodmap .Xmodmap
in.
You can now modify .Xmodmap
and run xmodmap .Xmodmap
from console to see the changes immediately. The changes in .Xmodmap
will persist.
source: Ubuntu Foruns
Bonus stuff:
If the key you are remapping has different behavior depending on a state (
like how the keys in the numeric keyboard depend on NumLock) you simply have to do xmodmap -pm
to get a list of modifiers and then do:
xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"
Suppose, for example, that you want to get a period instead of a comma on the numeric keyboard (useful for most programmers), but you want to keep the "delete" behavior when NumLock is off.
xmodmap -e "keycode 91 mod2 = KP_Delete period"
mod2
, because xmodmap -pm
tells us that mod2
is Num_Lock
, the other names are obtained by pressing the keys in xev
.
3
xev
is not able to catchFn
key pressings
– om-nom-nom
Feb 15 '12 at 15:08
3
The selected answer didn't work for remapping the Caps-lock key for me on Ubuntu 12.10. I was able to to do this by going to System Settings -> Keyboard -> Layout Settings -> Options, which has a list of keys and alternative behaviors. Worked flawlessly in Unity and terminal.
– Allyl Isocyanate
Oct 10 '12 at 19:17
If you have multiple keyboards connected, will these tools see a difference between the same key on another keyboard?
– Jop V.
Jun 27 '13 at 17:10
1
Strange, I did everything, but my keymappings still reset after restarting.
– Costa
Dec 27 '13 at 3:39
1
I don't think I have an-event
flag in Ubuntu 12.04. It throws an error and doesn't mention "event" inman xev
.
– isomorphismes
Feb 17 '14 at 14:47
|
show 5 more comments
Notice: As of 2013, Ubuntu and derivatives no longer use xmodmap
, but instead use xkb
. For more information see this answer. The answer below is no longer relevant for current releases.
For remapping certain keys you need two tools. First xev (command-line tool) and second xmodmap (also command-line tool). Both should be available in Ubuntu without extra installing them.
Start terminal window and run
xev
. Now it's active and waits for you to press a key. Then press the key whose behaviour you want to change. i.e. PgUp.
xev
will output some information about the pressed key. The third line is important. It should look similar to:
state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
in this example
Prior
is the name of the behaviour the key is assigned to at the moment, the number keycode is the internal id to recognize the key.
Now do this with another key i.e. PgDown give this output
state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
Here again the interesting part for us is
keycode 115
andNext
- the name of the behaviour.
now when you want to swap the two keys use
xmodmap
.
xmodmap -e "keycode 110 = Next"
This changes the key with keycode 110 on your keyboard to the action
Next
. It's pretty simple.
Note that if the key you are mapping should have a different meaning when used with the Shift key (for example for British keyboard layouts, Shift+2 gives quotation marks) then you can simply list the secondary command after the first. For example if you want the key with code 53 to map to backslash normally, but to the bar symbol when used with shift, you might do:
xmodmap -e "keycode 53 = backslash bar"
Additional information: The sequence of these mappings is Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. To skip a column use NoSymbol
. Moreover, here is a comprehensive list of all keysyms.
Note: These change are for the active X session only and will be lost after reboot.
When you want to save the changes permanently you have to run the following commands after the ones above:
xmodmap -pke >~/.Xmodmap
(it creates a file named .Xmodmap
in your home directory (~
))
Then you have to create a file named .xinitrc
in your home directory where you put command xmodmap .Xmodmap
in.
You can now modify .Xmodmap
and run xmodmap .Xmodmap
from console to see the changes immediately. The changes in .Xmodmap
will persist.
source: Ubuntu Foruns
Bonus stuff:
If the key you are remapping has different behavior depending on a state (
like how the keys in the numeric keyboard depend on NumLock) you simply have to do xmodmap -pm
to get a list of modifiers and then do:
xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"
Suppose, for example, that you want to get a period instead of a comma on the numeric keyboard (useful for most programmers), but you want to keep the "delete" behavior when NumLock is off.
xmodmap -e "keycode 91 mod2 = KP_Delete period"
mod2
, because xmodmap -pm
tells us that mod2
is Num_Lock
, the other names are obtained by pressing the keys in xev
.
Notice: As of 2013, Ubuntu and derivatives no longer use xmodmap
, but instead use xkb
. For more information see this answer. The answer below is no longer relevant for current releases.
For remapping certain keys you need two tools. First xev (command-line tool) and second xmodmap (also command-line tool). Both should be available in Ubuntu without extra installing them.
Start terminal window and run
xev
. Now it's active and waits for you to press a key. Then press the key whose behaviour you want to change. i.e. PgUp.
xev
will output some information about the pressed key. The third line is important. It should look similar to:
state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
in this example
Prior
is the name of the behaviour the key is assigned to at the moment, the number keycode is the internal id to recognize the key.
Now do this with another key i.e. PgDown give this output
state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
Here again the interesting part for us is
keycode 115
andNext
- the name of the behaviour.
now when you want to swap the two keys use
xmodmap
.
xmodmap -e "keycode 110 = Next"
This changes the key with keycode 110 on your keyboard to the action
Next
. It's pretty simple.
Note that if the key you are mapping should have a different meaning when used with the Shift key (for example for British keyboard layouts, Shift+2 gives quotation marks) then you can simply list the secondary command after the first. For example if you want the key with code 53 to map to backslash normally, but to the bar symbol when used with shift, you might do:
xmodmap -e "keycode 53 = backslash bar"
Additional information: The sequence of these mappings is Key, Shift+Key, mode_switch+Key, mode_switch+Shift+Key, AltGr+Key, AltGr+Shift+Key. To skip a column use NoSymbol
. Moreover, here is a comprehensive list of all keysyms.
Note: These change are for the active X session only and will be lost after reboot.
When you want to save the changes permanently you have to run the following commands after the ones above:
xmodmap -pke >~/.Xmodmap
(it creates a file named .Xmodmap
in your home directory (~
))
Then you have to create a file named .xinitrc
in your home directory where you put command xmodmap .Xmodmap
in.
You can now modify .Xmodmap
and run xmodmap .Xmodmap
from console to see the changes immediately. The changes in .Xmodmap
will persist.
source: Ubuntu Foruns
Bonus stuff:
If the key you are remapping has different behavior depending on a state (
like how the keys in the numeric keyboard depend on NumLock) you simply have to do xmodmap -pm
to get a list of modifiers and then do:
xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"
Suppose, for example, that you want to get a period instead of a comma on the numeric keyboard (useful for most programmers), but you want to keep the "delete" behavior when NumLock is off.
xmodmap -e "keycode 91 mod2 = KP_Delete period"
mod2
, because xmodmap -pm
tells us that mod2
is Num_Lock
, the other names are obtained by pressing the keys in xev
.
edited Feb 8 '15 at 10:17
community wiki
13 revs, 10 users 53%
NES
3
xev
is not able to catchFn
key pressings
– om-nom-nom
Feb 15 '12 at 15:08
3
The selected answer didn't work for remapping the Caps-lock key for me on Ubuntu 12.10. I was able to to do this by going to System Settings -> Keyboard -> Layout Settings -> Options, which has a list of keys and alternative behaviors. Worked flawlessly in Unity and terminal.
– Allyl Isocyanate
Oct 10 '12 at 19:17
If you have multiple keyboards connected, will these tools see a difference between the same key on another keyboard?
– Jop V.
Jun 27 '13 at 17:10
1
Strange, I did everything, but my keymappings still reset after restarting.
– Costa
Dec 27 '13 at 3:39
1
I don't think I have an-event
flag in Ubuntu 12.04. It throws an error and doesn't mention "event" inman xev
.
– isomorphismes
Feb 17 '14 at 14:47
|
show 5 more comments
3
xev
is not able to catchFn
key pressings
– om-nom-nom
Feb 15 '12 at 15:08
3
The selected answer didn't work for remapping the Caps-lock key for me on Ubuntu 12.10. I was able to to do this by going to System Settings -> Keyboard -> Layout Settings -> Options, which has a list of keys and alternative behaviors. Worked flawlessly in Unity and terminal.
– Allyl Isocyanate
Oct 10 '12 at 19:17
If you have multiple keyboards connected, will these tools see a difference between the same key on another keyboard?
– Jop V.
Jun 27 '13 at 17:10
1
Strange, I did everything, but my keymappings still reset after restarting.
– Costa
Dec 27 '13 at 3:39
1
I don't think I have an-event
flag in Ubuntu 12.04. It throws an error and doesn't mention "event" inman xev
.
– isomorphismes
Feb 17 '14 at 14:47
3
3
xev
is not able to catch Fn
key pressings– om-nom-nom
Feb 15 '12 at 15:08
xev
is not able to catch Fn
key pressings– om-nom-nom
Feb 15 '12 at 15:08
3
3
The selected answer didn't work for remapping the Caps-lock key for me on Ubuntu 12.10. I was able to to do this by going to System Settings -> Keyboard -> Layout Settings -> Options, which has a list of keys and alternative behaviors. Worked flawlessly in Unity and terminal.
– Allyl Isocyanate
Oct 10 '12 at 19:17
The selected answer didn't work for remapping the Caps-lock key for me on Ubuntu 12.10. I was able to to do this by going to System Settings -> Keyboard -> Layout Settings -> Options, which has a list of keys and alternative behaviors. Worked flawlessly in Unity and terminal.
– Allyl Isocyanate
Oct 10 '12 at 19:17
If you have multiple keyboards connected, will these tools see a difference between the same key on another keyboard?
– Jop V.
Jun 27 '13 at 17:10
If you have multiple keyboards connected, will these tools see a difference between the same key on another keyboard?
– Jop V.
Jun 27 '13 at 17:10
1
1
Strange, I did everything, but my keymappings still reset after restarting.
– Costa
Dec 27 '13 at 3:39
Strange, I did everything, but my keymappings still reset after restarting.
– Costa
Dec 27 '13 at 3:39
1
1
I don't think I have an
-event
flag in Ubuntu 12.04. It throws an error and doesn't mention "event" in man xev
.– isomorphismes
Feb 17 '14 at 14:47
I don't think I have an
-event
flag in Ubuntu 12.04. It throws an error and doesn't mention "event" in man xev
.– isomorphismes
Feb 17 '14 at 14:47
|
show 5 more comments
If you're trying to move a Shift key, there are a few extra steps:
xmodmap -e "keycode 62 = Up" # Shift => Up
xmodmap -e "keycode 111 = Shift_R" # Up => Shift
xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
xset r 62 # Make the new Up key autorepeat
xset -r 111 # Prevent the new Shift key from autorepeating
+1 The most unix-y answer of all of those for a modifier (I had already done so way, way back with my iBook 2, when I wanted the enter key to have the function of Control_R, but had forgotten the details).
– rbrito
Jan 6 '13 at 8:47
2
An important answer for users using keyboards on Lenovo Laptops
– Einar Ólafsson
May 1 '17 at 15:38
add a comment |
If you're trying to move a Shift key, there are a few extra steps:
xmodmap -e "keycode 62 = Up" # Shift => Up
xmodmap -e "keycode 111 = Shift_R" # Up => Shift
xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
xset r 62 # Make the new Up key autorepeat
xset -r 111 # Prevent the new Shift key from autorepeating
+1 The most unix-y answer of all of those for a modifier (I had already done so way, way back with my iBook 2, when I wanted the enter key to have the function of Control_R, but had forgotten the details).
– rbrito
Jan 6 '13 at 8:47
2
An important answer for users using keyboards on Lenovo Laptops
– Einar Ólafsson
May 1 '17 at 15:38
add a comment |
If you're trying to move a Shift key, there are a few extra steps:
xmodmap -e "keycode 62 = Up" # Shift => Up
xmodmap -e "keycode 111 = Shift_R" # Up => Shift
xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
xset r 62 # Make the new Up key autorepeat
xset -r 111 # Prevent the new Shift key from autorepeating
If you're trying to move a Shift key, there are a few extra steps:
xmodmap -e "keycode 62 = Up" # Shift => Up
xmodmap -e "keycode 111 = Shift_R" # Up => Shift
xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
xset r 62 # Make the new Up key autorepeat
xset -r 111 # Prevent the new Shift key from autorepeating
answered Dec 17 '12 at 18:46
cmcgintycmcginty
2,71152431
2,71152431
+1 The most unix-y answer of all of those for a modifier (I had already done so way, way back with my iBook 2, when I wanted the enter key to have the function of Control_R, but had forgotten the details).
– rbrito
Jan 6 '13 at 8:47
2
An important answer for users using keyboards on Lenovo Laptops
– Einar Ólafsson
May 1 '17 at 15:38
add a comment |
+1 The most unix-y answer of all of those for a modifier (I had already done so way, way back with my iBook 2, when I wanted the enter key to have the function of Control_R, but had forgotten the details).
– rbrito
Jan 6 '13 at 8:47
2
An important answer for users using keyboards on Lenovo Laptops
– Einar Ólafsson
May 1 '17 at 15:38
+1 The most unix-y answer of all of those for a modifier (I had already done so way, way back with my iBook 2, when I wanted the enter key to have the function of Control_R, but had forgotten the details).
– rbrito
Jan 6 '13 at 8:47
+1 The most unix-y answer of all of those for a modifier (I had already done so way, way back with my iBook 2, when I wanted the enter key to have the function of Control_R, but had forgotten the details).
– rbrito
Jan 6 '13 at 8:47
2
2
An important answer for users using keyboards on Lenovo Laptops
– Einar Ólafsson
May 1 '17 at 15:38
An important answer for users using keyboards on Lenovo Laptops
– Einar Ólafsson
May 1 '17 at 15:38
add a comment |
I've just had an afterthought.. I think you may mean something entirely different by "remap".. but I'll leave my answer as it is... (I don't know how to re-assign one key to behave as another)
UPDATE: my 'afterthought' has been confirmed; ( I've answered the wrong question :)... please see NES's Community Wiki answer (accepted above).
There are two general ways to remap rebind a key.
- locally to a particular program
(a key can be used for different things in different apps/windows) - globally for a specific user
(a key has the same function in all windows)
For 'local to a program' methods, there is sometimes a way to change keybindings offered by the app itself... eg.
Firefox
has an addon called keyconfig ... for some info see this MozillZine post
Most Ubuntu programs are Gnome based and there is a specific utility to modify the keybinding for any menu item of these Gnome apps... It is called Editable Menu Accelerator
... It is a very 'touchy' tool, but quite powerful.. You can enable it by running gconf-editor
(via Terminal or Alt+F2)... navigate to desktop
--gnome
--interface
and select can_change_accels
.... You can then change menu items to virtual anything you like (per program/window)... I suggest you disable it as soon as you've done what you need..
Otherwise you can set up Global hotkeys. I use a program called xbindkeys , and there is also an option available via the Main Menu -- Preferences, called Keyboard Shortcuts
If you use xbindkeys, you will need to add it to your "Startup Applications" (Main Menu -- Preferences) ... Also (as suggested by Stefano Palazzo) I have previously written a more detailed description of xbindkeys in an answer on this askubuntu page
+1, very nice! A suggestion: You should integrate your great answer from another question into this one, maybe also explain the configuration format of xbindkeys a little bit.
– Stefano Palazzo♦
Feb 5 '11 at 14:17
1
The bit about assigning other keys could be handled byxdotool
, check out the man page, I've used it to solve this problem.
– Stefano Palazzo♦
Feb 5 '11 at 14:24
i recently found another approach with a tool called xmodmap in combination with a tool called xev. i don't know what the differences between xmodmap and xbindkeys are, but this works pretty well for me. some advice with tool to prefer of the named two? Here is a very helpful step by step guide which describes xmodmap and xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
– NES
Feb 5 '11 at 14:28
@NES.. It appears I've addressed the wrong point.. You seem to want to actually remap the way a particular key is interpreted by the OS, ie, a non-standard keyboard interpretation, whereas I've been refering to a standard keyboard-interpretation, and simply overloading the default key-assignments. (I think what you are after is similar to swapping the left and right mouse buttons) .. Well it seems my answer was good for the wrong thing :)
– Peter.O
Feb 5 '11 at 14:52
yes, but no problem. the answer is also interesting. the step by step guide i posted the link above was the right way. so i'll post a short answer with the solution that other users have a good guide. thanks fred
– NES
Feb 5 '11 at 15:42
|
show 1 more comment
I've just had an afterthought.. I think you may mean something entirely different by "remap".. but I'll leave my answer as it is... (I don't know how to re-assign one key to behave as another)
UPDATE: my 'afterthought' has been confirmed; ( I've answered the wrong question :)... please see NES's Community Wiki answer (accepted above).
There are two general ways to remap rebind a key.
- locally to a particular program
(a key can be used for different things in different apps/windows) - globally for a specific user
(a key has the same function in all windows)
For 'local to a program' methods, there is sometimes a way to change keybindings offered by the app itself... eg.
Firefox
has an addon called keyconfig ... for some info see this MozillZine post
Most Ubuntu programs are Gnome based and there is a specific utility to modify the keybinding for any menu item of these Gnome apps... It is called Editable Menu Accelerator
... It is a very 'touchy' tool, but quite powerful.. You can enable it by running gconf-editor
(via Terminal or Alt+F2)... navigate to desktop
--gnome
--interface
and select can_change_accels
.... You can then change menu items to virtual anything you like (per program/window)... I suggest you disable it as soon as you've done what you need..
Otherwise you can set up Global hotkeys. I use a program called xbindkeys , and there is also an option available via the Main Menu -- Preferences, called Keyboard Shortcuts
If you use xbindkeys, you will need to add it to your "Startup Applications" (Main Menu -- Preferences) ... Also (as suggested by Stefano Palazzo) I have previously written a more detailed description of xbindkeys in an answer on this askubuntu page
+1, very nice! A suggestion: You should integrate your great answer from another question into this one, maybe also explain the configuration format of xbindkeys a little bit.
– Stefano Palazzo♦
Feb 5 '11 at 14:17
1
The bit about assigning other keys could be handled byxdotool
, check out the man page, I've used it to solve this problem.
– Stefano Palazzo♦
Feb 5 '11 at 14:24
i recently found another approach with a tool called xmodmap in combination with a tool called xev. i don't know what the differences between xmodmap and xbindkeys are, but this works pretty well for me. some advice with tool to prefer of the named two? Here is a very helpful step by step guide which describes xmodmap and xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
– NES
Feb 5 '11 at 14:28
@NES.. It appears I've addressed the wrong point.. You seem to want to actually remap the way a particular key is interpreted by the OS, ie, a non-standard keyboard interpretation, whereas I've been refering to a standard keyboard-interpretation, and simply overloading the default key-assignments. (I think what you are after is similar to swapping the left and right mouse buttons) .. Well it seems my answer was good for the wrong thing :)
– Peter.O
Feb 5 '11 at 14:52
yes, but no problem. the answer is also interesting. the step by step guide i posted the link above was the right way. so i'll post a short answer with the solution that other users have a good guide. thanks fred
– NES
Feb 5 '11 at 15:42
|
show 1 more comment
I've just had an afterthought.. I think you may mean something entirely different by "remap".. but I'll leave my answer as it is... (I don't know how to re-assign one key to behave as another)
UPDATE: my 'afterthought' has been confirmed; ( I've answered the wrong question :)... please see NES's Community Wiki answer (accepted above).
There are two general ways to remap rebind a key.
- locally to a particular program
(a key can be used for different things in different apps/windows) - globally for a specific user
(a key has the same function in all windows)
For 'local to a program' methods, there is sometimes a way to change keybindings offered by the app itself... eg.
Firefox
has an addon called keyconfig ... for some info see this MozillZine post
Most Ubuntu programs are Gnome based and there is a specific utility to modify the keybinding for any menu item of these Gnome apps... It is called Editable Menu Accelerator
... It is a very 'touchy' tool, but quite powerful.. You can enable it by running gconf-editor
(via Terminal or Alt+F2)... navigate to desktop
--gnome
--interface
and select can_change_accels
.... You can then change menu items to virtual anything you like (per program/window)... I suggest you disable it as soon as you've done what you need..
Otherwise you can set up Global hotkeys. I use a program called xbindkeys , and there is also an option available via the Main Menu -- Preferences, called Keyboard Shortcuts
If you use xbindkeys, you will need to add it to your "Startup Applications" (Main Menu -- Preferences) ... Also (as suggested by Stefano Palazzo) I have previously written a more detailed description of xbindkeys in an answer on this askubuntu page
I've just had an afterthought.. I think you may mean something entirely different by "remap".. but I'll leave my answer as it is... (I don't know how to re-assign one key to behave as another)
UPDATE: my 'afterthought' has been confirmed; ( I've answered the wrong question :)... please see NES's Community Wiki answer (accepted above).
There are two general ways to remap rebind a key.
- locally to a particular program
(a key can be used for different things in different apps/windows) - globally for a specific user
(a key has the same function in all windows)
For 'local to a program' methods, there is sometimes a way to change keybindings offered by the app itself... eg.
Firefox
has an addon called keyconfig ... for some info see this MozillZine post
Most Ubuntu programs are Gnome based and there is a specific utility to modify the keybinding for any menu item of these Gnome apps... It is called Editable Menu Accelerator
... It is a very 'touchy' tool, but quite powerful.. You can enable it by running gconf-editor
(via Terminal or Alt+F2)... navigate to desktop
--gnome
--interface
and select can_change_accels
.... You can then change menu items to virtual anything you like (per program/window)... I suggest you disable it as soon as you've done what you need..
Otherwise you can set up Global hotkeys. I use a program called xbindkeys , and there is also an option available via the Main Menu -- Preferences, called Keyboard Shortcuts
If you use xbindkeys, you will need to add it to your "Startup Applications" (Main Menu -- Preferences) ... Also (as suggested by Stefano Palazzo) I have previously written a more detailed description of xbindkeys in an answer on this askubuntu page
edited Apr 13 '17 at 12:24
Community♦
1
1
answered Feb 5 '11 at 14:04
Peter.OPeter.O
11k2697151
11k2697151
+1, very nice! A suggestion: You should integrate your great answer from another question into this one, maybe also explain the configuration format of xbindkeys a little bit.
– Stefano Palazzo♦
Feb 5 '11 at 14:17
1
The bit about assigning other keys could be handled byxdotool
, check out the man page, I've used it to solve this problem.
– Stefano Palazzo♦
Feb 5 '11 at 14:24
i recently found another approach with a tool called xmodmap in combination with a tool called xev. i don't know what the differences between xmodmap and xbindkeys are, but this works pretty well for me. some advice with tool to prefer of the named two? Here is a very helpful step by step guide which describes xmodmap and xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
– NES
Feb 5 '11 at 14:28
@NES.. It appears I've addressed the wrong point.. You seem to want to actually remap the way a particular key is interpreted by the OS, ie, a non-standard keyboard interpretation, whereas I've been refering to a standard keyboard-interpretation, and simply overloading the default key-assignments. (I think what you are after is similar to swapping the left and right mouse buttons) .. Well it seems my answer was good for the wrong thing :)
– Peter.O
Feb 5 '11 at 14:52
yes, but no problem. the answer is also interesting. the step by step guide i posted the link above was the right way. so i'll post a short answer with the solution that other users have a good guide. thanks fred
– NES
Feb 5 '11 at 15:42
|
show 1 more comment
+1, very nice! A suggestion: You should integrate your great answer from another question into this one, maybe also explain the configuration format of xbindkeys a little bit.
– Stefano Palazzo♦
Feb 5 '11 at 14:17
1
The bit about assigning other keys could be handled byxdotool
, check out the man page, I've used it to solve this problem.
– Stefano Palazzo♦
Feb 5 '11 at 14:24
i recently found another approach with a tool called xmodmap in combination with a tool called xev. i don't know what the differences between xmodmap and xbindkeys are, but this works pretty well for me. some advice with tool to prefer of the named two? Here is a very helpful step by step guide which describes xmodmap and xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
– NES
Feb 5 '11 at 14:28
@NES.. It appears I've addressed the wrong point.. You seem to want to actually remap the way a particular key is interpreted by the OS, ie, a non-standard keyboard interpretation, whereas I've been refering to a standard keyboard-interpretation, and simply overloading the default key-assignments. (I think what you are after is similar to swapping the left and right mouse buttons) .. Well it seems my answer was good for the wrong thing :)
– Peter.O
Feb 5 '11 at 14:52
yes, but no problem. the answer is also interesting. the step by step guide i posted the link above was the right way. so i'll post a short answer with the solution that other users have a good guide. thanks fred
– NES
Feb 5 '11 at 15:42
+1, very nice! A suggestion: You should integrate your great answer from another question into this one, maybe also explain the configuration format of xbindkeys a little bit.
– Stefano Palazzo♦
Feb 5 '11 at 14:17
+1, very nice! A suggestion: You should integrate your great answer from another question into this one, maybe also explain the configuration format of xbindkeys a little bit.
– Stefano Palazzo♦
Feb 5 '11 at 14:17
1
1
The bit about assigning other keys could be handled by
xdotool
, check out the man page, I've used it to solve this problem.– Stefano Palazzo♦
Feb 5 '11 at 14:24
The bit about assigning other keys could be handled by
xdotool
, check out the man page, I've used it to solve this problem.– Stefano Palazzo♦
Feb 5 '11 at 14:24
i recently found another approach with a tool called xmodmap in combination with a tool called xev. i don't know what the differences between xmodmap and xbindkeys are, but this works pretty well for me. some advice with tool to prefer of the named two? Here is a very helpful step by step guide which describes xmodmap and xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
– NES
Feb 5 '11 at 14:28
i recently found another approach with a tool called xmodmap in combination with a tool called xev. i don't know what the differences between xmodmap and xbindkeys are, but this works pretty well for me. some advice with tool to prefer of the named two? Here is a very helpful step by step guide which describes xmodmap and xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
– NES
Feb 5 '11 at 14:28
@NES.. It appears I've addressed the wrong point.. You seem to want to actually remap the way a particular key is interpreted by the OS, ie, a non-standard keyboard interpretation, whereas I've been refering to a standard keyboard-interpretation, and simply overloading the default key-assignments. (I think what you are after is similar to swapping the left and right mouse buttons) .. Well it seems my answer was good for the wrong thing :)
– Peter.O
Feb 5 '11 at 14:52
@NES.. It appears I've addressed the wrong point.. You seem to want to actually remap the way a particular key is interpreted by the OS, ie, a non-standard keyboard interpretation, whereas I've been refering to a standard keyboard-interpretation, and simply overloading the default key-assignments. (I think what you are after is similar to swapping the left and right mouse buttons) .. Well it seems my answer was good for the wrong thing :)
– Peter.O
Feb 5 '11 at 14:52
yes, but no problem. the answer is also interesting. the step by step guide i posted the link above was the right way. so i'll post a short answer with the solution that other users have a good guide. thanks fred
– NES
Feb 5 '11 at 15:42
yes, but no problem. the answer is also interesting. the step by step guide i posted the link above was the right way. so i'll post a short answer with the solution that other users have a good guide. thanks fred
– NES
Feb 5 '11 at 15:42
|
show 1 more comment
Here is how I tried to switch the mapping of the ENTER key to the SHIFT key
(and vice versa):
$ uname -a
REPORTS:
Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux
$ which xmodmap
REPORTS:
/usr/bin/xmodmap
$ which xev
REPORTS:
/usr/bin/xev
$ xev
(ignore the next fifty lines or so)
PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XmbLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
What's important is the third line of each keypress:
FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".
REVERSE THE MAPPING:
$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"
SAVE THE RESULTS:
$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc
ADD
xmodmap ~/.Xmodmap
$ sudo reboot
The main problem was that the reversal did NOT work.
The ENTER key was mapped to the SHIFT_R key; but the SHIFT_R key was not mapped to the ENTER key. Go figure.
add a comment |
Here is how I tried to switch the mapping of the ENTER key to the SHIFT key
(and vice versa):
$ uname -a
REPORTS:
Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux
$ which xmodmap
REPORTS:
/usr/bin/xmodmap
$ which xev
REPORTS:
/usr/bin/xev
$ xev
(ignore the next fifty lines or so)
PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XmbLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
What's important is the third line of each keypress:
FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".
REVERSE THE MAPPING:
$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"
SAVE THE RESULTS:
$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc
ADD
xmodmap ~/.Xmodmap
$ sudo reboot
The main problem was that the reversal did NOT work.
The ENTER key was mapped to the SHIFT_R key; but the SHIFT_R key was not mapped to the ENTER key. Go figure.
add a comment |
Here is how I tried to switch the mapping of the ENTER key to the SHIFT key
(and vice versa):
$ uname -a
REPORTS:
Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux
$ which xmodmap
REPORTS:
/usr/bin/xmodmap
$ which xev
REPORTS:
/usr/bin/xev
$ xev
(ignore the next fifty lines or so)
PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XmbLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
What's important is the third line of each keypress:
FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".
REVERSE THE MAPPING:
$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"
SAVE THE RESULTS:
$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc
ADD
xmodmap ~/.Xmodmap
$ sudo reboot
The main problem was that the reversal did NOT work.
The ENTER key was mapped to the SHIFT_R key; but the SHIFT_R key was not mapped to the ENTER key. Go figure.
Here is how I tried to switch the mapping of the ENTER key to the SHIFT key
(and vice versa):
$ uname -a
REPORTS:
Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux
$ which xmodmap
REPORTS:
/usr/bin/xmodmap
$ which xev
REPORTS:
/usr/bin/xev
$ xev
(ignore the next fifty lines or so)
PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XmbLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)
XFilterEvent returns: False
PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 33, synthetic NO, window 0x5600001,
root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
What's important is the third line of each keypress:
FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".
state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".
REVERSE THE MAPPING:
$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"
SAVE THE RESULTS:
$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc
ADD
xmodmap ~/.Xmodmap
$ sudo reboot
The main problem was that the reversal did NOT work.
The ENTER key was mapped to the SHIFT_R key; but the SHIFT_R key was not mapped to the ENTER key. Go figure.
edited Oct 16 '12 at 14:56
henrique
319314
319314
answered Jan 27 '12 at 3:04
Bill DavisBill Davis
8111
8111
add a comment |
add a comment |
In order to do global remaps independently of X, you can make use of console-setup(5) instead.
In my case I wanted to remap Caps Lock key to D, since my D-key is broken :)
First I used dumpkeys(1) to get a template for a mapping, in the case of the D-key, the interesting bit is the mapping for keycode 32 (on my keyboard); Note that there are two spaces in the grep pattern!
$ sudo dumpkeys | grep "keycode 32" > tempfile
$ cat tempfile
keycode 32 = +d
shift keycode 32 = +D
altgr keycode 32 = +eth
shift altgr keycode 32 = +ETH
control keycode 32 = Control_d
shift control keycode 32 = Control_d
altgr control keycode 32 = Control_d
shift altgr control keycode 32 = Control_d
(121 lines total...)
In order to change the map to apply to Caps Lock (keycode 58 on my keyboard) instead
sed 's/32/58/' -i tempfile
Now it reads
keycode 58 = +d
shift keycode 58 = +D
altgr keycode 58 = +eth
(etc...)
To add this remap to the default map, it simply needs to be appended to the remap include file for console-setup
sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'
and console-setup needs to be reconfigured (skipping low priority questions with -phigh
)
sudo dpkg-reconfigure console-setup -phigh
Now the remap should be completed, and be loaded automatically on boot.
add a comment |
In order to do global remaps independently of X, you can make use of console-setup(5) instead.
In my case I wanted to remap Caps Lock key to D, since my D-key is broken :)
First I used dumpkeys(1) to get a template for a mapping, in the case of the D-key, the interesting bit is the mapping for keycode 32 (on my keyboard); Note that there are two spaces in the grep pattern!
$ sudo dumpkeys | grep "keycode 32" > tempfile
$ cat tempfile
keycode 32 = +d
shift keycode 32 = +D
altgr keycode 32 = +eth
shift altgr keycode 32 = +ETH
control keycode 32 = Control_d
shift control keycode 32 = Control_d
altgr control keycode 32 = Control_d
shift altgr control keycode 32 = Control_d
(121 lines total...)
In order to change the map to apply to Caps Lock (keycode 58 on my keyboard) instead
sed 's/32/58/' -i tempfile
Now it reads
keycode 58 = +d
shift keycode 58 = +D
altgr keycode 58 = +eth
(etc...)
To add this remap to the default map, it simply needs to be appended to the remap include file for console-setup
sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'
and console-setup needs to be reconfigured (skipping low priority questions with -phigh
)
sudo dpkg-reconfigure console-setup -phigh
Now the remap should be completed, and be loaded automatically on boot.
add a comment |
In order to do global remaps independently of X, you can make use of console-setup(5) instead.
In my case I wanted to remap Caps Lock key to D, since my D-key is broken :)
First I used dumpkeys(1) to get a template for a mapping, in the case of the D-key, the interesting bit is the mapping for keycode 32 (on my keyboard); Note that there are two spaces in the grep pattern!
$ sudo dumpkeys | grep "keycode 32" > tempfile
$ cat tempfile
keycode 32 = +d
shift keycode 32 = +D
altgr keycode 32 = +eth
shift altgr keycode 32 = +ETH
control keycode 32 = Control_d
shift control keycode 32 = Control_d
altgr control keycode 32 = Control_d
shift altgr control keycode 32 = Control_d
(121 lines total...)
In order to change the map to apply to Caps Lock (keycode 58 on my keyboard) instead
sed 's/32/58/' -i tempfile
Now it reads
keycode 58 = +d
shift keycode 58 = +D
altgr keycode 58 = +eth
(etc...)
To add this remap to the default map, it simply needs to be appended to the remap include file for console-setup
sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'
and console-setup needs to be reconfigured (skipping low priority questions with -phigh
)
sudo dpkg-reconfigure console-setup -phigh
Now the remap should be completed, and be loaded automatically on boot.
In order to do global remaps independently of X, you can make use of console-setup(5) instead.
In my case I wanted to remap Caps Lock key to D, since my D-key is broken :)
First I used dumpkeys(1) to get a template for a mapping, in the case of the D-key, the interesting bit is the mapping for keycode 32 (on my keyboard); Note that there are two spaces in the grep pattern!
$ sudo dumpkeys | grep "keycode 32" > tempfile
$ cat tempfile
keycode 32 = +d
shift keycode 32 = +D
altgr keycode 32 = +eth
shift altgr keycode 32 = +ETH
control keycode 32 = Control_d
shift control keycode 32 = Control_d
altgr control keycode 32 = Control_d
shift altgr control keycode 32 = Control_d
(121 lines total...)
In order to change the map to apply to Caps Lock (keycode 58 on my keyboard) instead
sed 's/32/58/' -i tempfile
Now it reads
keycode 58 = +d
shift keycode 58 = +D
altgr keycode 58 = +eth
(etc...)
To add this remap to the default map, it simply needs to be appended to the remap include file for console-setup
sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'
and console-setup needs to be reconfigured (skipping low priority questions with -phigh
)
sudo dpkg-reconfigure console-setup -phigh
Now the remap should be completed, and be loaded automatically on boot.
edited Jan 9 '14 at 12:09
community wiki
4 revs
arand
add a comment |
add a comment |
I spent one whole day in trying to create a shortcut for Ctrl+Pageup
.
I first tried xmodmap
but that can't generate modifier events. So it is impossible to create a shortcut that generates for example the Control
event.
I then tried xbindkeys
with xmacro
. That sort of works, but xbindkeys
is not able to capture some key combinations on my system, such as Alt + ___
.
So I finally used Unity's own Keyboard Shortcuts -> Custom Shortcuts to setup my shortcut.
And instead of xmacro
, I have now used xvkbd
program to generate the keyboard events, but that is just a personal preference. Both xmacro
and xvkbd
work almost the same. One additional tip is to add a delay parameter in xmacro
or xvkbd
to ensure that the events don't get lost.
add a comment |
I spent one whole day in trying to create a shortcut for Ctrl+Pageup
.
I first tried xmodmap
but that can't generate modifier events. So it is impossible to create a shortcut that generates for example the Control
event.
I then tried xbindkeys
with xmacro
. That sort of works, but xbindkeys
is not able to capture some key combinations on my system, such as Alt + ___
.
So I finally used Unity's own Keyboard Shortcuts -> Custom Shortcuts to setup my shortcut.
And instead of xmacro
, I have now used xvkbd
program to generate the keyboard events, but that is just a personal preference. Both xmacro
and xvkbd
work almost the same. One additional tip is to add a delay parameter in xmacro
or xvkbd
to ensure that the events don't get lost.
add a comment |
I spent one whole day in trying to create a shortcut for Ctrl+Pageup
.
I first tried xmodmap
but that can't generate modifier events. So it is impossible to create a shortcut that generates for example the Control
event.
I then tried xbindkeys
with xmacro
. That sort of works, but xbindkeys
is not able to capture some key combinations on my system, such as Alt + ___
.
So I finally used Unity's own Keyboard Shortcuts -> Custom Shortcuts to setup my shortcut.
And instead of xmacro
, I have now used xvkbd
program to generate the keyboard events, but that is just a personal preference. Both xmacro
and xvkbd
work almost the same. One additional tip is to add a delay parameter in xmacro
or xvkbd
to ensure that the events don't get lost.
I spent one whole day in trying to create a shortcut for Ctrl+Pageup
.
I first tried xmodmap
but that can't generate modifier events. So it is impossible to create a shortcut that generates for example the Control
event.
I then tried xbindkeys
with xmacro
. That sort of works, but xbindkeys
is not able to capture some key combinations on my system, such as Alt + ___
.
So I finally used Unity's own Keyboard Shortcuts -> Custom Shortcuts to setup my shortcut.
And instead of xmacro
, I have now used xvkbd
program to generate the keyboard events, but that is just a personal preference. Both xmacro
and xvkbd
work almost the same. One additional tip is to add a delay parameter in xmacro
or xvkbd
to ensure that the events don't get lost.
answered Jan 20 '14 at 5:30
HRJHRJ
344215
344215
add a comment |
add a comment |
For me AutoKey from Software Center worked the best. It has intuitive GUI, to add new binding click New -> Phrase and
- Add name, click OK
- At "Phrase Settings" section make sure the paste using is set to keyboard
- Add hotkey that you want to use
- Add command into text field, eg to emulate left arrow key - it'd be
<left>
(list of special keys is here).
add a comment |
For me AutoKey from Software Center worked the best. It has intuitive GUI, to add new binding click New -> Phrase and
- Add name, click OK
- At "Phrase Settings" section make sure the paste using is set to keyboard
- Add hotkey that you want to use
- Add command into text field, eg to emulate left arrow key - it'd be
<left>
(list of special keys is here).
add a comment |
For me AutoKey from Software Center worked the best. It has intuitive GUI, to add new binding click New -> Phrase and
- Add name, click OK
- At "Phrase Settings" section make sure the paste using is set to keyboard
- Add hotkey that you want to use
- Add command into text field, eg to emulate left arrow key - it'd be
<left>
(list of special keys is here).
For me AutoKey from Software Center worked the best. It has intuitive GUI, to add new binding click New -> Phrase and
- Add name, click OK
- At "Phrase Settings" section make sure the paste using is set to keyboard
- Add hotkey that you want to use
- Add command into text field, eg to emulate left arrow key - it'd be
<left>
(list of special keys is here).
answered Jul 28 '18 at 12:15
bruddhabruddha
1285
1285
add a comment |
add a comment |
protected by Seth♦ Mar 10 '14 at 21:07
Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).
Would you like to answer one of these unanswered questions instead?
checkout my answer here. It doesn't worth copy and paste same answer. Perhaps it would help you.
– Rahul Virpara
Jun 2 '12 at 9:40
1
Any Emacs-like bindings here for CTRL-P/N for unit steps?
– Léo Léopold Hertz 준영
Jul 7 '15 at 13:12
Since some time
xmodmap
is depricated! to get a system wide setting you have to usexkb
. So edit the language file in/usr/share/X11/xkb/symbols/
to add your changes there. See askubuntu.com/a/898462/34298– rubo77
Mar 30 '17 at 21:48