Não funciona porque showkey
simplesmente abre o primeiro dispositivo especial que testa (a partir de uma lista codificada) que é um terminal. Aqui está a lista que usa (citada de versão 1.15 ):
static char *conspath[] = {
"/proc/self/fd/0",
"/dev/tty",
"/dev/tty0",
"/dev/vc/0",
"/dev/systty",
"/dev/console",
NULL
};
Quando você se conecta via ssh, os dois primeiros são pseudo-terminais, não passam um teste de acompanhamento que tenta determinar se eles são realmente consoles virtuais. Mas o primeiro é o terminal associado ao seu shell. Ao abrir um terminal diferente, você obtém o eco inesperado, etc.
Quando você executa showkey -s
, ele modifica o modo de E / S terminal usando o descritor de arquivo que obtém abrindo o dispositivo (que é, a propósito 3 , diferente da entrada padrão < strong> 0 ). Faz o equivalente para aquele terminal de
stty -icanon -echo -isig
showkey
modifica um terminal ( 3 ) que você (provavelmente) não está digitando e exibe o resultado no seu terminal. A entrada padrão original para showkey
ainda está usando o modo de entrada original; o modo de entrada atualizado é aplicado ao outro terminal.
O comportamento não é um erro em showkey
, porque ele só pode obter códigos de verificação do console virtual. Se você não for digitar tty0
, não obterá o resultado esperado. poderia ser mais agradável, dizendo-lhe mais claramente que você não obterá resultados úteis.