我正在尝试使用现在古老的tkdiff工具,但遇到了麻烦。我有2个Linux系统。第一个系统是Redhat EL 6.4工作站,可以很好地运行tkdiff -我可以整天比较文件。
在第二个系统上,CentOS版本6.6服务器tkdiff失败,并带有以下堆栈跟踪:
Error in startup script:
while executing
"font actual system"
invoked from within
"set sysfont [font actual system]"
(file "<path...>/bin/tkdiff" line 122)
我不知道为什么它没有在“:”和“执行时”之间给我一条错误消息...非常奇怪。
我在这上面scratch头,我尝试了一些事情,例如:
!#/bin/sh
shebang替换为#!/usr/bin/wish
package require Tk
语句更新为8.5 我猜我可能在CentOS服务器上缺少其他依赖项吗?
更新:
好的,这绝对是一个依赖项。我对细节有些迷惑,但是我记得从
wish
提示符进行采购与仅运行脚本(在错误处理方面)存在一些细微的差异。如实验所示,根目录似乎缺少字体依赖性:$ wish
% font actual system
% puts $errorInfo
while executing
"font actual system"
% puts $errorCode
NONE
%
显然,对
font actual system
不满意。奇怪的是,$errorCode
是NONE
。 libXft和fontconfig软件包先前已安装。我刚刚安装了以下其他yum软件包:xorg-x11-utils
libXv
libXxf86dga
libdmx
tk-devel (which installed fontconfig-devel and a bunch of other dependancies)
tcl-devel
最佳答案
TL; DR: X显示服务器(本地RHEL工作站)上的系统字体未安装在运行希望的X客户端(CentOS服务器)上。
我认为问题至少部分是由于我在CentOS服务器上运行tkdiff
程序并通过X显示到我的原始RedHat工作站。我对根本原因(while executing "font actual system"
)的tcl堆栈进行了跟踪,并使用它来缩小问题的范围。在RedHat恶化时,我启动了wish并执行了该命令以得到以下响应:
RedHat>$ wish
% font actual system
-family {DejaVu Sans} -size 12 -weight normal -slant roman -underline 0 -overstrike 0
%
我认为CentOS服务器由于正在X上显示到我的RHEL框中,因此将尝试使用相同的系统字体。快速搜索未找到适合该字体的yum软件包,因此我安装了它。
sudo yum install dejavu-sans-mono-fonts
瞧!在CentOS上,我现在得到:
CentOS>$ wish
% font actual system
-family {DejaVu Sans Mono} -size 12 -weight normal -slant roman -underline 0 -overstrike 0
%
最终测试:
tkdiff
现在可以正常运行了!