Evitar que o aplicativo falsifique as configurações do terminal?

2

Recentemente, mais e mais aplicações GUI (okular e inkscape, entre outras) começaram a desabilitar o eco do terminal enquanto estão ativas. Isso parece desnecessário, na melhor das hipóteses (se você não conhecer o processo, você não digitaria de qualquer maneira e, se o fizesse, quem se importaria? E, se você fizer a experiência, isso não terá efeito). Mas o pior é que, se acontecer de você fazer algo errado e instintivamente matá-lo com ctrl-C (eu faço isso se acidentalmente chamo okular em muitos arquivos, por exemplo), o eco fica desativado . Não é o fim do mundo, mas a necessidade de digitar cegamente stty echo toda vez que isso acontece me deixa nervoso.

Existe uma maneira de dizer ao terminal para desativar a alteração dessas configurações? Eu acho que pode ser possível modificar o termcap mas é aí que meu conhecimento sobre ele termina. Claro, isso provavelmente torna a senha invisível visível, mas eu quero saber como fazê-lo de qualquer maneira, ter um terminal à prova de violação aberto seria suficiente.

    
por orion 16.12.2014 / 10:47

1 resposta

3

echo é uma configuração do dispositivo de terminal (a parte de disciplina no driver do kernel tty), o termcap trata de controlar o terminal (real ou emulador) por meio de sequências de escape, são duas coisas separadas.

Aqui, você deseja impedir que o aplicativo execute um ioctl específico. Uma maneira poderia ser separá-lo do terminal.

socat - exec:okular,pty,raw

Executaria okular anexado a um dispositivo pseudo-terminal diferente e socat passaria os dados do seu terminal para esse.

Para transmitir argumentos arbitrários, com zsh , bash ou ksh93 :

okular() {
  CODE=$(printf '%q ' exec okular "$@"
        ) socat - 'system:"eval \"$CODE\"",pty,raw'
}
    
por 16.12.2014 / 11:14

Tags