我正在编写一个Android SSH客户端。我有一个控制视图的终端对象和一个SSH对象,用于向服务器发送命令。
我的问题是终端在所有会话期间都以彩色显示,但是当打开ncurses应用程序时(例如tmux),终端显示为黑白。
我能够找到这个:http://invisible-island.net/ncurses/ncurses.faq.html#white_black 我不太确定这意味着什么。任何人都可以指导我有关此的更多文档,或者是否有任何支持此功能的开源Java客户端。我不确定如何解决这个问题。
答案 0 :(得分:1)
好的,所以你在没有正确设置TERM环境变量的情况下启动了应用程序,这意味着在初始化例程期间,远程操作系统认为它没有与可以支持颜色的终端通信。
现在您已正确设置,您的颜色可以正常工作。恭喜!但是,在应用程序中设置它将是一个很大的伎俩。这是因为需要在应用程序启动之前设置它。否则,当应用程序启动时,您链接到的低级库将查询“环境”以查看它具有哪种终端,这决定了应用程序将发出哪种终端代码。
这一切都发生在应用程序启动之前;所以,实际上,你无法从你的应用程序中真正做到这一点。然而,真正的解决方案更有趣。
SSH对远程机器的显示功能做了很少的假设。 “修复”此问题的最佳方法是让SSH客户端根据SSH客户端的功能设置终端类型。检查您的ssh客户端配置,看看您是否可以传递“更好”的终端类型。
事实上,让主机操作系统承担客户端的功能会产生问题;但是,要求每个ssh客户端都配置为正确地传递它的终端功能可能在逻辑上是不可能的。所以,你可能想达成妥协。在ssh服务器计算机上,尝试删除“包装器脚本”以使用彩色终端脚本启动应用程序。它会读到类似
的内容#!/bin/sh
TERM=xterm-256color
export TERM
exec launch-app "$@"
并保存为launch-app-color
或类似内容。