Seu teclado não está conectado a xterm
. Está conectado ao seu PC. Um driver de kernel sabe como decodificar o pressionamento e a liberação de teclas enviados pelo teclado e disponibilizá-los para aplicativos por meio de uma API genérica em um arquivo de dispositivo especial.
Um servidor X é um aplicativo desse tipo que usa essa API.
Ele traduz essas pressões e liberações de teclas nos eventos X "KeyPress" e "KeyRelease", que carregam com eles as informações da tecla pressionada como um keycode e um keysym. Essa é outra API.
xterm
é um aplicativo X. Ele se conecta a um servidor X e informa: Estou interessado em todos os eventos KeyPress e KeyRelease . Quando tiver o foco e quando os eventos KeyPress e KeyRelease não forem sequestrados pelo Gerenciador de Janelas ou outros aplicativos que se registram globalmente em alguns eventos KeyPress, xterm
receberá os eventos KeyPress
e KeyRelease
.
xterm
traduz um keysym
em um evento KeyPress em uma sequência de caracteres que envia para o lado mestre de um driver pseudo-terminal. Os aplicativos em execução no seu xterm
eventualmente lerão do lado do escravo desse driver do pseudo-terminal os caracteres enviados por xterm
, mas potencialmente alterados pelo driver do pseudo-terminal (por exemplo, sob algumas condições, os caracteres 0xd são convertidos para 0xa uns, 0x3 causaria o envio de uma SIGINT ...).
Com esses esclarecimentos fora do caminho. Para saber qual keycode ou keysym é enviado pelo servidor X em um determinado pressionamento de tecla, você pode usar xev
.
Para saber qual seqüência de caracteres (se houver) é enviada por xterm
, é necessário informar ao driver do pseudo-terminal para não se misturar com eles primeiro ( stty raw
) e, em seguida, usar cat -vt
ou sed -n l
ou od
para vê-los:
{
stty raw min 1 time 20 -echo
dd count=1 2> /dev/null | od -vAn -tx1
stty sane
}
(acima, adicionando um min 1 time 20
e usando dd
, para que ele saia depois de um pressionamento de tecla, pois você não seria capaz de sair com Ctrl-C ).