Я разрабатываю консольное приложение для сервера, на котором работает RedHat. Конечные пользователи должны иметь возможность запускать это приложение с любым терминалом по своему выбору. (Например, терминал Gnome, шлюз SSH/Telnet, клиент Telnet Telnet и другие).
В большинстве терминальных приложений нет ничего плохого, однако, когда я запускаю свою программу из сеанса telnet MS, я замечаю, что мои специальные входы для System.in
и System.console()
полностью перепутаны. Обратное пространство будет записывать ^H
на экран, а другие клавиши также записывают тарабарщину.
Я достаточно взломал его, чтобы заставить его работать последовательно, но я уверен, что я делаю грубо:
if (!System.getenv("TERM").equals("xterm"))
{
System.out.println("\nWARNING: The TERM type is now set to xterm\n");
final String[] cmd = { "/bin/sh", "-c", "export TERM=xterm" };
Runtime.getRuntime().exec(cmd);
}
Будет ли проблема для терминалов, которые не поддерживают xterm
? Я заметил, что клиент Microsoft Telnet не позволяет вам установить тип TERM
на xterm
, прежде чем вы начнете сеанс. Однако, как только сеанс запущен, установка TERM=xterm
, похоже, решает проблему.
Как это происходит в большинстве консольных приложений?