Goal
Learn how to remap keys in CentOS 7.6. Primary goal: Swap Caps Lock and Ctrl keys. Secondary goal: Set F5 to be Escape.
Contents
- Goal
- Contents
- Brief Summary
- Project Log
Brief Summary
After experimentation and testing, I made these final changes:
1) Set Alt_L key to perform the Control_L function. Adjust modifier map for "control" and for "alt".
2) Set Control_L key to perform the Alt_L function. Adjust modifier map for "control" and for "alt".
3) Set F5 key to perform the Escape function.
4) Set Shift + Backspace key to perform the Delete function (i.e. delete next character).
5) Automate these steps in a script. Set this script to be executed on login via the Gnome GUI.
Project Log
Some reading indicates that:
- Linux uses two keyboard mappings, one for the console and one for the graphical mode (the X Window System).
- The console keyboard mapping can be altered using
loadkeys
.- The existing keymaps for
loadkeys
 are stored in 
/usr/share/kbd/keymaps
. A description of these files is available in 
man 5 keymaps
. - The graphical mode keyboard mapping can be altered using
setxkbmap
 or 
xmodmap
. Source:
unix.stackexchange.com/questions/177024/remap-keyboard-on-the-linux-console
Author: michas
Date: Jan 2 '15
System details:
- Name: Shovel
- Specifications: HP 6005 Pro SFF. 3 GHz x86_64 processor (AMD II x4 B95 Quad Core), 4 GB RAM, 1 TB hard drive. Running CentOS 7.6.1810 (Core).
- More information: New computer: Shovel
- Installed items: GCC 4.8.5, Make 3.82.
Create new project directory:
remapping_keys_in_centos_76
Within new project directory, create new work directory:
work
Open a terminal and change directory to the work directory.
[spiano@localhost work]$ xmodmap --version
xmodmap: unrecognized argument --version
usage:  xmodmap [-options ...] [filename]
where options include:
    -display host:dpy            X server to use
    -verbose, -quiet             turn logging on or off
    -n                           don't execute changes, just show like make
    -e expression                execute string
    -pm                          print modifier map
    -pk                          print keymap table
    -pke                         print keymap table as expressions
    -pp                          print pointer map
    -help                        print this usage message
    -grammar                     print out short help on allowable input
    -version                     print program version
    -                            read standard input
[spiano@localhost work]$ xmodmap -version
xmodmap 1.0.9
[spiano@localhost work]$ xmodmap -grammar
xmodmap accepts the following input expressions:
    pointer = default              reset pointer buttons to default
    pointer = NUMBER ...           set pointer button codes
    keycode NUMBER = [KEYSYM ...]  map keycode to given keysyms
    keysym KEYSYM = [KEYSYM ...]   look up keysym and do a keycode operation
    clear MODIFIER                 remove all keys for this modifier
    add MODIFIER = KEYSYM ...      add the keysyms to the modifier
    remove MODIFIER = KEYSYM ...   remove the keysyms from the modifier
where NUMBER is a decimal, octal, or hex constant; KEYSYM is a valid
Key Symbol name; and MODIFIER is one of the eight modifier names:  Shift,
Lock, Control, Mod1, Mod2, Mod3, Mod4, or Mod5.  Lines beginning with
an exclamation mark (!) are taken as comments.  Case is significant except
for MODIFIER names.
Keysyms on the left hand side of the = sign are looked up before any changes
are made; keysyms on the right are looked up after all of those on the left
have been resolved.  This makes it possible to swap modifier keys.
[spiano@localhost work]$ xmodmap -pk
There are 10 KeySyms per KeyCode; KeyCodes range from 8 to 255.
    KeyCode	Keysym (Keysym)	...
    Value  	Value   (Name) 	...
      8    	
      9    	0xff1b (Escape)	0x0000 (NoSymbol)	0xff1b (Escape)	
     10    	0x0031 (1)	0x0021 (exclam)	0x0031 (1)	0x0021 (exclam)	0x00b9 (onesuperior)	0x00a1 (exclamdown)
     11    	0x0032 (2)	0x0040 (at)	0x0032 (2)	0x0022 (quotedbl)	0x00b2 (twosuperior)	0x0ac3 (oneeighth)	
     12    	0x0033 (3)	0x0023 (numbersign)	0x0033 (3)	0x00a3 (sterling)	0x00b3 (threesuperior)	0x00a3 (sterling)	
     13    	0x0034 (4)	0x0024 (dollar)	0x0034 (4)	0x0024 (dollar)	0x20ac (EuroSign)	0x00bc (onequarter)
     14    	0x0035 (5)	0x0025 (percent)	0x0035 (5)	0x0025 (percent)	0x00bd (onehalf)	0x0ac4 (threeeighths)	
     15    	0x0036 (6)	0x005e (asciicircum)	0x0036 (6)	0x005e (asciicircum)	0x00be (threequarters)	0x0ac5 (fiveeighths)	
     16    	0x0037 (7)	0x0026 (ampersand)	0x0037 (7)	0x0026 (ampersand)	0x007b (braceleft)	0x0ac6 (seveneighths)	
     17    	0x0038 (8)	0x002a (asterisk)	0x0038 (8)	0x002a (asterisk)	0x005b (bracketleft)	0x0ac9 (trademark)	
     18    	0x0039 (9)	0x0028 (parenleft)	0x0039 (9)	0x0028 (parenleft)	0x005d (bracketright)	0x00b1 (plusminus)	
     19    	0x0030 (0)	0x0029 (parenright)	0x0030 (0)	0x0029 (parenright)	0x007d (braceright)	0x00b0 (degree)	
     20    	0x002d (minus)	0x005f (underscore)	0x002d (minus)	0x005f (underscore)	0x005c (backslash)	0x00bf (questiondown)	
     21    	0x003d (equal)	0x002b (plus)	0x003d (equal)	0x002b (plus)	0xfe5b (dead_cedilla)	0xfe5c (dead_ogonek)	
     22    	0xff08 (BackSpace)	0xff08 (BackSpace)	0xff08 (BackSpace)	0xff08 (BackSpace)	
     23    	0xff09 (Tab)	0xfe20 (ISO_Left_Tab)	0xff09 (Tab)	0xfe20 (ISO_Left_Tab)	
     24    	0x0071 (q)	0x0051 (Q)	0x0071 (q)	0x0051 (Q)	0x0040 (at)	0x07d9 (Greek_OMEGA)	
     25    	0x0077 (w)	0x0057 (W)	0x0077 (w)	0x0057 (W)	0x01b3 (lstroke)	0x01a3 (Lstroke)	
     26    	0x0065 (e)	0x0045 (E)	0x0065 (e)	0x0045 (E)	0x0065 (e)	0x0045 (E)	
     27    	0x0072 (r)	0x0052 (R)	0x0072 (r)	0x0052 (R)	0x00b6 (paragraph)	0x00ae (registered)
     28    	0x0074 (t)	0x0054 (T)	0x0074 (t)	0x0054 (T)	0x03bc (tslash)	0x03ac (Tslash)	
     29    	0x0079 (y)	0x0059 (Y)	0x0079 (y)	0x0059 (Y)	0x08fb (leftarrow)	0x00a5 (yen)	
     30    	0x0075 (u)	0x0055 (U)	0x0075 (u)	0x0055 (U)	0x08fe (downarrow)	0x08fc (uparrow)	
     31    	0x0069 (i)	0x0049 (I)	0x0069 (i)	0x0049 (I)	0x08fd (rightarrow)	0x02b9 (idotless)	
     32    	0x006f (o)	0x004f (O)	0x006f (o)	0x004f (O)	0x00f8 (oslash)	0x00d8 (Oslash)	
     33    	0x0070 (p)	0x0050 (P)	0x0070 (p)	0x0050 (P)	0x00fe (thorn)	0x00de (THORN)	
     34    	0x005b (bracketleft)	0x007b (braceleft)	0x005b (bracketleft)	0x007b (braceleft)	0xfe57 (dead_diaeresis)	0xfe58 (dead_abovering)	
     35    	0x005d (bracketright)	0x007d (braceright)	0x005d (bracketright)	0x007d (braceright)	0xfe53 (dead_tilde)	0xfe54 (dead_macron)	
     36    	0xff0d (Return)	0x0000 (NoSymbol)	0xff0d (Return)	
     37    	0xffe3 (Control_L)	0x0000 (NoSymbol)	0xffe3 (Control_L)	
     38    	0x0061 (a)	0x0041 (A)	0x0061 (a)	0x0041 (A)	0x00e6 (ae)	0x00c6 (AE)	
     39    	0x0073 (s)	0x0053 (S)	0x0073 (s)	0x0053 (S)	0x00df (ssharp)	0x00a7 (section)	
     40    	0x0064 (d)	0x0044 (D)	0x0064 (d)	0x0044 (D)	0x00f0 (eth)	0x00d0 (ETH)	
     41    	0x0066 (f)	0x0046 (F)	0x0066 (f)	0x0046 (F)	0x01f0 (dstroke)	0x00aa (ordfeminine)	
     42    	0x0067 (g)	0x0047 (G)	0x0067 (g)	0x0047 (G)	0x03bf (eng)	0x03bd (ENG)	
     43    	0x0068 (h)	0x0048 (H)	0x0068 (h)	0x0048 (H)	0x02b1 (hstroke)	0x02a1 (Hstroke)	
     44    	0x006a (j)	0x004a (J)	0x006a (j)	0x004a (J)	0xfe61 (dead_hook)	0xfe62 (dead_horn)
     45    	0x006b (k)	0x004b (K)	0x006b (k)	0x004b (K)	0x03a2 (kra)	0x0026 (ampersand)	
     46    	0x006c (l)	0x004c (L)	0x006c (l)	0x004c (L)	0x01b3 (lstroke)	0x01a3 (Lstroke)	
     47    	0x003b (semicolon)	0x003a (colon)	0x003b (semicolon)	0x003a (colon)	0xfe51 (dead_acute)	0xfe59 (dead_doubleacute)	
     48    	0x0027 (apostrophe)	0x0022 (quotedbl)	0x0027 (apostrophe)	0x0040 (at)	0xfe52 (dead_circumflex)	0xfe5a (dead_caron)	
     49    	0x0060 (grave)	0x007e (asciitilde)	0x0060 (grave)	0x00ac (notsign)	0x007c (bar)	0x007c (bar)	
     50    	0xffe1 (Shift_L)	0x0000 (NoSymbol)	0xffe1 (Shift_L)	
     51    	0x005c (backslash)	0x007c (bar)	0x0023 (numbersign)	0x007e (asciitilde)	0xfe50 (dead_grave)0xfe55 (dead_breve)	
     52    	0x007a (z)	0x005a (Z)	0x007a (z)	0x005a (Z)	0x00ab (guillemotleft)	0x003c (less)	
     53    	0x0078 (x)	0x0058 (X)	0x0078 (x)	0x0058 (X)	0x00bb (guillemotright)	0x003e (greater)	
     54    	0x0063 (c)	0x0043 (C)	0x0063 (c)	0x0043 (C)	0x00a2 (cent)	0x00a9 (copyright)	
     55    	0x0076 (v)	0x0056 (V)	0x0076 (v)	0x0056 (V)	0x0ad2 (leftdoublequotemark)	0x0ad0 (leftsinglequotemark)	
     56    	0x0062 (b)	0x0042 (B)	0x0062 (b)	0x0042 (B)	0x0ad3 (rightdoublequotemark)	0x0ad1 (rightsinglequotemark)	
     57    	0x006e (n)	0x004e (N)	0x006e (n)	0x004e (N)	0x006e (n)	0x004e (N)	
     58    	0x006d (m)	0x004d (M)	0x006d (m)	0x004d (M)	0x00b5 (mu)	0x00ba (masculine)	
     59    	0x002c (comma)	0x003c (less)	0x002c (comma)	0x003c (less)	0x08a3 (horizconnector)	0x00d7 (multiply)	
     60    	0x002e (period)	0x003e (greater)	0x002e (period)	0x003e (greater)	0x00b7 (periodcentered)	0x00f7 (division)	
     61    	0x002f (slash)	0x003f (question)	0x002f (slash)	0x003f (question)	0xfe60 (dead_belowdot)	0xfe56 (dead_abovedot)	
     62    	0xffe2 (Shift_R)	0x0000 (NoSymbol)	0xffe2 (Shift_R)	
     63    	0xffaa (KP_Multiply)	0xffaa (KP_Multiply)	0xffaa (KP_Multiply)	0xffaa (KP_Multiply)	0xffaa (KP_Multiply)	0xffaa (KP_Multiply)	0x1008fe21 (XF86ClearGrab)	0xffaa (KP_Multiply)	0xffaa (KP_Multiply)	0x1008fe21 (XF86ClearGrab)	
     64    	0xffe9 (Alt_L)	0xffe7 (Meta_L)	0xffe9 (Alt_L)	0xffe7 (Meta_L)	
     65    	0x0020 (space)	0x0000 (NoSymbol)	0x0020 (space)	
     66    	0xffe5 (Caps_Lock)	0x0000 (NoSymbol)	0xffe5 (Caps_Lock)	
     67    	0xffbe (F1)	0xffbe (F1)	0xffbe (F1)	0xffbe (F1)	0xffbe (F1)	0xffbe (F1)	0x1008fe01 (XF86Switch_VT_1)	0xffbe (F1)	0xffbe (F1)	0x1008fe01 (XF86Switch_VT_1)	
     68    	0xffbf (F2)	0xffbf (F2)	0xffbf (F2)	0xffbf (F2)	0xffbf (F2)	0xffbf (F2)	0x1008fe02 (XF86Switch_VT_2)	0xffbf (F2)	0xffbf (F2)	0x1008fe02 (XF86Switch_VT_2)	
     69    	0xffc0 (F3)	0xffc0 (F3)	0xffc0 (F3)	0xffc0 (F3)	0xffc0 (F3)	0xffc0 (F3)	0x1008fe03 (XF86Switch_VT_3)	0xffc0 (F3)	0xffc0 (F3)	0x1008fe03 (XF86Switch_VT_3)	
     70    	0xffc1 (F4)	0xffc1 (F4)	0xffc1 (F4)	0xffc1 (F4)	0xffc1 (F4)	0xffc1 (F4)	0x1008fe04 (XF86Switch_VT_4)	0xffc1 (F4)	0xffc1 (F4)	0x1008fe04 (XF86Switch_VT_4)	
     71    	0xffc2 (F5)	0xffc2 (F5)	0xffc2 (F5)	0xffc2 (F5)	0xffc2 (F5)	0xffc2 (F5)	0x1008fe05 (XF86Switch_VT_5)	0xffc2 (F5)	0xffc2 (F5)	0x1008fe05 (XF86Switch_VT_5)	
     72    	0xffc3 (F6)	0xffc3 (F6)	0xffc3 (F6)	0xffc3 (F6)	0xffc3 (F6)	0xffc3 (F6)	0x1008fe06 (XF86Switch_VT_6)	0xffc3 (F6)	0xffc3 (F6)	0x1008fe06 (XF86Switch_VT_6)	
     73    	0xffc4 (F7)	0xffc4 (F7)	0xffc4 (F7)	0xffc4 (F7)	0xffc4 (F7)	0xffc4 (F7)	0x1008fe07 (XF86Switch_VT_7)	0xffc4 (F7)	0xffc4 (F7)	0x1008fe07 (XF86Switch_VT_7)	
     74    	0xffc5 (F8)	0xffc5 (F8)	0xffc5 (F8)	0xffc5 (F8)	0xffc5 (F8)	0xffc5 (F8)	0x1008fe08 (XF86Switch_VT_8)	0xffc5 (F8)	0xffc5 (F8)	0x1008fe08 (XF86Switch_VT_8)	
     75    	0xffc6 (F9)	0xffc6 (F9)	0xffc6 (F9)	0xffc6 (F9)	0xffc6 (F9)	0xffc6 (F9)	0x1008fe09 (XF86Switch_VT_9)	0xffc6 (F9)	0xffc6 (F9)	0x1008fe09 (XF86Switch_VT_9)	
     76    	0xffc7 (F10)	0xffc7 (F10)	0xffc7 (F10)	0xffc7 (F10)	0xffc7 (F10)	0xffc7 (F10)	0x1008fe0a (XF86Switch_VT_10)	0xffc7 (F10)	0xffc7 (F10)	0x1008fe0a (XF86Switch_VT_10)	
     77    	0xff7f (Num_Lock)	0x0000 (NoSymbol)	0xff7f (Num_Lock)	
     78    	0xff14 (Scroll_Lock)	0x0000 (NoSymbol)	0xff14 (Scroll_Lock)	
     79    	0xff95 (KP_Home)	0xffb7 (KP_7)	0xff95 (KP_Home)	0xffb7 (KP_7)	
     80    	0xff97 (KP_Up)	0xffb8 (KP_8)	0xff97 (KP_Up)	0xffb8 (KP_8)	
     81    	0xff9a (KP_Prior)	0xffb9 (KP_9)	0xff9a (KP_Prior)	0xffb9 (KP_9)	
     82    	0xffad (KP_Subtract)	0xffad (KP_Subtract)	0xffad (KP_Subtract)	0xffad (KP_Subtract)	0xffad (KP_Subtract)	0xffad (KP_Subtract)	0x1008fe23 (XF86Prev_VMode)	0xffad (KP_Subtract)	0xffad (KP_Subtract)	0x1008fe23 (XF86Prev_VMode)	
     83    	0xff96 (KP_Left)	0xffb4 (KP_4)	0xff96 (KP_Left)	0xffb4 (KP_4)	
     84    	0xff9d (KP_Begin)	0xffb5 (KP_5)	0xff9d (KP_Begin)	0xffb5 (KP_5)	
     85    	0xff98 (KP_Right)	0xffb6 (KP_6)	0xff98 (KP_Right)	0xffb6 (KP_6)	
     86    	0xffab (KP_Add)	0xffab (KP_Add)	0xffab (KP_Add)	0xffab (KP_Add)	0xffab (KP_Add)	0xffab (KP_Add)	0x1008fe22 (XF86Next_VMode)	0xffab (KP_Add)	0xffab (KP_Add)	0x1008fe22 (XF86Next_VMode)	
     87    	0xff9c (KP_End)	0xffb1 (KP_1)	0xff9c (KP_End)	0xffb1 (KP_1)	
     88    	0xff99 (KP_Down)	0xffb2 (KP_2)	0xff99 (KP_Down)	0xffb2 (KP_2)	
     89    	0xff9b (KP_Next)	0xffb3 (KP_3)	0xff9b (KP_Next)	0xffb3 (KP_3)	
     90    	0xff9e (KP_Insert)	0xffb0 (KP_0)	0xff9e (KP_Insert)	0xffb0 (KP_0)	
     91    	0xff9f (KP_Delete)	0xffae (KP_Decimal)	0xff9f (KP_Delete)	0xffae (KP_Decimal)	
     92    	0xfe03 (ISO_Level3_Shift)	0x0000 (NoSymbol)	0xfe03 (ISO_Level3_Shift)	
     93    	
     94    	0x003c (less)	0x003e (greater)	0x005c (backslash)	0x007c (bar)	0x007c (bar)	0x00a6 (brokenbar)	0x007c (bar)	0x00a6 (brokenbar)	
     95    	0xffc8 (F11)	0xffc8 (F11)	0xffc8 (F11)	0xffc8 (F11)	0xffc8 (F11)	0xffc8 (F11)	0x1008fe0b (XF86Switch_VT_11)	0xffc8 (F11)	0xffc8 (F11)	0x1008fe0b (XF86Switch_VT_11)	
     96    	0xffc9 (F12)	0xffc9 (F12)	0xffc9 (F12)	0xffc9 (F12)	0xffc9 (F12)	0xffc9 (F12)	0x1008fe0c (XF86Switch_VT_12)	0xffc9 (F12)	0xffc9 (F12)	0x1008fe0c (XF86Switch_VT_12)	
     97    	
     98    	0xff26 (Katakana)	0x0000 (NoSymbol)	0xff26 (Katakana)	
     99    	0xff25 (Hiragana)	0x0000 (NoSymbol)	0xff25 (Hiragana)	
    100    	0xff23 (Henkan_Mode)	0x0000 (NoSymbol)	0xff23 (Henkan_Mode)	
    101    	0xff27 (Hiragana_Katakana)	0x0000 (NoSymbol)	0xff27 (Hiragana_Katakana)	
    102    	0xff22 (Muhenkan)	0x0000 (NoSymbol)	0xff22 (Muhenkan)	
    103    	
    104    	0xff8d (KP_Enter)	0x0000 (NoSymbol)	0xff8d (KP_Enter)	
    105    	0xffe4 (Control_R)	0x0000 (NoSymbol)	0xffe4 (Control_R)	
    106    	0xffaf (KP_Divide)	0xffaf (KP_Divide)	0xffaf (KP_Divide)	0xffaf (KP_Divide)	0xffaf (KP_Divide)	0xffaf (KP_Divide)	0x1008fe20 (XF86Ungrab)	0xffaf (KP_Divide)	0xffaf (KP_Divide)	0x1008fe20 (XF86Ungrab)	
    107    	0xff61 (Print)	0xff15 (Sys_Req)	0xff61 (Print)	0xff15 (Sys_Req)	
    108    	0xffea (Alt_R)	0xffe8 (Meta_R)	0xfe03 (ISO_Level3_Shift)	0xff20 (Multi_key)	
    109    	0xff0a (Linefeed)	0x0000 (NoSymbol)	0xff0a (Linefeed)	
    110    	0xff50 (Home)	0x0000 (NoSymbol)	0xff50 (Home)	
    111    	0xff52 (Up)	0x0000 (NoSymbol)	0xff52 (Up)	
    112    	0xff55 (Prior)	0x0000 (NoSymbol)	0xff55 (Prior)	
    113    	0xff51 (Left)	0x0000 (NoSymbol)	0xff51 (Left)	
    114    	0xff53 (Right)	0x0000 (NoSymbol)	0xff53 (Right)	
    115    	0xff57 (End)	0x0000 (NoSymbol)	0xff57 (End)	
    116    	0xff54 (Down)	0x0000 (NoSymbol)	0xff54 (Down)	
    117    	0xff56 (Next)	0x0000 (NoSymbol)	0xff56 (Next)	
    118    	0xff63 (Insert)	0x0000 (NoSymbol)	0xff63 (Insert)	
    119    	0xffff (Delete)	0x0000 (NoSymbol)	0xffff (Delete)	
    120    	
    121    	0x1008ff12 (XF86AudioMute)	0x0000 (NoSymbol)	0x1008ff12 (XF86AudioMute)	
    122    	0x1008ff11 (XF86AudioLowerVolume)	0x0000 (NoSymbol)	0x1008ff11 (XF86AudioLowerVolume)	
    123    	0x1008ff13 (XF86AudioRaiseVolume)	0x0000 (NoSymbol)	0x1008ff13 (XF86AudioRaiseVolume)	
    124    	0x1008ff2a (XF86PowerOff)	0x0000 (NoSymbol)	0x1008ff2a (XF86PowerOff)	
    125    	0xffbd (KP_Equal)	0x0000 (NoSymbol)	0xffbd (KP_Equal)	
    126    	0x00b1 (plusminus)	0x0000 (NoSymbol)	0x00b1 (plusminus)	
    127    	0xff13 (Pause)	0xff6b (Break)	0xff13 (Pause)	0xff6b (Break)	
    128    	0x1008ff4a (XF86LaunchA)	0x0000 (NoSymbol)	0x1008ff4a (XF86LaunchA)	
    129    	0xffae (KP_Decimal)	0xffae (KP_Decimal)	0xffae (KP_Decimal)	0xffae (KP_Decimal)	
    130    	0xff31 (Hangul)	0x0000 (NoSymbol)	0xff31 (Hangul)	
    131    	0xff34 (Hangul_Hanja)	0x0000 (NoSymbol)	0xff34 (Hangul_Hanja)	
    132    	
    133    	0xffeb (Super_L)	0x0000 (NoSymbol)	0xffeb (Super_L)	
    134    	0xffec (Super_R)	0x0000 (NoSymbol)	0xffec (Super_R)	
    135    	0xff67 (Menu)	0x0000 (NoSymbol)	0xff67 (Menu)	
    136    	0xff69 (Cancel)	0x0000 (NoSymbol)	0xff69 (Cancel)	
    137    	0xff66 (Redo)	0x0000 (NoSymbol)	0xff66 (Redo)	
    138    	0x1005ff70 (SunProps)	0x0000 (NoSymbol)	0x1005ff70 (SunProps)	
    139    	0xff65 (Undo)	0x0000 (NoSymbol)	0xff65 (Undo)	
    140    	0x1005ff71 (SunFront)	0x0000 (NoSymbol)	0x1005ff71 (SunFront)	
    141    	0x1008ff57 (XF86Copy)	0x0000 (NoSymbol)	0x1008ff57 (XF86Copy)	
    142    	0x1008ff6b (XF86Open)	0x0000 (NoSymbol)	0x1008ff6b (XF86Open)	
    143    	0x1008ff6d (XF86Paste)	0x0000 (NoSymbol)	0x1008ff6d (XF86Paste)	
    144    	0xff68 (Find)	0x0000 (NoSymbol)	0xff68 (Find)	
    145    	0x1008ff58 (XF86Cut)	0x0000 (NoSymbol)	0x1008ff58 (XF86Cut)	
    146    	0xff6a (Help)	0x0000 (NoSymbol)	0xff6a (Help)	
    147    	0x1008ff65 (XF86MenuKB)	0x0000 (NoSymbol)	0x1008ff65 (XF86MenuKB)	
    148    	0x1008ff1d (XF86Calculator)	0x0000 (NoSymbol)	0x1008ff1d (XF86Calculator)	
    149    	
    150    	0x1008ff2f (XF86Sleep)	0x0000 (NoSymbol)	0x1008ff2f (XF86Sleep)	
    151    	0x1008ff2b (XF86WakeUp)	0x0000 (NoSymbol)	0x1008ff2b (XF86WakeUp)	
    152    	0x1008ff5d (XF86Explorer)	0x0000 (NoSymbol)	0x1008ff5d (XF86Explorer)	
    153    	0x1008ff7b (XF86Send)	0x0000 (NoSymbol)	0x1008ff7b (XF86Send)	
    154    	
    155    	0x1008ff8a (XF86Xfer)	0x0000 (NoSymbol)	0x1008ff8a (XF86Xfer)	
    156    	0x1008ff41 (XF86Launch1)	0x0000 (NoSymbol)	0x1008ff41 (XF86Launch1)	
    157    	0x1008ff42 (XF86Launch2)	0x0000 (NoSymbol)	0x1008ff42 (XF86Launch2)	
    158    	0x1008ff2e (XF86WWW)	0x0000 (NoSymbol)	0x1008ff2e (XF86WWW)	
    159    	0x1008ff5a (XF86DOS)	0x0000 (NoSymbol)	0x1008ff5a (XF86DOS)	
    160    	0x1008ff2d (XF86ScreenSaver)	0x0000 (NoSymbol)	0x1008ff2d (XF86ScreenSaver)	
    161    	0x1008ff74 (XF86RotateWindows)	0x0000 (NoSymbol)	0x1008ff74 (XF86RotateWindows)	
    162    	0x1008ff7f (XF86TaskPane)	0x0000 (NoSymbol)	0x1008ff7f (XF86TaskPane)	
    163    	0x1008ff19 (XF86Mail)	0x0000 (NoSymbol)	0x1008ff19 (XF86Mail)	
    164    	0x1008ff30 (XF86Favorites)	0x0000 (NoSymbol)	0x1008ff30 (XF86Favorites)	
    165    	0x1008ff33 (XF86MyComputer)	0x0000 (NoSymbol)	0x1008ff33 (XF86MyComputer)	
    166    	0x1008ff26 (XF86Back)	0x0000 (NoSymbol)	0x1008ff26 (XF86Back)	
    167    	0x1008ff27 (XF86Forward)	0x0000 (NoSymbol)	0x1008ff27 (XF86Forward)	
    168    	
    169    	0x1008ff2c (XF86Eject)	0x0000 (NoSymbol)	0x1008ff2c (XF86Eject)	
    170    	0x1008ff2c (XF86Eject)	0x1008ff2c (XF86Eject)	0x1008ff2c (XF86Eject)	0x1008ff2c (XF86Eject)	
    171    	0x1008ff17 (XF86AudioNext)	0x0000 (NoSymbol)	0x1008ff17 (XF86AudioNext)	
    172    	0x1008ff14 (XF86AudioPlay)	0x1008ff31 (XF86AudioPause)	0x1008ff14 (XF86AudioPlay)	0x1008ff31 (XF86AudioPause)	
    173    	0x1008ff16 (XF86AudioPrev)	0x0000 (NoSymbol)	0x1008ff16 (XF86AudioPrev)	
    174    	0x1008ff15 (XF86AudioStop)	0x1008ff2c (XF86Eject)	0x1008ff15 (XF86AudioStop)	0x1008ff2c (XF86Eject)	
    175    	0x1008ff1c (XF86AudioRecord)	0x0000 (NoSymbol)	0x1008ff1c (XF86AudioRecord)	
    176    	0x1008ff3e (XF86AudioRewind)	0x0000 (NoSymbol)	0x1008ff3e (XF86AudioRewind)	
    177    	0x1008ff6e (XF86Phone)	0x0000 (NoSymbol)	0x1008ff6e (XF86Phone)	
    178    	
    179    	0x1008ff81 (XF86Tools)	0x0000 (NoSymbol)	0x1008ff81 (XF86Tools)	
    180    	0x1008ff18 (XF86HomePage)	0x0000 (NoSymbol)	0x1008ff18 (XF86HomePage)	
    181    	0x1008ff73 (XF86Reload)	0x0000 (NoSymbol)	0x1008ff73 (XF86Reload)	
    182    	0x1008ff56 (XF86Close)	0x0000 (NoSymbol)	0x1008ff56 (XF86Close)	
    183    	
    184    	
    185    	0x1008ff78 (XF86ScrollUp)	0x0000 (NoSymbol)	0x1008ff78 (XF86ScrollUp)	
    186    	0x1008ff79 (XF86ScrollDown)	0x0000 (NoSymbol)	0x1008ff79 (XF86ScrollDown)	
    187    	0x0028 (parenleft)	0x0000 (NoSymbol)	0x0028 (parenleft)	
    188    	0x0029 (parenright)	0x0000 (NoSymbol)	0x0029 (parenright)	
    189    	0x1008ff68 (XF86New)	0x0000 (NoSymbol)	0x1008ff68 (XF86New)	
    190    	0xff66 (Redo)	0x0000 (NoSymbol)	0xff66 (Redo)	
    191    	0x1008ff81 (XF86Tools)	0x0000 (NoSymbol)	0x1008ff81 (XF86Tools)	
    192    	0x1008ff45 (XF86Launch5)	0x0000 (NoSymbol)	0x1008ff45 (XF86Launch5)	
    193    	0x1008ff46 (XF86Launch6)	0x0000 (NoSymbol)	0x1008ff46 (XF86Launch6)	
    194    	0x1008ff47 (XF86Launch7)	0x0000 (NoSymbol)	0x1008ff47 (XF86Launch7)	
    195    	0x1008ff48 (XF86Launch8)	0x0000 (NoSymbol)	0x1008ff48 (XF86Launch8)	
    196    	0x1008ff49 (XF86Launch9)	0x0000 (NoSymbol)	0x1008ff49 (XF86Launch9)	
    197    	
    198    	0x1008ffb2 (XF86AudioMicMute)	0x0000 (NoSymbol)	0x1008ffb2 (XF86AudioMicMute)	
    199    	0x1008ffa9 (XF86TouchpadToggle)	0x0000 (NoSymbol)	0x1008ffa9 (XF86TouchpadToggle)	
    200    	0x1008ffb0 (XF86TouchpadOn)	0x0000 (NoSymbol)	0x1008ffb0 (XF86TouchpadOn)	
    201    	0x1008ffb1 (XF86TouchpadOff)	0x0000 (NoSymbol)	0x1008ffb1 (XF86TouchpadOff)	
    202    	
    203    	0xff7e (Mode_switch)	0x0000 (NoSymbol)	0xff7e (Mode_switch)	
    204    	0x0000 (NoSymbol)	0xffe9 (Alt_L)	0x0000 (NoSymbol)	0xffe9 (Alt_L)	
    205    	0x0000 (NoSymbol)	0xffe7 (Meta_L)	0x0000 (NoSymbol)	0xffe7 (Meta_L)	
    206    	0x0000 (NoSymbol)	0xffeb (Super_L)	0x0000 (NoSymbol)	0xffeb (Super_L)	
    207    	0x0000 (NoSymbol)	0xffed (Hyper_L)	0x0000 (NoSymbol)	0xffed (Hyper_L)	
    208    	0x1008ff14 (XF86AudioPlay)	0x0000 (NoSymbol)	0x1008ff14 (XF86AudioPlay)	
    209    	0x1008ff31 (XF86AudioPause)	0x0000 (NoSymbol)	0x1008ff31 (XF86AudioPause)	
    210    	0x1008ff43 (XF86Launch3)	0x0000 (NoSymbol)	0x1008ff43 (XF86Launch3)	
    211    	0x1008ff44 (XF86Launch4)	0x0000 (NoSymbol)	0x1008ff44 (XF86Launch4)	
    212    	0x1008ff4b (XF86LaunchB)	0x0000 (NoSymbol)	0x1008ff4b (XF86LaunchB)	
    213    	0x1008ffa7 (XF86Suspend)	0x0000 (NoSymbol)	0x1008ffa7 (XF86Suspend)	
    214    	0x1008ff56 (XF86Close)	0x0000 (NoSymbol)	0x1008ff56 (XF86Close)	
    215    	0x1008ff14 (XF86AudioPlay)	0x0000 (NoSymbol)	0x1008ff14 (XF86AudioPlay)	
    216    	0x1008ff97 (XF86AudioForward)	0x0000 (NoSymbol)	0x1008ff97 (XF86AudioForward)	
    217    	
    218    	0xff61 (Print)	0x0000 (NoSymbol)	0xff61 (Print)	
    219    	
    220    	0x1008ff8f (XF86WebCam)	0x0000 (NoSymbol)	0x1008ff8f (XF86WebCam)	
    221    	
    222    	
    223    	0x1008ff19 (XF86Mail)	0x0000 (NoSymbol)	0x1008ff19 (XF86Mail)	
    224    	0x1008ff8e (XF86Messenger)	0x0000 (NoSymbol)	0x1008ff8e (XF86Messenger)	
    225    	0x1008ff1b (XF86Search)	0x0000 (NoSymbol)	0x1008ff1b (XF86Search)	
    226    	0x1008ff5f (XF86Go)	0x0000 (NoSymbol)	0x1008ff5f (XF86Go)	
    227    	0x1008ff3c (XF86Finance)	0x0000 (NoSymbol)	0x1008ff3c (XF86Finance)	
    228    	0x1008ff5e (XF86Game)	0x0000 (NoSymbol)	0x1008ff5e (XF86Game)	
    229    	0x1008ff36 (XF86Shop)	0x0000 (NoSymbol)	0x1008ff36 (XF86Shop)	
    230    	
    231    	0xff69 (Cancel)	0x0000 (NoSymbol)	0xff69 (Cancel)	
    232    	0x1008ff03 (XF86MonBrightnessDown)	0x0000 (NoSymbol)	0x1008ff03 (XF86MonBrightnessDown)	
    233    	0x1008ff02 (XF86MonBrightnessUp)	0x0000 (NoSymbol)	0x1008ff02 (XF86MonBrightnessUp)	
    234    	0x1008ff32 (XF86AudioMedia)	0x0000 (NoSymbol)	0x1008ff32 (XF86AudioMedia)	
    235    	0x1008ff59 (XF86Display)	0x0000 (NoSymbol)	0x1008ff59 (XF86Display)	
    236    	0x1008ff04 (XF86KbdLightOnOff)	0x0000 (NoSymbol)	0x1008ff04 (XF86KbdLightOnOff)	
    237    	0x1008ff06 (XF86KbdBrightnessDown)	0x0000 (NoSymbol)	0x1008ff06 (XF86KbdBrightnessDown)	
    238    	0x1008ff05 (XF86KbdBrightnessUp)	0x0000 (NoSymbol)	0x1008ff05 (XF86KbdBrightnessUp)	
    239    	0x1008ff7b (XF86Send)	0x0000 (NoSymbol)	0x1008ff7b (XF86Send)	
    240    	0x1008ff72 (XF86Reply)	0x0000 (NoSymbol)	0x1008ff72 (XF86Reply)	
    241    	0x1008ff90 (XF86MailForward)	0x0000 (NoSymbol)	0x1008ff90 (XF86MailForward)	
    242    	0x1008ff77 (XF86Save)	0x0000 (NoSymbol)	0x1008ff77 (XF86Save)	
    243    	0x1008ff5b (XF86Documents)	0x0000 (NoSymbol)	0x1008ff5b (XF86Documents)	
    244    	0x1008ff93 (XF86Battery)	0x0000 (NoSymbol)	0x1008ff93 (XF86Battery)	
    245    	0x1008ff94 (XF86Bluetooth)	0x0000 (NoSymbol)	0x1008ff94 (XF86Bluetooth)	
    246    	0x1008ff95 (XF86WLAN)	0x0000 (NoSymbol)	0x1008ff95 (XF86WLAN)	
    247    	
    248    	
    249    	
    250    	
    251    	
    252    	
    253    	
    254    	0x1008ffb4 (XF86WWAN)	0x0000 (NoSymbol)	0x1008ffb4 (XF86WWAN)	
    255    	0x1008ffb5 (XF86RFKill)	0x0000 (NoSymbol)	0x1008ffb5 (XF86RFKill)	
[spiano@localhost work]$ xmodmap -pke
keycode   8 =
keycode   9 = Escape NoSymbol Escape
keycode  10 = 1 exclam 1 exclam onesuperior exclamdown
keycode  11 = 2 at 2 quotedbl twosuperior oneeighth
keycode  12 = 3 numbersign 3 sterling threesuperior sterling
keycode  13 = 4 dollar 4 dollar EuroSign onequarter
keycode  14 = 5 percent 5 percent onehalf threeeighths
keycode  15 = 6 asciicircum 6 asciicircum threequarters fiveeighths
keycode  16 = 7 ampersand 7 ampersand braceleft seveneighths
keycode  17 = 8 asterisk 8 asterisk bracketleft trademark
keycode  18 = 9 parenleft 9 parenleft bracketright plusminus
keycode  19 = 0 parenright 0 parenright braceright degree
keycode  20 = minus underscore minus underscore backslash questiondown
keycode  21 = equal plus equal plus dead_cedilla dead_ogonek
keycode  22 = BackSpace BackSpace BackSpace BackSpace
keycode  23 = Tab ISO_Left_Tab Tab ISO_Left_Tab
keycode  24 = q Q q Q at Greek_OMEGA
keycode  25 = w W w W lstroke Lstroke
keycode  26 = e E e E e E
keycode  27 = r R r R paragraph registered
keycode  28 = t T t T tslash Tslash
keycode  29 = y Y y Y leftarrow yen
keycode  30 = u U u U downarrow uparrow
keycode  31 = i I i I rightarrow idotless
keycode  32 = o O o O oslash Oslash
keycode  33 = p P p P thorn THORN
keycode  34 = bracketleft braceleft bracketleft braceleft dead_diaeresis dead_abovering
keycode  35 = bracketright braceright bracketright braceright dead_tilde dead_macron
keycode  36 = Return NoSymbol Return
keycode  37 = Control_L NoSymbol Control_L
keycode  38 = a A a A ae AE
keycode  39 = s S s S ssharp section
keycode  40 = d D d D eth ETH
keycode  41 = f F f F dstroke ordfeminine
keycode  42 = g G g G eng ENG
keycode  43 = h H h H hstroke Hstroke
keycode  44 = j J j J dead_hook dead_horn
keycode  45 = k K k K kra ampersand
keycode  46 = l L l L lstroke Lstroke
keycode  47 = semicolon colon semicolon colon dead_acute dead_doubleacute
keycode  48 = apostrophe quotedbl apostrophe at dead_circumflex dead_caron
keycode  49 = grave asciitilde grave notsign bar bar
keycode  50 = Shift_L NoSymbol Shift_L
keycode  51 = backslash bar numbersign asciitilde dead_grave dead_breve
keycode  52 = z Z z Z guillemotleft less
keycode  53 = x X x X guillemotright greater
keycode  54 = c C c C cent copyright
keycode  55 = v V v V leftdoublequotemark leftsinglequotemark
keycode  56 = b B b B rightdoublequotemark rightsinglequotemark
keycode  57 = n N n N n N
keycode  58 = m M m M mu masculine
keycode  59 = comma less comma less horizconnector multiply
keycode  60 = period greater period greater periodcentered division
keycode  61 = slash question slash question dead_belowdot dead_abovedot
keycode  62 = Shift_R NoSymbol Shift_R
keycode  63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply XF86ClearGrab KP_Multiply KP_Multiply XF86ClearGrab
keycode  64 = Alt_L Meta_L Alt_L Meta_L
keycode  65 = space NoSymbol space
keycode  66 = Caps_Lock NoSymbol Caps_Lock
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10 F10 F10 XF86Switch_VT_10
keycode  77 = Num_Lock NoSymbol Num_Lock
keycode  78 = Scroll_Lock NoSymbol Scroll_Lock
keycode  79 = KP_Home KP_7 KP_Home KP_7
keycode  80 = KP_Up KP_8 KP_Up KP_8
keycode  81 = KP_Prior KP_9 KP_Prior KP_9
keycode  82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract XF86Prev_VMode KP_Subtract KP_Subtract XF86Prev_VMode
keycode  83 = KP_Left KP_4 KP_Left KP_4
keycode  84 = KP_Begin KP_5 KP_Begin KP_5
keycode  85 = KP_Right KP_6 KP_Right KP_6
keycode  86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode KP_Add KP_Add XF86Next_VMode
keycode  87 = KP_End KP_1 KP_End KP_1
keycode  88 = KP_Down KP_2 KP_Down KP_2
keycode  89 = KP_Next KP_3 KP_Next KP_3
keycode  90 = KP_Insert KP_0 KP_Insert KP_0
keycode  91 = KP_Delete KP_Decimal KP_Delete KP_Decimal
keycode  92 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift
keycode  93 =
keycode  94 = less greater backslash bar bar brokenbar bar brokenbar
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12 F12 F12 XF86Switch_VT_12
keycode  97 =
keycode  98 = Katakana NoSymbol Katakana
keycode  99 = Hiragana NoSymbol Hiragana
keycode 100 = Henkan_Mode NoSymbol Henkan_Mode
keycode 101 = Hiragana_Katakana NoSymbol Hiragana_Katakana
keycode 102 = Muhenkan NoSymbol Muhenkan
keycode 103 =
keycode 104 = KP_Enter NoSymbol KP_Enter
keycode 105 = Control_R NoSymbol Control_R
keycode 106 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide XF86Ungrab KP_Divide KP_Divide XF86Ungrab
keycode 107 = Print Sys_Req Print Sys_Req
keycode 108 = Alt_R Meta_R ISO_Level3_Shift Multi_key
keycode 109 = Linefeed NoSymbol Linefeed
keycode 110 = Home NoSymbol Home
keycode 111 = Up NoSymbol Up
keycode 112 = Prior NoSymbol Prior
keycode 113 = Left NoSymbol Left
keycode 114 = Right NoSymbol Right
keycode 115 = End NoSymbol End
keycode 116 = Down NoSymbol Down
keycode 117 = Next NoSymbol Next
keycode 118 = Insert NoSymbol Insert
keycode 119 = Delete NoSymbol Delete
keycode 120 =
keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 124 = XF86PowerOff NoSymbol XF86PowerOff
keycode 125 = KP_Equal NoSymbol KP_Equal
keycode 126 = plusminus NoSymbol plusminus
keycode 127 = Pause Break Pause Break
keycode 128 = XF86LaunchA NoSymbol XF86LaunchA
keycode 129 = KP_Decimal KP_Decimal KP_Decimal KP_Decimal
keycode 130 = Hangul NoSymbol Hangul
keycode 131 = Hangul_Hanja NoSymbol Hangul_Hanja
keycode 132 =
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R
keycode 135 = Menu NoSymbol Menu
keycode 136 = Cancel NoSymbol Cancel
keycode 137 = Redo NoSymbol Redo
keycode 138 = SunProps NoSymbol SunProps
keycode 139 = Undo NoSymbol Undo
keycode 140 = SunFront NoSymbol SunFront
keycode 141 = XF86Copy NoSymbol XF86Copy
keycode 142 = XF86Open NoSymbol XF86Open
keycode 143 = XF86Paste NoSymbol XF86Paste
keycode 144 = Find NoSymbol Find
keycode 145 = XF86Cut NoSymbol XF86Cut
keycode 146 = Help NoSymbol Help
keycode 147 = XF86MenuKB NoSymbol XF86MenuKB
keycode 148 = XF86Calculator NoSymbol XF86Calculator
keycode 149 =
keycode 150 = XF86Sleep NoSymbol XF86Sleep
keycode 151 = XF86WakeUp NoSymbol XF86WakeUp
keycode 152 = XF86Explorer NoSymbol XF86Explorer
keycode 153 = XF86Send NoSymbol XF86Send
keycode 154 =
keycode 155 = XF86Xfer NoSymbol XF86Xfer
keycode 156 = XF86Launch1 NoSymbol XF86Launch1
keycode 157 = XF86Launch2 NoSymbol XF86Launch2
keycode 158 = XF86WWW NoSymbol XF86WWW
keycode 159 = XF86DOS NoSymbol XF86DOS
keycode 160 = XF86ScreenSaver NoSymbol XF86ScreenSaver
keycode 161 = XF86RotateWindows NoSymbol XF86RotateWindows
keycode 162 = XF86TaskPane NoSymbol XF86TaskPane
keycode 163 = XF86Mail NoSymbol XF86Mail
keycode 164 = XF86Favorites NoSymbol XF86Favorites
keycode 165 = XF86MyComputer NoSymbol XF86MyComputer
keycode 166 = XF86Back NoSymbol XF86Back
keycode 167 = XF86Forward NoSymbol XF86Forward
keycode 168 =
keycode 169 = XF86Eject NoSymbol XF86Eject
keycode 170 = XF86Eject XF86Eject XF86Eject XF86Eject
keycode 171 = XF86AudioNext NoSymbol XF86AudioNext
keycode 172 = XF86AudioPlay XF86AudioPause XF86AudioPlay XF86AudioPause
keycode 173 = XF86AudioPrev NoSymbol XF86AudioPrev
keycode 174 = XF86AudioStop XF86Eject XF86AudioStop XF86Eject
keycode 175 = XF86AudioRecord NoSymbol XF86AudioRecord
keycode 176 = XF86AudioRewind NoSymbol XF86AudioRewind
keycode 177 = XF86Phone NoSymbol XF86Phone
keycode 178 =
keycode 179 = XF86Tools NoSymbol XF86Tools
keycode 180 = XF86HomePage NoSymbol XF86HomePage
keycode 181 = XF86Reload NoSymbol XF86Reload
keycode 182 = XF86Close NoSymbol XF86Close
keycode 183 =
keycode 184 =
keycode 185 = XF86ScrollUp NoSymbol XF86ScrollUp
keycode 186 = XF86ScrollDown NoSymbol XF86ScrollDown
keycode 187 = parenleft NoSymbol parenleft
keycode 188 = parenright NoSymbol parenright
keycode 189 = XF86New NoSymbol XF86New
keycode 190 = Redo NoSymbol Redo
keycode 191 = XF86Tools NoSymbol XF86Tools
keycode 192 = XF86Launch5 NoSymbol XF86Launch5
keycode 193 = XF86Launch6 NoSymbol XF86Launch6
keycode 194 = XF86Launch7 NoSymbol XF86Launch7
keycode 195 = XF86Launch8 NoSymbol XF86Launch8
keycode 196 = XF86Launch9 NoSymbol XF86Launch9
keycode 197 =
keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute
keycode 199 = XF86TouchpadToggle NoSymbol XF86TouchpadToggle
keycode 200 = XF86TouchpadOn NoSymbol XF86TouchpadOn
keycode 201 = XF86TouchpadOff NoSymbol XF86TouchpadOff
keycode 202 =
keycode 203 = Mode_switch NoSymbol Mode_switch
keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
keycode 205 = NoSymbol Meta_L NoSymbol Meta_L
keycode 206 = NoSymbol Super_L NoSymbol Super_L
keycode 207 = NoSymbol Hyper_L NoSymbol Hyper_L
keycode 208 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 209 = XF86AudioPause NoSymbol XF86AudioPause
keycode 210 = XF86Launch3 NoSymbol XF86Launch3
keycode 211 = XF86Launch4 NoSymbol XF86Launch4
keycode 212 = XF86LaunchB NoSymbol XF86LaunchB
keycode 213 = XF86Suspend NoSymbol XF86Suspend
keycode 214 = XF86Close NoSymbol XF86Close
keycode 215 = XF86AudioPlay NoSymbol XF86AudioPlay
keycode 216 = XF86AudioForward NoSymbol XF86AudioForward
keycode 217 =
keycode 218 = Print NoSymbol Print
keycode 219 =
keycode 220 = XF86WebCam NoSymbol XF86WebCam
keycode 221 =
keycode 222 =
keycode 223 = XF86Mail NoSymbol XF86Mail
keycode 224 = XF86Messenger NoSymbol XF86Messenger
keycode 225 = XF86Search NoSymbol XF86Search
keycode 226 = XF86Go NoSymbol XF86Go
keycode 227 = XF86Finance NoSymbol XF86Finance
keycode 228 = XF86Game NoSymbol XF86Game
keycode 229 = XF86Shop NoSymbol XF86Shop
keycode 230 =
keycode 231 = Cancel NoSymbol Cancel
keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
keycode 234 = XF86AudioMedia NoSymbol XF86AudioMedia
keycode 235 = XF86Display NoSymbol XF86Display
keycode 236 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp
keycode 239 = XF86Send NoSymbol XF86Send
keycode 240 = XF86Reply NoSymbol XF86Reply
keycode 241 = XF86MailForward NoSymbol XF86MailForward
keycode 242 = XF86Save NoSymbol XF86Save
keycode 243 = XF86Documents NoSymbol XF86Documents
keycode 244 = XF86Battery NoSymbol XF86Battery
keycode 245 = XF86Bluetooth NoSymbol XF86Bluetooth
keycode 246 = XF86WLAN NoSymbol XF86WLAN
keycode 247 =
keycode 248 =
keycode 249 =
keycode 250 =
keycode 251 =
keycode 252 =
keycode 253 =
keycode 254 = XF86WWAN NoSymbol XF86WWAN
keycode 255 = XF86RFKill NoSymbol XF86RFKill
Key items:
keycode  37 = Control_L NoSymbol Control_L
and
keycode  66 = Caps_Lock NoSymbol Caps_Lock
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Hm. Looks like there's a "control" modifier to which both Control_L and Control_R are mapped. Presumably, Control_L = Left Control Key and Control_R = Right Control Key.
I'll look at the man page (via running
man xmodmap
). Excerpts from the man page:
NAME
       xmodmap  - utility for modifying keymaps and pointer button mappings in
       X
SYNOPSIS
       xmodmap [-options ...] [filename]
DESCRIPTION
       The xmodmap 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.  It is usually run from the user's session
       startup script to configure the keyboard according to personal tastes.
OPTIONS
[...]
       -n      This  option  indicates that xmodmap should not change the map-
               pings, but should display what it would do, like  make(1)  does
               when given this option.
       -e expression
               This option specifies an expression to be executed.  Any number
               of expressions may be specified from the command line.
[...]
       -pk     This option indicates that the current keymap table  should  be
               printed on the standard output.
       -pke    This  option  indicates that the current keymap table should be
               printed on the standard output in the form of expressions  that
               can be fed back to xmodmap.
[...]
       The filename specifies a file containing xmodmap expressions to be exe-
       cuted.  This file is usually kept in the user's home directory  with  a
       name like .xmodmaprc.
EXPRESSION GRAMMAR
       The  xmodmap  program  reads  a list of expressions and parses them all
       before attempting to execute any of them.  This makes  it  possible  to
       refer to keysyms that are being redefined in a natural way without hav-
       ing to worry as much about name conflicts.
       The  list  of  keysym  names  may  be  found   in   the   header   file
       <X11/keysymdef.h>  (without the XK_ prefix), supplemented by the keysym
       database  /usr/share/X11/XKeysymDB.  Keysyms matching  Unicode  charac-
       ters  may  be  specified as "U0020" to "U007E" and "U00A0" to "U10FFFF"
       for all possible Unicode characters.
       
       keycode NUMBER = KEYSYMNAME ...
               The list of keysyms is assigned to the indicated keycode (which
               may be specified in decimal, hex or octal and can be determined
               by running the xev  program).   Up  to  eight  keysyms  may  be
               attached  to  a  key, however the last four are not used in any
               major X server implementation.  The first keysym is  used  when
               no  modifier  key  is pressed in conjunction with this key, the
               second with Shift, the third when the Mode_switch key  is  used
               with  this  key  and  the  fourth when both the Mode_switch and
               Shift keys are used.
[...]
       keysym KEYSYMNAME = KEYSYMNAME ...
               The  KEYSYMNAME on the left hand side is translated into match-
               ing keycodes used to perform the corresponding set  of  keycode
               expressions.  Note that if the same keysym is bound to multiple
               keys, the expression is executed for each matching keycode.
       clear MODIFIERNAME
               This removes all entries in the modifier map for the given mod-
               ifier,  where valid name are: Shift, Lock, Control, Mod1, Mod2,
               Mod3, Mod4, and Mod5 (case does not matter in  modifier  names,
               although  it  does  matter  for all other names).  For example,
               ``clear Lock'' will remove all any keys that were bound to  the
               shift lock modifier.
       add MODIFIERNAME = KEYSYMNAME ...
               This  adds  all  keys containing the given keysyms to the indi-
               cated modifier map.  The keysym names are evaluated  after  all
               input expressions are read to make it easy to write expressions
               to swap keys (see the EXAMPLES section).
       remove MODIFIERNAME = KEYSYMNAME ...
               This removes all keys containing the  given  keysyms  from  the
               indicated modifier map.  Unlike add, the keysym names are eval-
               uated as the line is read in.  This allows you to  remove  keys
               from  a  modifier  without having to worry about whether or not
               they have been reassigned.
[...]
       Lines that begin with an exclamation point (!) are taken as comments.
       If  you  want  to  change  the binding of a modifier key, you must also
       remove it from the appropriate modifier map.
EXAMPLES
       Many pointers are designed such that the first button is pressed  using
       the  index  finger  of the right hand.  People who are left-handed fre-
       quently find that it is more comfortable to reverse  the  button  codes
       that  get  generated  so  that  the primary button is pressed using the
       index finger of the left hand.  This  could  be  done  on  a  3  button
       pointer as follows:
       %  xmodmap -e "pointer = 3 2 1"
[...]
       One  of  the more irritating differences between keyboards is the loca-
       tion of the Control and CapsLock keys.  A common use of xmodmap  is  to
       swap these two keys as follows:
       !
       ! Swap Caps_Lock and Control_L
       !
       remove Lock = Caps_Lock
       remove Control = Control_L
       keysym Control_L = Caps_Lock
       keysym Caps_Lock = Control_L
       add Lock = Caps_Lock
       add Control = Control_L
       This  example  can be run again to swap the keys back to their previous
       assignments.
       The keycode command is useful for assigning the same keysym to multiple
       keycodes.   Although  unportable,  it  also  makes it possible to write
       scripts that can reset the keyboard to a known  state.   The  following
       script  sets  the  backspace  key  to generate Delete (as shown above),
       flushes all existing caps lock bindings, makes the CapsLock  key  be  a
       control  key, make F5 generate Escape, and makes Break/Reset be a shift
       lock.
       !
       ! On the HP, the following keycodes have key caps as listed:
       !
       !     101  Backspace
       !      55  Caps
       !      14  Ctrl
       !      15  Break/Reset
       !      86  Stop
       !      89  F5
       !
       keycode 101 = Delete
       keycode 55 = Control_R
       clear Lock
       add Control = Control_R
       keycode 89 = Escape
       keycode 15 = Caps_Lock
       add Lock = Caps_Lock
[...]
AUTHOR
       Jim  Fulton,  MIT  X  Consortium,  rewritten from an earlier version by
       David Rosenthal of Sun Microsystems.
Notes:
- "pointer" here refers to a mouse or a similar tool.
- the xmodmap program parses all the expressions first before attempting to execute any of them.
- can put a list of xmodmap expressions into a file called .xmodmaprc and save it in the user's home directory. 1 expression per line.
- Lines that begin with an exclamation point (!) are taken as comments.
-
clear Lock
 will remove all keys that are bound to the shift lock modifier (currently, this is the Caps Lock key).  - Each physical key has a keycode (a numeric value). This keycode has an associated list of keysymbols (keysyms). Keysyms represent numeric character values. The first keysym is used when no modifier key is pressed in conjunction with this key, the second with Shift, the third when the Mode_switch key is used with this key, and the fourth when both the Mode_switch and Shift keys are used.
I'm not going to use the given example for swapping the Control and Caps Lock keys. I want to specifically set the physical keys to Control and Caps Lock, and I want to specify that this alteration will occur on login (i.e. in .xmodmaprc).
Suggestion from:
stackoverflow.com/questions/2176532/how-to-map-caps-lock-key-in-vim
Author: Dan Andreatta
Date: Feb 1 '10
- The command
xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
 will map Esc to the Caps Lock key. From earlier:
- keycode 37 is currently Control_L
- keycode 66 is currently Caps_Lock
Escape is not one of the special modifiers.
[spiano@localhost work]$ xmodmap -e 'clear Lock' -e 'keycode 0x37 = Caps_Lock' -e 'keycode 0x66 = Control_L'
Hm. Didn't work.
Ah. I specified hex numbers, not decimal ones. The character 'v' is now a Caps Lock that won't turn back off. I'm using Right-Click + Paste instead of Control-V.
Scroll back up, find the original values for 0x37 and 0x66.
     16    	0x0037 (7)	0x0026 (ampersand)	0x0037 (7)	0x0026 (ampersand)	0x007b (braceleft)	0x0ac6 (seveneighths)	
     41    	0x0066 (f)	0x0046 (F)	0x0066 (f)	0x0046 (F)	0x01f0 (dstroke)	0x00aa (ordfeminine)	
     
[...]
keycode  55 = v V v V leftdoublequotemark leftsinglequotemark
Hm. The 'f' key works fine. 'F'.
The & key works. '7'.
Caps Lock still works. Also turns off.
Control_L still works.
Run
xmodmap -pke
to see the keycode-to-keysym mapping.
I note that:
- keycode 37 = Control_L NoSymbol Control_L
- keycode 55 = Caps_Lock
- keycode 66 = Caps_Lock NoSymbol Caps_Lock
- keycode 102 = Control_L NoSymbol Control_L
From earlier, these used to be:
- keycode 37 = Control_L NoSymbol Control_L
- keycode 55 = v V v V leftdoublequotemark leftsinglequotemark
- keycode 66 = Caps_Lock NoSymbol Caps_Lock
- keycode 102 = Muhenkan NoSymbol Muhenkan
[spiano@localhost work]$ xmodmap -e 'keycode 55 = v V v V leftdoublequotemark leftsinglequotemark'
Run
xmodmap -pke
to see the keycode-to-keysym mapping.
I see that:
- keycode 55 = v V v V leftdoublequotemark leftsinglequotemark
Control-V now works properly again.
[spiano@localhost work]$ xmodmap -e 'keycode 102 = Muhenkan NoSymbol Muhenkan'
Run
xmodmap -pke
to see the keycode-to-keysym mapping.
I see that:
- keycode 102 = Muhenkan NoSymbol Muhenkan
Future: Where do the original keysym settings come from? How might one find out all the possible keysym names?
- Ah. From the man page excerpts:
The  list  of  keysym  names  may  be  found   in   the   header   file
       <X11/keysymdef.h>  (without the XK_ prefix), supplemented by the keysym
       database  /usr/share/X11/XKeysymDB.
Let's try again.
Original settings:
From earlier, these used to be:
- keycode 37 = Control_L NoSymbol Control_L
- keycode 66 = Caps_Lock NoSymbol Caps_Lock
[spiano@localhost work]$ xmodmap -e 'keycode 37 = Caps_Lock NoSymbol Caps_Lock' -e 'keycode 66 = Control_L NoSymbol Control_L'
Run
xmodmap -pke
to see the keycode-to-keysym mapping.
I see that:
- keycode 37 = Caps_Lock NoSymbol Caps_Lock
- keycode 66 = Control_L NoSymbol Control_L
Hm. Control_L works as a Caps Lock. Toggles on and off. But Caps Lock key does not work as Control. Let's check the modifier map.
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Caps_Lock (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Hm.
Result from earlier:
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Let's experiment.
[spiano@localhost work]$ xmodmap -e 'remove Control = Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Caps_Lock (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost work]$ xmodmap -e 'remove Control = Caps_Lock'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost work]$ xmodmap -e 'add Control = Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Ah. Works now. So: Because I mapped the physical Caps_Lock key to the Control_L keysym, and the physical Control_L key to the Caps_Lock keysym, somehow the modifier map was altered. I then had to change the "control" modifier list by removing the Caps_Lock keysym and adding the Control_L keysym. For some reason, the physical Control_L key works fine as the Caps_Lock keysym without being present in the modifier map.
Now: I'll power cycle Shovel, and check that the original keyboard settings are restored.
Shovel turned off and on again.
Yup. Original settings for Caps Lock and Control_L have been restored.
Thoughts: When remapping keys,
- Back up any data on the computer before starting. You could make the computer unusable and have to reinstall the entire operating system.
- Archive key settings before starting.
- Plan out the changes and commands.
- Plan out the tests for success/failure before executing the changes.
- Change one key at a time, testing as you go.
I've backed up the data on Shovel.
Next: Archive current key settings. (These are the original key settings.)
From the excerpts from the man page, I know that the -pke option for the
xmodmap
 command indicates that:"the current keymap table should be printed on the standard output in the form of expressions that can be fed back to xmodmap."
So: Using this option, I can produce an archive of the current key settings.
I should also test that restoring the archive works.
[spiano@localhost work]$ xmodmap -pke > key_settings.txt
[spiano@localhost work]$ head -10 key_settings.txt
 keycode   8 =
keycode   9 = Escape NoSymbol Escape
keycode  10 = 1 exclam 1 exclam onesuperior exclamdown
keycode  11 = 2 at 2 quotedbl twosuperior oneeighth
keycode  12 = 3 numbersign 3 sterling threesuperior sterling
keycode  13 = 4 dollar 4 dollar EuroSign onequarter
keycode  14 = 5 percent 5 percent onehalf threeeighths
keycode  15 = 6 asciicircum 6 asciicircum threequarters fiveeighths
keycode  16 = 7 ampersand 7 ampersand braceleft seveneighths
keycode  17 = 8 asterisk 8 asterisk bracketleft trademark
Cool.
I'll change a setting. Then I'll restore from archive.
I'll map F5 to 'a'.
In the output of
xmodmap -pke
 I find that:- keycode 38 = a A a A ae AE
- keycode 71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
[spiano@localhost work]$ xmodmap -e 'keycode 71 = a A b'
Ok:
- F5 key now produces 'a'
- Shift + F5 now produces 'A'.
- However, Alt + F5 does not produce 'b'. I had thought the "Mode_switch key" in the man page referred to Alt.
-- It might refer to Option, but Option + F5 currently performs a splashy GUI display operation, which presumably takes precedence (assuming that Mode_switch key == Option).
In the output of
xmodmap -pke
 I find that:- keycode 71 = a A b B
Now, let's restore.
[spiano@localhost work]$ xmodmap key_settings.txt 
Computer input (keyboard, mouse) jammed for about 10-15 seconds while the command was running.
In the output of
xmodmap -pke
 I find that:- keycode 71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
- everything else in the output looks as expected, plus I can type these notes without any trouble.
Next: I'll try to execute a change on boot.
[spiano@localhost work]$ ls -1a ~
.
..
.bash_history
.bash_logout
.bash_profile
.bashrc
.cache
.config
core.5594
.dbus
Desktop
Documents
Downloads
.esd_auth
.gnupg
.ICEauthority
.lesshst
.local
.mozilla
Music
Pictures
.pki
Public
.ssh
stuff
Templates
Videos
.viminfo
No .xmodmaprc file currently exists in the home directory.
Data for .xmodmaprc:
keycode 71 = a A
change to home directory:
create .xmodmaprc:
keycode 71 = a A
[spiano@localhost work]$ cd ~
create .xmodmaprc:
[spiano@localhost ~]$ touch .xmodmaprc
edit .xmodmaprc:
[spiano@localhost ~]$ vim .xmodmaprc
[spiano@localhost ~]$ vim .xmodmaprc
print .xmodmaprc:
[spiano@localhost ~]$ cat .xmodmaprc
[spiano@localhost ~]$ cat .xmodmaprc
keycode 71 = a A
Currently, F5 produces nothing.
I'll test that running the command
xmodmap .xmodmaprc
 in the home directory sets F5 to produce 'a'. 
[spiano@localhost work]$ xmodmap .xmodmaprc
aaa.
Yup, F5 now produces 'a'.
Next: Place the command
xmodmap .xmodmaprc
 in my user's startup script (which is run when I log in). I know from previous experience that:
- .bash_profile
- .bashrc
are involved in the Bash shell startup process.
[some searching occurs here]
Source:
www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
Author: Josh Staiger
Title: .bash_profile vs .bashrc
What is a login or non-login shell?
When you login (type username and password) via console, either sitting at the machine, or remotely via ssh:.bash_profileis executed to configure your shell before the initial command prompt.
But, if you've already logged into your machine and open a new terminal window (xterm) inside Gnome or KDE, then.bashrcis executed before the window command prompt..bashrcis also run when you start a new bash instance by typing/bin/bashin a terminal.
Why two different files?
Say, you'd like to print some lengthy diagnostic information about your machine each time you login (load average, memory usage, current users, etc). You only want to see it on login, so you only want to place this in your.bash_profile. If you put it in your.bashrc, you'd see it every time you open a new terminal window.
Ok. I'll use .bash_profile. I only need keycodes to be set once, when I log in.
Looking in my .bash_profile, I note that it loads .bashrc as part of its operation anyway.
So: Add this line:
xmodmap .xmodmaprc
at the end of ~/.bash_profile.
[spiano@localhost ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
xmodmap .xmodmaprc
Next: Power cycle Shovel. See if F5 has been set to produce 'a'.
Power cycle done. Log in.
Nope. F5 does not produce any character.
Hm. Open a terminal.
Still nope.
[spiano@localhost ~]$ source .bash_profile
Yup. Now it does. Hm.
Ah. Evidently the GUI login on CentOS doesn't run the .bash_profile file.
On skimming through the previous article
New computer: Shovel
I find:
In the Software Selection interface, I have chosen:
- GNOME Desktop
[some searching occurs here]
Source:
access.redhat.com/discussions/1342633
Title: GNOME logins dont run .bash_profile in RHEL7
Author: Robert Krátký
Date: 6 February 2015 3:47 PM
The~/.bash_profilefile is (should) only be sourced when Bash is started in interactive, login mode. When you're logging in graphically (using GDM or other display manager), the script that launches the session sources the~/.profilefile.
CentOS 7 is downstream from RHEL7, so this will probably work.
Data for
~/.profile
:# .profile
if [ -f ~/.bash_profile ]; then
	. ~/.bash_profile
fi
Create ~/.profile and copy this data into it.
[spiano@localhost ~]$ vim .profile
[spiano@localhost ~]$ cat .profile
# .profile
if [ -f ~/.bash_profile ]; then
	. ~/.bash_profile
fi
This means that:
- .bashrc is run when each new shell is created (when you're already logged in)
- .bash_profile is the login script (run once when you log in)
- .profile is the GUI login script for GNOME (run once when you log in via the CentOS GUI).
Let's see if it works.
Power cycle done. Log in.
Nope. F5 does not produce any character.
Open a terminal.
Still nope.
Hm.
In Applications / System Tools / Settings / Details / About, I find:
- Gnome Version 3.28.2
Source:
unix.stackexchange.com/questions/172179/gnome-shell-running-shell-script-after-session-starts
edited Aug 23 '17 at 21:08
Drew Barrett
answered Dec 8 '14 at 22:23
Marcelo
You can use the program gnome-session-properties. Just execute it from your shell prompt (gnome-terminal):
$ gnome-session-properties
This will open a GUI where you can configure (i.e., add, edit, remove, enable and disable) startup programs.
Nice and easy. Enjoy.
Update: As noted by don_crissti (thanks) in the comments below, the gnome-session-properties startup programs functionality has migrated to gnome-tweak-tool since Gnome 3.12 (which btw is a great tool, but a little messier as it concentrates just too many functions). So, for versions 3.12 and above, this is the new place to look.
OBS: And btw, using this method, you don't need to create a .desktop file, you can simply specify the command line of the /home/neko/bin/auto_stuff.sh script you created (or any other script or command you want).
Run
gnome-session-properties
.It opens up a GUI program called "Startup Applications Preferences". It does indeed appear to allow a user to set programs to run on startup.
Can't see invisible files (e.g. .profile) in this GUI program.
Rename .profile to GNOME_login_bash_script.sh.
[spiano@localhost ~]$ mv .profile GNOME_login_bash_script.sh
Click Add:
- Name: GNOME_login_bash_script.sh
- Command: /home/spiano/GNOME_login_bash_script.sh
- Comment: Run bash script on login
Let's see if this works.
Power cycle done. Log in.
Nope. F5 does not produce any character.
Open a terminal. Still nope.
Edit GNOME_login_bash_script.sh so that it uses absolute paths.
[spiano@localhost ~]$ pwd
/home/spiano
[spiano@localhost ~]$ vim GNOME_login_bash_script.sh
[spiano@localhost ~]$ cat GNOME_login_bash_script.sh
# .profile
if [ -f /home/spiano/.bash_profile ]; then
	. /home/spiano/.bash_profile
fi
Let's see if this works.
Power cycle done. Log in.
No. F5 does not produce any character. Open a terminal. No.
My GNOME version (3.28.2) is greater than the one mentioned in the excerpt above (3.12).
I'll try
gnome-tweak-tool
. 
[spiano@localhost ~]$ gnome-tweak-tool
bash: gnome-tweak-tool: command not found...
Hm.
On running
gnome-session-properties
 again, and looking at the list of Startup Programs, I don't find my script listed. 
[spiano@localhost ~]$ vim GNOME_login_bash_script.sh 
[spiano@localhost ~]$ cat GNOME_login_bash_script.sh 
if [ -f /home/spiano/.xmodmaprc ]; then
	xmodmap /home/spiano/.xmodmaprc
fi
Run
gnome-session-properties
. In the "Startup Applications Preferences" GUI program, click Add:- Name: GNOME_login_bash_script
- Command: /home/spiano/GNOME_login_bash_script.sh
- Comment: Run bash script on login
Click Close.
Run
gnome-session-properties
. In the "Startup Applications Preferences" GUI program, look through the list. - GNOME_login_bash_script is not present.
Try without underscores (the other names don't have underscores).
Run
gnome-session-properties
. In the "Startup Applications Preferences" GUI program, click Add:- Name: GNOME login bash script
- Command: /home/spiano/GNOME_login_bash_script.sh
- Comment: Run bash script on login
Click Close.
Run
gnome-session-properties
. In the "Startup Applications Preferences" GUI program, look through the list. - "GNOME login bash script" is not present.
Source:
ubuntuforums.org/showthread.php?t=1067101
Author: d2globalinc
HOWTO: Disable or Enable Gnome Session Startup Applications from Command Line
- As usual I am not responsible for you screwing up your install by using these instructions the wrong way! -
So I looked around, and just couldn't find out how to do this without using the GUI (Which by the way is SYSTEM->PREFERENCES->SESSIONS)
It looks like by default session startup options are located in the following directories:
/usr/share/gnome/autostart/
/usr/share/autostart/
/etc/xdg/autostart/
and then every user can have their own autostart options located in
~/.config/autostart/
(the above translates to: /home/<username>/.config/autostart/ )
So if you want to disable a startup option from command line you would just open a terminal window and remove or as I perfer - rename - the startup options corrisponding .desktop file. For example, to disable the check for new hardware on every login for every user - you could do this:
- Open a terminal window
- do the following:
Code:
sudo mv /etc/xdg/autostart/jockey-gtk.desktop /etc/xdg/autostart/jockey-gtk.orig
This will rename the jockey-gtk.desktop file (which is the New Hardware Detection Application in Ubuntu) to jockey-gtk.orig - which will disable it from starting up for all users when they login. Which was something I needed to do on a current project.
Anyway - I looked around, and I found methods for disabling startup services using the "sysv-rc-conf" package, but it was much harder to find any information about how to disable Gnome Session Startup applications without using the GUI - which was not an option for me in this case.
Hope this helps others!
Enjoy!
Shane Menshik
D2 GLOBAL INC
http://www.d2global.com
[spiano@localhost ~]$ ls -a1
.
..
.bash_history
.bash_logout
.bash_profile
.bashrc
.cache
.config
core.5594
.dbus
Desktop
Documents
Downloads
.esd_auth
GNOME_login_bash_script.sh
.gnupg
.ICEauthority
.lesshst
.local
.mozilla
Music
Pictures
.pki
Public
.ssh
stuff
Templates
Videos
.viminfo
.xmodmaprc
[spiano@localhost ~]$ file .config
.config: directory
[spiano@localhost ~]$ ls -1 .config
abrt
autostart
dconf
dleyna-server-service.conf
enchant
eog
evolution
gconf
gedit
gnome-boxes
gnome-control-center
gnome-initial-setup-done
gnome-session
goa-1.0
gtk-3.0
ibus
imsettings
libreoffice
mimeapps.list
nautilus
pulse
sealert.conf
totem
user-dirs.dirs
user-dirs.locale
vlc
yelp
[spiano@localhost ~]$ ls -1 .config/autostart
GNOME_login_bash_script.sh.desktop
sealertauto.desktop
[spiano@localhost ~]$ cat .config/autostart/GNOME_login_bash_script.sh.desktop
[Desktop Entry]
Type=Application
Exec=/home/spiano/GNOME_login_bash_script.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_GB]=GNOME login bash script
Name=GNOME_login_bash_script.sh
Comment[en_GB]=Run bash script on login
Comment=Run bash script on login
Hm.
[spiano@localhost ~]$ cat GNOME_login_bash_script.sh
if [ -f /home/spiano/.xmodmaprc ]; then
	xmodmap /home/spiano/.xmodmaprc
fi
[spiano@localhost ~]$ ls -l GNOME_login_bash_script.sh
-rw-rw-r--. 1 spiano spiano 76 Mar 29 19:13 GNOME_login_bash_script.sh
[spiano@localhost ~]$ cat .config/autostart/sealertauto.desktop
[Desktop Entry]
Name=SELinux Troubleshooter
Exec=/usr/bin/seapplet
Comment=View & interpret SELinux denials
Encoding=UTF-8
Type=Application
StartupNotify=false
X-KDE-autostart-after=panel
Icon=setroubleshoot_icon
X-GNOME-Autostart-enabled=false
[spiano@localhost ~]$ ls -l /usr/bin/seapplet
-rwxr-xr-x. 1 root root 20240 Nov 2 16:12 /usr/bin/seapplet
Hm.
[spiano@localhost ~]$ mv .config/autostart/GNOME_login_bash_script.sh.desktop .config/autostart/GNOME_login_bash_script.desktop
[spiano@localhost ~]$ which bash
/usr/bin/bash
[spiano@localhost ~]$ vim GNOME_login_bash_script.sh
[spiano@localhost ~]$ cat GNOME_login_bash_script.sh
#!/usr/bin/bash
if [ -f /home/spiano/.xmodmaprc ]; then
	xmodmap /home/spiano/.xmodmaprc
fi
[spiano@localhost ~]$ chmod 744 GNOME_login_bash_script.sh
[spiano@localhost ~]$ ls -l GNOME_login_bash_script.sh
-rwxr--r--. 1 spiano spiano 92 Mar 29 19:47 GNOME_login_bash_script.sh
Let's see if this works.
Power cycle done. Log in.
Yes. F5 produces 'a'.
aaaaaaaaaaaaaaaaaaaa.
Cool.
Shift-F5?
AAAAAA.
Yup, produces 'A'.
Open a terminal. In terminal, F5 produces 'a' and Shift-F5 produces 'A'.
[spiano@localhost ~]$ ls -l .config/autostart/GNOME_login_bash_script.desktop
-rw-rw-r--. 1 spiano spiano 279 Mar 29 19:18 .config/autostart/GNOME_login_bash_script.desktop
Run
gnome-session-properties
. In the "Startup Applications Preferences" GUI program, look through the list. - "GNOME login bash script" is present.
Excellent.
Evidently the permissions for the file GNOME_login_bash_script.sh were the problem. It didn't have "execute" permission, even from its owner (spiano).
I don't know if the name of the autostart file made any difference i.e. changing it from
GNOME_login_bash_script.sh.desktop
to
GNOME_login_bash_script.desktop.
Next: Choose final key settings:
- Plan out the changes and commands.
- Plan out the tests for success/failure before executing the changes.
- Change one key at a time, testing as you go.
Changes:
1) Set Caps_Lock key to perform the Control_L function. Make appropriate adjustment to modifier map for "control".
2) Set Control_L key to perform the Caps_Lock function. Make appropriate adjustment to modifier map for "lock".
3) Set F5 key to perform the Escape function.
4) Set Shift + Backspace key to perform the Delete function (i.e. delete next character).
Tests:
1) In a text editor: Use Caps_Lock + C to copy some text. Use Caps_Lock + V to paste it.
2) In a text editor: Press Control_L. Type some text. The characters should all be upper case.
3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
Commands:
Each physical key has a keycode (a numeric value). This keycode has an associated list of keysymbols (keysyms). Keysyms represent particular character sequences. The first keysym is used when no modifier key is pressed in conjunction with this key, the second with Shift, the third when the Mode_switch key is used with this key, and the fourth when both the Mode_switch and Shift keys are used.
I'll construct some of the necessary commands:
View modifier map:
xmodmap -pm
Remove the Control_L keysym from the "control" modifier list.
xmodmap -e 'remove Control = Control_L'
Add the Control_L keysym to the "control" modifier list.
xmodmap -e 'add Control = Control_L'
Find the keycode(s) currently assigned to the Control_L keysym.
xmodmap -pke | grep Control_L
Find the keycode(s) to which the Caps_Lock keysym is currently assigned.
xmodmap -pke | grep Caps_Lock
Find the keycode(s) to which the F5 keysym is currently assigned.
xmodmap -pke | grep F5
Find the keycode(s) to which the 'a' keysym is currently assigned. Check for a space either side of the keysym character.
xmodmap -pke | grep ' a '
Find the keycode(s) to which the BackSpace keysym is currently assigned.
xmodmap -pke | grep BackSpace
Note: I read through the
xmodmap -pke
 output to find some of the keysym names e.g. "BackSpace". Remove the Caps_Lock keysym from the "lock" modifier list.
xmodmap -e 'remove Lock = Caps_Lock'
Add the Caps_Lock keysym to the "lock" modifier list.
xmodmap -e 'add Lock = Caps_Lock'
Find the keycode(s) to which the Delete keysym is currently assigned.
xmodmap -pke | grep Delete
Bind a keycode to a list of keysyms.
xmodmap -e 'keycode 71 = a A a A'
Check current keycodes:
[spiano@localhost work]$ xmodmap -pke | grep Control_L
keycode 37 = Control_L NoSymbol Control_L
[spiano@localhost work]$ xmodmap -pke | grep Caps_Lock
keycode 66 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Caps_Lock NoSymbol Caps_Lock
[spiano@localhost work]$ xmodmap -pke | grep F5
[spiano@localhost work]$ xmodmap -pke | grep ' a '
keycode 38 = a A a A ae AE
keycode 71 = a A a A
[spiano@localhost work]$ xmodmap -pke | grep BackSpace
keycode 22 = BackSpace BackSpace BackSpace BackSpace
[spiano@localhost work]$ xmodmap -pke | grep Delete
keycode 91 = KP_Delete KP_Decimal KP_Delete KP_Decimal
keycode 119 = Delete NoSymbol Delete
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
The F5 physical key is currently set to produce 'a'. Its keycode is 71.
Let's make the changes.
1) Set Caps_Lock key to perform the Control_L function. Make appropriate adjustment to modifier map for "control".
Remove the Caps_Lock keysym from the "lock" modifier list.
[spiano@localhost work]$ xmodmap -e 'remove Lock = Caps_Lock'
[spiano@localhost work]$ xmodmap -e 'keycode 66 = Control_L NoSymbol Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost work]$ xmodmap -pke | grep Control_L
keycode 37 = Control_L NoSymbol Control_L
keycode 66 = Control_L NoSymbol Control_L
Test: 1) In a text editor: Use Caps_Lock + C to copy some text. Use Caps_Lock + V to paste it.
Didn't work.
[spiano@localhost work]$ xmodmap -e 'remove Control = Control_L'
[spiano@localhost work]$ xmodmap -e 'add Control = Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
I see that there are now two entries for Control_L in the "control" modifier list. One for each keycode, even though both keycodes have the same keysym.
Test: 1) In a text editor: Use Caps_Lock + C to copy some text. Use Caps_Lock + V to paste it.
some text. some text. some text. some text. some text. some text. some text. some text.
works. Caps_Lock key now functions as Control_L.
Next: 2) Set Control_L key to perform the Caps_Lock function. Make appropriate adjustment to modifier map for "lock".
Note: When I remove the Control binding for Control_L (and/or Caps_Lock), I can still use Control_R for Ctrl+C & Ctrl+V (copy and paste).
[spiano@localhost work]$ xmodmap -e 'remove Control = Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)s
[spiano@localhost work]$ xmodmap -e 'keycode 37 = Caps_Lock NoSymbol Caps_Lock'
[spiano@localhost work]$ xmodmap -e 'add Control = Control_L'
[spiano@localhost work]$ xmodmap -e 'add Lock = Caps_Lock'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x25)
control     Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Tests:
1) In a text editor: Use Caps_Lock + C to copy some text. Use Caps_Lock + V to paste it.
2) In a text editor: Press Control_L. Type some text. The characters should all be upper case.
some text. some text. some text. some text. some text. some text.
Test 1 passed.
SOME TEXT. SOME TEXT. SOME TEXT.
Test 2 passed.
Next: 3) Set F5 key to perform the Escape function.
No modifiers are involved.
[spiano@localhost work]$ xmodmap -pke | grep Escape
keycode 9 = Escape NoSymbol Escape
[spiano@localhost work]$ xmodmap -e 'keycode 71 = Escape NoSymbol Escape'
Test: 3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. Test 3 passed.
Final change: 4) Set Shift + Backspace key to perform the Delete function (i.e. delete next character).
I need to set the second keysym in the keysym list for BackSpace to be Delete.
[spiano@localhost work]$ xmodmap -pke | grep BackSpace
keycode 22 = BackSpace BackSpace BackSpace BackSpace
[spiano@localhost work]$ xmodmap -e 'keycode 22 = BackSpace Delete BackSpace BackSpace'
Test: 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
some text. some text. text. soext. me text. some text. some text. some text. some t
Works. Test 4 passed.
Ok. Success. I'll assemble the command sequence, so that it can be placed in the startup script.
! 
! On startup, make alterations to the keyboard layout.
! 1) Set Control_L key ("Control Left") to produce Caps_Lock effect.
! 2) Set Caps_Lock key to produce Control_L effect.
! 3) Set F5 key to produce Escape effect.
! 4) Set Shift + BackSpace to produce Delete effect (delete next character).
!
! Remove particular keysyms from the modifier lists.
!
remove Control = Control_L
remove Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 37 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Control_L NoSymbol Control_L
!
! Add particular keysyms back into the modifier lists.
!
add Control = Control_L
add Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 71 = Escape NoSymbol Escape
keycode 22 = BackSpace Delete BackSpace BackSpace
! On startup, make alterations to the keyboard layout.
! 1) Set Control_L key ("Control Left") to produce Caps_Lock effect.
! 2) Set Caps_Lock key to produce Control_L effect.
! 3) Set F5 key to produce Escape effect.
! 4) Set Shift + BackSpace to produce Delete effect (delete next character).
!
! Remove particular keysyms from the modifier lists.
!
remove Control = Control_L
remove Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 37 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Control_L NoSymbol Control_L
!
! Add particular keysyms back into the modifier lists.
!
add Control = Control_L
add Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 71 = Escape NoSymbol Escape
keycode 22 = BackSpace Delete BackSpace BackSpace
Put this command sequence into .xmodmaprc.
[spiano@localhost work]$ cat ~/.xmodmaprc
keycode 71 = a A
[spiano@localhost work]$ vim ~/.xmodmaprc
[spiano@localhost work]$ cat ~/.xmodmaprc
!
! On startup, make alterations to the keyboard layout.
! 1) Set Control_L key ("Control Left") to produce Caps_Lock effect.
! 2) Set Caps_Lock key to produce Control_L effect.
! 3) Set F5 key to produce Escape effect.
! 4) Set Shift + BackSpace to produce Delete effect (delete next character).
!
! Remove particular keysyms from the modifier lists.
!
remove Control = Control_L
remove Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 37 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Control_L NoSymbol Control_L
!
! Add particular keysyms back into the modifier lists.
!
add Control = Control_L
add Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 71 = Escape NoSymbol Escape
keycode 22 = BackSpace Delete BackSpace BackSpace
Perform computer backup again.
Test again before rebooting.
[spiano@localhost work]$ ls
key_settings.txt
[spiano@localhost work]$ xmodmap key_settings.txt
The computer ceased to accept keyboard/mouse input for about 10-15 seconds. I could move the mouse but I couldn't click or select.
[spiano@localhost work]$ 
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Control_L (0x25)
control     Caps_Lock (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
The
xmodmap key_settings.txt
 command altered the modifier table, although not on purpose. It swapped the Caps_Lock and Control_L keycodes again but kept the same keycodes in the same positions in the modifier lists. Compare with the output from a little earlier:
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x25)
control     Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Tests:
- Caps_Lock key triggers Lock.
- F5 does not function as Escape in Vim.
- Control_L functions as a Shift key. cccCCC. But not as a Control modifier key.
- Shift + BackSpace functions as BackSpace.
Now run
xmodmap ~/.xmodmaprc
. 
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Control_L (0x25)
control     Caps_Lock (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Tests:
1) In a text editor: Use Caps_Lock + C to copy some text. Use Caps_Lock + V to paste it.
2) In a text editor: Press Control_L. Type some text. The characters should all be upper case.
3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
some text. some text. some text. some text. ASDASD ASD ASD.
In Vim, F5 functions as Escape.
some text.somse t.
Test 4 passed.
Good.
Next: Power cycle Shovel.
Shovel turned off and on again.
Tests:
1) In a text editor: Use Caps_Lock + C to copy some text. Use Caps_Lock + V to paste it.
2) In a text editor: Press Control_L. Type some text. The characters should all be upper case.
3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
copy some text.copy some text.copy some text.copy some text.copy some text.copy some text.copy some text.
Test 1 passed.
ASD ASD ASD ASD
Test 2 passed.
Test 3 passed.
The charaediateuld be deleted.
Test 4 passed.
Excellent.
[a week or so has passed]
Swapping ctrl and caps lock has not been as good an improvement as I had hoped.
Pronation of the wrist has been reduced, true. But the control_l key (caps lock, at the moment) still has to be pressed by the little finger, which is the weakest finger and therefore the least able to handle the mechanical strain.
I have decided that the left Alt key is a better location for the control_l function. This is in the same position as the Command key on a Mac. For most Control + [other key] chord presses with the left hand, the left thumb can be used to press the Alt key, while the index finger presses the [other key]. In some cases, such as Control + C or Control + V, it is easier to use the fourth finger to press the Alt key.
Chord = pressing multiple keys at the same time with the same hand.
So, I'll change the remapping (remember that the remapping occurs on GUI login):
- Caps Lock function will go back to the Caps Lock key.
- Control_L function will move to the Alt_L key.
- Alt function will move to the Control_L key.
Next: Choose final key settings:
- Plan out the changes and commands.
- Plan out the tests for success/failure before executing the changes.
- Change one key at a time, testing as you go.
Changes:
1) Set Alt_L key to perform the Control_L function. Make appropriate adjustment to modifier map for "control" and for "alt".
2) Set Control_L key to perform the Alt_L function. Make appropriate adjustment to modifier map for "control" and for "alt".
3) Set F5 key to perform the Escape function.
4) Set Shift + Backspace key to perform the Delete function (i.e. delete next character).
5) Automate these steps in a script, which is then executed on Gnome GUI login.
Tests:
1) In a text editor: Use Alt_L + C to copy some text. Use Alt_L + V to paste it.
2) In the Gnome GUI: Press Control_L + Tab several times. This should cycle through the running applications.
3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
Check current keycodes:
[spiano@localhost work]$ xmodmap -pke | grep Control_L
keycode 66 = Control_L NoSymbol Control_L
[spiano@localhost work]$ xmodmap -pke | grep Caps_Lock
keycode 37 = Caps_Lock NoSymbol Caps_Lock
keycode 37 = Caps_Lock NoSymbol Caps_Lock
[spiano@localhost ~]$ xmodmap -pke | grep Escape
keycode 9 = Escape NoSymbol Escape
keycode 71 = Escape NoSymbol Escape
[spiano@localhost ~]$ xmodmap -pke | grep BackSpace
keycode 22 = BackSpace Delete BackSpace BackSpace
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x25)
control     Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost ~]$ xmodmap -pke | grep Alt
keycode 64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R ISO_Level3_Shift Multi_key
keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
Keycodes map to these physical keys:
- 71 = F5
- 37 = Control_L
- 66 = Caps_Lock
- 22 = BackSpace
- 64 = Alt_L
Restore original settings.
[spiano@localhost work]$ xmodmap key_settings.txt
Computer input (keyboard, mouse) jammed for about 90 seconds while the command was running. I was playing audio in a web browser at the same time - this might explain the increased delay.
Check current keycodes:
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Control_L (0x25)
control     Caps_Lock (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost work]$ xmodmap -pke | grep Control_L
keycode 37 = Control_L NoSymbol Control_L
[spiano@localhost work]$ xmodmap -pke | grep Caps_Lock
keycode 66 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Caps_Lock NoSymbol Caps_Lock
[spiano@localhost ~]$ xmodmap -pke | grep Escape
keycode 9 = Escape NoSymbol Escape
[spiano@localhost ~]$ xmodmap -pke | grep F5
keycode 71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5 F5 F5 XF86Switch_VT_5
[spiano@localhost ~]$ xmodmap -pke | grep BackSpace
keycode 22 = BackSpace BackSpace BackSpace BackSpace
[spiano@localhost ~]$ xmodmap -pke | grep Alt
keycode 64 = Alt_L Meta_L Alt_L Meta_L
keycode 108 = Alt_R Meta_R ISO_Level3_Shift Multi_key
keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
Restoring the setting does not restore the modifier map.
To get back to original, need to change Control_L to "control" and Caps_Lock to "lock".
[spiano@localhost work]$ xmodmap -e 'remove Lock = Control_L'
[spiano@localhost work]$ xmodmap -e 'add Control = Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Caps_Lock (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost work]$ xmodmap -e 'remove Control = Caps_Lock'
[spiano@localhost work]$ xmodmap -e 'add Lock = Caps_Lock'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Now everything's back to normal (temporarily - the modification script is still set to run on GUI login).
Let's make the changes.
1) Set Alt_L key to perform the Control_L function. Make appropriate adjustment to modifier map for "control" and for "alt".
Note: When I remove the Alt_L binding for Alt_L, I can still use Alt_R for Alt commands.
[spiano@localhost work]$ xmodmap -e 'remove Mod1 = Alt_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost work]$ xmodmap -e 'keycode 64 = Control_L NoSymbol Control_L'
[spiano@localhost work]$ xmodmap -pke | grep Control_L
keycode 37 = Control_L NoSymbol Control_L
keycode 64 = Control_L NoSymbol Control_L
[spiano@localhost work]$ xmodmap -e 'remove Control = Control_L'
[spiano@localhost work]$ xmodmap -e 'add Control = Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_L (0x40),  Control_R (0x69)
mod1        Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
There are now two entries for Control_L in the "control" modifier list. One for each keycode, even though both keycodes have the same keysym.
Test: 1) In a text editor: Use Alt_L + C to copy some text. Use Alt_L + V to paste it.
some text. some text. some text. some text. some text. some text.
works. Alt_L key now functions as Control_L.
Next: 2) Set Control_L key to perform the Alt_L function. Make appropriate adjustment to modifier map for "control" and for "alt".
Note: "alt" in the modifier map is actually "mod1".
[spiano@localhost work]$ xmodmap -e 'remove Control = Control_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_R (0x69)
mod1        Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
[spiano@localhost work]$ xmodmap -e 'keycode 37 = Alt_L Meta_L Alt_L Meta_L'
[spiano@localhost work]$ xmodmap -e 'add Control = Control_L'
[spiano@localhost work]$ xmodmap -e 'add Mod1 = Alt_L'
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x40),  Control_R (0x69)
mod1        Alt_L (0x25),  Alt_R (0x6c),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Hm. Two entries for Alt_L.
[spiano@localhost work]$ xmodmap -pke | grep Alt_L
keycode 37 = Alt_L Meta_L Alt_L Meta_L
keycode 204 = NoSymbol Alt_L NoSymbol Alt_L
Test: 2) In the Gnome GUI: Press Control_L + Tab several times. This should cycle through the running applications.
Works. Control_L physical key now functions as Alt_L.
Next: 3) Set F5 key to perform the Escape function.
No modifiers are involved.
[spiano@localhost work]$ xmodmap -pke | grep Escape
keycode 9 = Escape NoSymbol Escape
[spiano@localhost work]$ xmodmap -e 'keycode 71 = Escape NoSymbol Escape'
[spiano@localhost work]$ xmodmap -pke | grep Escape
keycode 9 = Escape NoSymbol Escape
keycode 71 = Escape NoSymbol Escape
Test: 3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. Test 3 passed.
Next: 4) Set Shift + Backspace key to perform the Delete function (i.e. delete next character).
I need to set the second keysym in the keysym list for BackSpace to be Delete.
[spiano@localhost work]$ xmodmap -pke | grep BackSpace
keycode 22 = BackSpace BackSpace BackSpace BackSpace
[spiano@localhost work]$ xmodmap -e 'keycode 22 = BackSpace Delete BackSpace BackSpace'
[spiano@localhost work]$ xmodmap -pke | grep BackSpace
keycode 22 = BackSpace Delete BackSpace BackSpace
Test: 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
some text. some text. somxt. some text sometme text.
Works. Test 4 passed.
Ok. Success. I'll assemble the command sequence, so that it can be placed in the startup script.
! 
! On startup, make alterations to the keyboard layout.
! 1) Set Control_L key ("Control Left") to produce Alt_L effect.
! 2) Set Alt_L key to produce Control_L effect.
! 3) Set F5 key to produce Escape effect.
! 4) Set Shift + BackSpace to produce Delete effect (delete next character).
!
! Remove particular keysyms from the modifier lists.
!
remove Control = Control_L
remove Mod1 = Alt_L
!
! Assign keysym lists to keycodes.
!
keycode 37 = Alt_L Meta_L Alt_L Meta_L
keycode 64 = Control_L NoSymbol Control_L
!
! Add particular keysyms back into the modifier lists.
!
add Control = Control_L
add Mod1 = Alt_L
!
! Assign keysym lists to keycodes.
!
keycode 71 = Escape NoSymbol Escape
keycode 22 = BackSpace Delete BackSpace BackSpace
! On startup, make alterations to the keyboard layout.
! 1) Set Control_L key ("Control Left") to produce Alt_L effect.
! 2) Set Alt_L key to produce Control_L effect.
! 3) Set F5 key to produce Escape effect.
! 4) Set Shift + BackSpace to produce Delete effect (delete next character).
!
! Remove particular keysyms from the modifier lists.
!
remove Control = Control_L
remove Mod1 = Alt_L
!
! Assign keysym lists to keycodes.
!
keycode 37 = Alt_L Meta_L Alt_L Meta_L
keycode 64 = Control_L NoSymbol Control_L
!
! Add particular keysyms back into the modifier lists.
!
add Control = Control_L
add Mod1 = Alt_L
!
! Assign keysym lists to keycodes.
!
keycode 71 = Escape NoSymbol Escape
keycode 22 = BackSpace Delete BackSpace BackSpace
Put this command sequence into .xmodmaprc.
[spiano@localhost work]$ cat ~/.xmodmaprc
!
! On startup, make alterations to the keyboard layout.
! 1) Set Control_L key ("Control Left") to produce Caps_Lock effect.
! 2) Set Caps_Lock key to produce Control_L effect.
! 3) Set F5 key to produce Escape effect.
! 4) Set Shift + BackSpace to produce Delete effect (delete next character).
!
! Remove particular keysyms from the modifier lists.
!
remove Control = Control_L
remove Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 37 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Control_L NoSymbol Control_L
!
! Add particular keysyms back into the modifier lists.
!
add Control = Control_L
add Lock = Caps_Lock
!
! Assign keysym lists to keycodes.
!
keycode 71 = Escape NoSymbol Escape
keycode 22 = BackSpace Delete BackSpace BackSpace
[spiano@localhost work]$ vim ~/.xmodmaprc
[spiano@localhost work]$ cat ~/.xmodmaprc
!
! On startup, make alterations to the keyboard layout.
! 1) Set Control_L key ("Control Left") to produce Alt_L effect.
! 2) Set Alt_L key to produce Control_L effect.
! 3) Set F5 key to produce Escape effect.
! 4) Set Shift + BackSpace to produce Delete effect (delete next character).
!
! Remove particular keysyms from the modifier lists.
!
remove Control = Control_L
remove Mod1 = Alt_L
!
! Assign keysym lists to keycodes.
!
keycode 37 = Alt_L Meta_L Alt_L Meta_L
keycode 64 = Control_L NoSymbol Control_L
!
! Add particular keysyms back into the modifier lists.
!
add Control = Control_L
add Mod1 = Alt_L
!
! Assign keysym lists to keycodes.
!
keycode 71 = Escape NoSymbol Escape
keycode 22 = BackSpace Delete BackSpace BackSpace
Perform computer backup again.
Test again before rebooting.
Restore original settings.
[spiano@localhost work]$ ls
key_settings.txt
[spiano@localhost work]$ xmodmap key_settings.txt
The computer ceased to accept keyboard/mouse input for about 30 seconds. I could move the mouse but I couldn't click or select. This time, I didn't have audio playing in a browser.
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Alt_L (0x40),  Control_R (0x69)
mod1        Control_L (0x25),  Alt_R (0x6c),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
The
xmodmap key_settings.txt
 command altered the modifier table, although not on purpose, and without any practical effect. It swapped the Alt_L and Control_L keycodes again but kept the same keycodes (rather than the keysyms) in the same positions in the modifier lists. Compare with the output from a little earlier:
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x40),  Control_R (0x69)
mod1        Alt_L (0x25),  Alt_R (0x6c),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Tests:
- Control_L + Tab cycles through applications in Gnome GUI.
- F5 does not function as Escape in Vim.
- Alt_L functions as a Control key. Can copy-paste text using Alt+C, Alt+V. asd asd asd
- Shift + BackSpace functions as BackSpace.
Now run
xmodmap ~/.xmodmaprc
 to test automation script. 
[spiano@localhost work]$ xmodmap ~/.xmodmaprc
[spiano@localhost work]$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x40),  Control_R (0x69)
mod1        Alt_L (0x25),  Alt_R (0x6c),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Tests:
1) In a text editor: Use Alt_L + C to copy some text. Use Alt_L + V to paste it.
2) In the Gnome GUI: Press Control_L + Tab several times. This should cycle through the running applications.
3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
some text. some text. some text. some text.
Test 1 passed.
Control_L + Tab cycles through applications in Gnome GUI.
Test 2 passed.
In Vim, F5 functions as Escape.
Test 3 passed.
some text. some me textmeext.
Test 4 passed.
Good.
Next: Power cycle Shovel.
Shovel turned off and on again.
Tests:
1) In a text editor: Use Alt_L + C to copy some text. Use Alt_L + V to paste it.
2) In the Gnome GUI: Press Control_L + Tab several times. This should cycle through the running applications.
3) In
vim
: Enter Insert Mode. Press F5 key to escape Insert Mode and re-enter Command Mode. 4) In a text editor: Type some text. Position the cursor in the middle of the text. Press Shift + Backspace. The character immediately after the cursor should be deleted.
some text. some text. some text. some text.
Test 1 passed.
Control_L + Tab cycles through applications in Gnome GUI.
Test 2 passed.
In Vim, F5 functions as Escape.
Test 3 passed.
st. some texte textxt.
Test 4 passed.
Excellent.
That's the end of this project.
[start of notes]
Changes from the original text:
- I have not always preserved the format of any excerpts from man pages (e.g. removing extra spaces, line-breaking newlines, word-breaking hyphens).
- I have not always preserved the format of any computer output (e.g. from running bash commands). Examples: Setting input lines in bold text, adding/removing newlines in order to make a sequence of commands easier to read, using hyphens for lists and sublists instead of indentation, breaking wide tables into consecutive sections.
[end of notes]