macOS上Ghostty提示'xterm-ghostty': unknown terminal type.的解决方案
最近刚换了新设备,刚好配置了一下趁手的工具链,遇到了一个小问题。
众所周知 macOS 自带的终端可玩性比较低,也不是很好看,我之前一直用的 iTerm2 ,后面有次 iTerm2 炸了,具体怎么炸的忘了,在群友的推荐下将终端应用换成了 Ghostty,这东西名字取的很好,Ghost(幽灵)+ TTY(终端设备),外观也是一只幽灵。
我在使用 Ghostty 的时候,正常情况下不会出问题,但是当我以root运行一些东西时,会提示'xterm-ghostty': unknown terminal type. ,查了一下,这个问题导致的原因有以下几点
远程(或 sudo)系统里找不到名叫 xterm-ghostty 的 terminfo 记录,所以 ncurses/tput/clear/vim/tmux 等程序都不知道该怎么驱动终端。
用 Ghostty 本机 SSH 到服务器,服务器 /usr/share/terminfo/x/xterm-ghostty 不存在,也没在 ~/.terminfo/x/ 里,于是查询失败 。
本机 sudo 默认重置环境变量,把 Ghostty 自带的 TERMINFO 给扔了,导致 root 身份下找不到同一条记录 。
旧 macOS 的 infocmp 版本太老:10.x 自带的 infocmp 导出的格式新版 tic 无法解析,上传统计文件虽然看似成功,其实是废数据,服务器依旧识别不到 。
显然我的情况是本机 sudo 导致的, root 身份下找不到这条记录,查找 Ghostty 的 issue ,发现一个相关的 discussion:https://github.com/ghostty-org/ghostty/discussions/5452,这个讨论中提到了官方文档的一个解决方案,点开发现把相关的 terminfo 复制到服务器就行了,但是对于我们这种场景,只需要把 terminfo 复制到 root 下就行。具体解决方案可以copy这几个命令
infocmp -x xterm-ghostty > /tmp/xterm-ghostty.ti
sudo tic -x /tmp/xterm-ghostty.ti