xmodmap
pode parecer uma resposta, mas não não, porque os códigos de teclas que manipula são chaves existentes no teclado, não chaves modificadas . Um controle A é uma chave modificada.
xmodmap
só pode reatribuir códigos de tecla existentes ou (seus nomes) keysyms, conforme listado em sua página de manual:
keycode
NUMBER = KEYSYMNAME ...keycode
any
= KEYSYMNAME ...keysym
KEYSYMNAME = KEYSYMNAME ...
Para ver os códigos de teclas que o xmodmap
conhece, execute
xmodmap -pk
que mostra algo assim (encurtado para maior clareza):
There are 4 KeySyms per KeyCode; KeyCodes range from 8 to 255.
KeyCode Keysym (Keysym) ...
Value Value (Name) ...
8 0x0061 (a) 0x0041 (A) 0x00e5 (aring) 0x00c5 (Aring)
9 0x0073 (s) 0x0053 (S) 0x00df (ssharp) 0x00cd (Iacute)
10 0x0064 (d) 0x0044 (D) 0x08ef (partialderivative) 0x00ce (Icircumflex)
11 0x0066 (f) 0x0046 (F) 0x08f6 (function) 0x00cf (Idiaeresis)
12 0x0068 (h) 0x0048 (H) 0x01ff (abovedot) 0x00d3 (Oacute)
13 0x0067 (g) 0x0047 (G) 0x00a9 (copyright) 0x01bd (doubleacute)
14 0x007a (z) 0x005a (Z) 0x07d9 (Greek_OMEGA) 0x00b8 (cedilla)
...
xev
mostra o que realmente acontece:
KeyPress event, serial 34, synthetic NO, window 0xc00001,
root 0x111, subw 0xc00002, time 2209364614, (27,43), root:(47,86),
state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (01) "^A"
XmbLookupString gives 1 bytes: (01) "^A"
XFilterEvent returns: False
KeyRelease event, serial 34, synthetic NO, window 0xc00001,
root 0x111, subw 0xc00002, time 2209364773, (27,43), root:(47,86),
state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (01) "^A"
XFilterEvent returns: False
O modificador de controle é o 0x4
no estado; o XLookupString
(uma das várias funções relacionadas para combinar eventos chave) transforma o keysym para "a" em ^A
(control / A).
Como não há keysym para nenhuma das chaves de controle, reatribuir códigos de teclas usando xmodmap
não será possível para o problema do OP.
Para resolver o problema do OP, é preciso ter uma maneira de dizer ao sistema operacional (essencialmente) que se recusem a entregar eventos separados para control e A - mas o Linux e o X não funcionam assim. Limitando o escopo a uma aplicação específica (xterm) ou a um conjunto de aplicativos (programas baseados em Gtk), pode-se abordar os separadamente. Mas uma solução que se aplica a todo o sistema não parece factível.