How to remap the context menu to another key in linux?

Solution 1:

It's a little bit complicated but you can do it. Follow these steps:

Detect keycode

  1. Run xev to detect the keycode:

    xev | grep keycode
    
            state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
            state 0x0, keycode 107 (keysym 0xff67, Menu), same_screen YES,
            state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    
  2. Press the key you want to reconfigure. The output in the terminal will show you the keycode (be careful, might have several).

Test mapping

  1. Set new mapping temporarily, for me it's keycode 107:

    xmodmap -e "keycode  107 = Return NoSymbol Return"
    

If the key behave as expected, you can save the config.

Save your config

  1. Save your current keymap table to your $HOME, to override the defau:

    xmodmap -pke > ~/.Xmodmap
    
  2. Create or edit ~/.xinitrc to load your configuration:

    $EDITOR ~/.xinitrc
    
  3. Add following lines

    if [ -f $HOME/.Xmodmap ]; then
            /usr/bin/xmodmap $HOME/.Xmodmap
    fi
    

Enjoy

Most of the information above comes from ArchWiki article.

Solution 2:

I found here that using: shift+F10 opens the context menu.

I know it's not the best solution but I thought it could help for temporary use!

P.S: I have e530c too, and I tested this on Debian 7 (Wheezy).

Solution 3:

This did the trick for me. For me the keycode for "PrtSc" button on my thinkpad is 107. I found that by "xev" tool in ubuntu.

xmodmap -e "keycode  107 = Menu"

This is a temporary change.

You can make this permanent by adding this command to /etc/profile and it will execute everytime you boot and it will be a permanent change.

Solution 4:

I recently acquired a Lenovo E550 and had the same problem, I solved it by using xte (from xautomation) along with xmodmap.

Why the other answers won't work entirely?

  1. @Ed Villegas (nor @Null Pointer) answer won't work because some of the keys located above the numeric part are not unique keys by themself (e.g. the lock key is related to the Super+L combination). When xev is used to try to find the lock key keycode it returns both the Super and the L keycodes, you just have to interpret the xev output line by line.

  2. For @Bahax and @John Finegan: Shift+F10 is a context menu key, it doesn't work in all the applications and it doesn't provide the same functions as Menu. If you select a file in the file explorer and press Menu the context menu for the file itself should pop-up, this does not happen with the Shift+F10 combination, it would provide a context menu for the window instead.

  3. @Danial Behzadi takes a similar approach to the people in the 2nd item, but linking the keyboard combination to one key through a keystroke simulator, it will link the key to the Shift+F10 and provide the same result.

The answer that works

It is important to take into account that the key that is not present in the ThinkPad keyboard is the Menu (that is it's name), it is shown in the following picture:

Menu key

Although the key is not present, it's keycode should exist in your computer, you can find it by printing the keycode table with xmodmap -pke | grep Menu which should give you something like:

xmodmap output

With that in mind, install xautomation (in order to use xte for keystroke simulations) like in @Danial Behzadi answer:

sudo apt-get install xautomation

And create a custom shortcut, in the Trigger press the key that you want to be the shortcut, and in the Action paste xte 'key Menu'. Apply and test.

Solution 5:

I finally found the way to do this after hours of tests and fails :D

First of all install xautomation:

sudo apt-get install xautomation

Then head to the Shortcut tab of Keyboard section in Ubuntu System Settings. First go to Screenshots entry and remap the actions to another key or disable them if you want. I replaced PrtSc(Print) key by the Thinkpad black button (Launch1).

Now go to Custom Shortcuts section and add a shortcut. name it whatever you like, e.g. Menu. In Command field insert this:

xte 'keydown Shift_L' 'key F10' 'keyup Shift_L'

The work is done! It's working like a miracle ;)