I want to change the key bindings on some of the keys on my keyboard. I want some to run commands and others to activate different keys.
What applications can I use to do this?
Index:
Default keyboard and shortcut settings (from within System Settings)
- xkb
xbindkeys..
Xbindkeys is a very versatile program that lets you remap keys very easily. It uses a config file, my default located in your home directory, to change key bindings into certain commands.
To create a default config file you use the command:
Which prints the default config file. So if you want to create the file containing the default values you would use:
Which prints the default values into a hidden file named
.xbindkeysrc
located in home (~
).Now to actually change the bindings of keys we first need to know what the name or keysym of those keys is.
xbindkeys
allows us to use the-k
handle to find the name of a key or key combination. Run:And press a key or key combination. Your output will look something similar to this (when pressing space):
"No Command"
tells us that currently no command is associated with the Space key.Is the name of the key/key combination.
the config file..
Lets open up the config file you made earlier:
Here is an excerpt from the default config file:
Every line beginning with
#
is a comment and won't be read or run byxbindkeys
.So far the only line that isn't commented out is:
This excerpt shows the basic syntax of
xbindkeys
commands:So as you can see:
Runs the command
xbindkeys_show
when you press Ctrl+Shift+q.bind keys to commands..
Now lets try binding a few keys. I recommend clearing the entire default file so that it's blank. It contains preset key bindings you probably don't want.
Now lets say you want to use Ctrl+b to open your browser. First you need to know what the name or keysym of Ctrl+b is. As mentioned earlier you can use
xbindkeys -k
to find the name of a key or keys, but there is an easier way. For simple combinations like Ctrl+b you can just use:A lot easier isn't it!
Now find the command for your favorite browser:
For Firefox:
firefox
For Chromium:
chromium-browser
For Opera:
opera
Remember the syntax from earlier? The
xbindkeys
command to launch Firefox (or your other favorite browser) when you press Ctrl+b is:Now put that in your config file and save it. Now you might notice your command doesn't work yet, that's because
xbindkeys
isn't running. To start it just runxbindkeys
from a terminal. Your Ctrl+b should now start your browser!bind keys to other keys..
If you want a key on your keyboard to call a different key on your keyboard, you will need an extra piece of software as
xbindkeys
does not support this on it's own. I know of two programs which we can use,xdotool
andxte
. I preferxte
so I'm going to use that.Install it:
The syntax for
xte
is like this:Examples:
To call a single key press:
xte 'key keyName'
To call a key combination:
xte 'keydown keyName' 'keydown secondKeyName' 'keyup keyName' 'keyup secondKeyName
To call a mouse button:
xte 'mouseclick buttonNumber'
(We'll discuss finding button numbers a little latter)To move the mouse:
xte 'mousemove xCoordinate yCoordinate'
And more! Read
man xte
Now that you know the command for simulating key presses you can call it from your
xbindkeys
script, like this:As you might guess, this calls
xte 'key b'
when we press Ctrl+b, which would enter a b into any document you might be currently working on.I thing to note however is that
xbindkeys
andxte
don't always work very well together. Sometimes you have to press the keys exactly at the same time to get output, other times it works just fine. This may or may not have to do with system configuration and/or hardware.. I'm not sure. See maggotbrain's answer for a more reliable way of binding keys to other keys.bind mouse buttons to commands..
You can also use
xbindkeys
to bind mouse buttons to commands (and thence keyboard shortcuts, see above). The basic format for mouse buttons should be familiar to you now:Where
[command to run]
is the command you want to run andn
the number of the mouse button you want to use for that command.If you don't know the number of your mouse button you can use
xev
to find out what it is:The output will be something like this:
When I press each of my mouse buttons.
For example:
Launches firefox when I press my middle mouse button.
Xev and xmodmap
Changing key bindings using
xev
andxmodmap
.Both command line applications are available by default, so there is no need to install additional software.
Xev "creates a window and then asks the X server to send it events whenever anything happens to the window (such as it being moved, resized, typed in, clicked in, etc.)." xev man page
xmodmap is a "program is used to edit and display the keyboard modifier map and keymap table that are used by client applications to convert event keycodes into keysyms." xmodmap man page
The following example will remap the Caps_Lock key to the behavior of the Esc key (Many vi/vim users find this to be a useful keyboard mapping).
Using xev
Start the
xev
application from a terminal window (Ctrl-Alt-t). It may be useful to grep its output likexev | grep -i key
The application will initialize, display a number of lines, and start a small window with a box. Keep the
xev
application window in focus, and press the key whose properties/behavior that you wish to use.In the terminal window, you will see several lines of output. Make note of 3rd line returned. This will contain the name of the property you wish to move to the other key.
In this case, the Esc key(keycode 9) uses the name "Escape".
This time we are looking for the keycode that Caps Lock is using.
Again, note the 3rd line:
Using xmodmap
Now that we have obtained the information on the keys that we wish to change from
xev
, we will usexmodmap
to modify the keymaps. From the command terminal (Ctrl+Alt+t), run the following commands:This command modifies the Caps Lock to use the same behavior as Esc
You can also remap it to basically any key, here it is remapped to the
p
keyThis option prints the current keymap table as expressions into the file
~/.Xmodmap
Activate the changes(for this login session only) with following command:
Making changes persistent across reboots:
If it doesn't exist, create a file in your home folder called
.xinitrc
.Place the following line in the file and save the file:
Modifying keys with different state behaviors
(such as Num Lock)
Obtain the keymap table for the modifier keys (output abbreviated here)
If you wanted to change, for example, the behavior of the period on Del/Period key on the number keypad, to a comma, use the following command:
Note that this is using
mod2
keymapping to change key behavior when the modifier Num Lock is pressed. The syntax for this is:Resource
By default (This is just to complement the Excellent answer by Seth), Ubuntu (In this example I am using 16.04) has 2 categories that come by default in the System Settings:
To go to the System Settings, on the Top Right click on the Gear icon:
Then select System Settings:
Here you will find 2 options that can send you to the Shortcut Creation section.
If you select Text Entry you will have to select the Keyboard Settings Link on the Bottom Right which would send you directly to the Shortcuts options.
If you select the Keyboard option, you would have to click on the Shortcuts Tab
After arriving at the Shortcuts tabs, you would select the Custom Shortcuts at the bottom of the list in the left side:
And then click on the Plus Sign at the bottom in order to start creating your very own Shortcut:
From there on, it's just a matter of you adding the name of the shortcut (Do not confuse the name of the shortcut, for the name of the actual command you will be executing). And below, in the Command field, is where you will put what command will be executed for this shortcut. In the following example I named the Shortcut "Sublime Text 3" to know what that specific shortcut relates to. And on the command field I added the actual command which is
subl
.You will end up with the following on screen that shows that, since the shortcut does not yet have a key or key combination assigned, it is Disabled by default:
We would then click on the "Disabled" message in order to add a key combination to it:
In this part, I assign the key combination of SHIFT+CTRL+S so that when I press this combination it opens the Sublime Text App.
After which, you can simply test your combination by pressing the corresponding key combination and seeing the app open:
NOTE: For special combinations like the one to kill the X Server, I suggest visiting the following link: How do I enable Ctrl-Alt-Backspace to kill the X server?
Go to System Settings → Keboard, select Shortcuts tab and add a new custom shortcut for your browser. If your default brouser is Firefox, use
firefox
for in command field; if your default brouser is Firefox, usechromium-browser
, and so on:You can create complex (multi-key) keyboard shortcuts by installing AutoKey from the software center. Unlike xmodmap, AutoKey doesn't rebind the actual keys on your keyboard; it runs in the background and intercepts your defined keyboard shortcuts, then sends simulated keypresses to your applications.
The first time you launch AutoKey, it will start the service in the background (the notification icon hasn't been updated for unity, so there's no visual indication). Once it's running, you can bring up the configuration interface by running the launcher again:
Now open Edit > Preferences and select "Automatically start AutoKey at login" to make sure that your shortcuts work whenever you are logged in.
Mapping a keyboard shortcut to another keyboard shortcut
Type the keys you want to map to in the text box.
+
between them (e.g.<ctrl>+c
would copy in most applications;<ctrl>+c<ctrl>+n<ctrl>+v
would create a new document containing the selection;<shift>+ubuntu
would type the text "Ubuntu")Press the "Set" button next to "Hotkey". This will bring up a dialog that allows you to determine the key combination you want to map from:
Select File > Save
An example of a completed configuration (which sends
<enter>
when you press<ctrl>+m
) looks like this:Try this:
Install a program called XKeyCaps. To install, just press Ctrl+Alt+T on your keyboard to open Terminal. When it opens, run the command(s) below:
Once installed, you can do xkeycaps at the prompt to run the program. Once it runs, choose the right keyboard layout, and click OK
Then when you get the keyboard on the screen right click the key that you want, in your case its the S, and choose exchange keys.
Make sure to add the line below to your sessions so it autostarts each time you boot up.
Source: UFM ytsejam1138
If you just want to remap keys, the other answers are great.
However, there's another way to approach it. AutoKey is a keyboard macro processor that allows you to associate any key/modifier combination with a script that can do almost anything you can do from your keyboard and a lot more.
AutoKey has a script recorder and a simple way to enter basic key sequences, but its scripts are written in Python and can do almost anything you can code.
The simplest way to use it is to have it send keystrokes to your applications/desktop. When used this way, the system/applications cannot tell that it's not you typing, so there is no API or other interface needed, they just do what "you" typed.
AutoKey can also process phrases. When you type a triggering character string, it can substitute new text for that string (either immediately or after you type a separator character like a newline or tab.)
It also has window filters so that you can restrict a particular phrase or script to only run in particular types of windows (like ones that have Mozilla in the title so they work only in things like Firefox or Thunderbird).
AutoKey currently has Gtk and Qt versions.
Edits:
Installation Guide
User Forum Active user forum.
There are a number of example scripts in the wiki. Because it's primarily a GUI app with a lot of options, examples would require a lot of screenshots and a whole article.
I have a phrase defined so that when I type "Jmail!", it instantly replaces it with my rather long email address.
I wrote a script that is triggered by typing Ctrl-P which is only active in windows that have "Mozilla" in their title. Typing Ctrl-P brings up the (Firefox or Thunderbird) print dialog, selects Print to File and then fills in the name of the next available print file in my print queue (I number them 01, 02, ... and the script reads the queue directory, finds the last file number and increments it by 1). I use it with my duplex printing emulation software (duplexpr) to eliminate a ton of keystrokes and mouse movements.
I have seen some other scripts from gamers that let them access information about their character and resources very quickly so they can stay focused on the action.
Using xkb
xkb
is the X Keyboard extension. It is responsible for mapping your keyboard's keys to their designated function.xkb
symbols can be found in/usr/share/X11/xkb/symbols/
. The modifier keys are mapped in/usr/share/X11/xkb/symbols/pc
.Say, I need to switch the functions of
Caps Lock
andLeft Control
keys. These changes are required to thepc
file:In order to apply the new mappings you need to clear out
xkb
’s cache from/var/lib/xkb
:Now, just restart your X session and you are good to go.
Source: https://radu.cotescu.com/remapping-keys-in-ubuntu-14.04/
Edit: Doing an
ls
inside thesymbols
directory gives this:The mappings inside the file
ru
are based on the Russian standard keyboard. Themacintosh_vndr
folder contains the mappings for Apple keyboards. In a nutshell, this approach is so much versatile. Go ahead and play with it :)USING KEYBOARD KEYS AS MOUSE BUTTONS
You may want to map a keyboard key to a mouse button. If you want to click using a keyboard key (useful if you have a macbook or a bad trackpad button) then you can do the following.
install some utilities:
find the keycode for the key you want to map:
xev | grep keycode
in the terminalpress the key of interest and a line like this will appear:
using the keycode, remap the key to do the same as the left mouse button:
xkbset m
xmodmap -e "keycode 64 = Pointer_Button1"
Pointer_Button3
is the right mouse button andPointer_Button2
is the middle.It turned out that it is under the 'keyboard' application.
If you bring that up, you can then change shortcuts as needed...
change is a bit strange on first use. You click over on the right (the column that has ctrl-alt-T, Disabled, etc. then click the actual keys, eg ctrlaltb that you want. You'll see the new key sequence appear now in that space. Close the window (or click away) and the new shortcut will now work.