根本原因是Oracle自带JRE缺少CJK字体,需将simhei.ttf等中文字体重命名为LucidaSans.ttf放入jre/lib/fonts目录并刷新字体缓存、设置JVM参数;RHEL8还需禁用Wayland、确保X11会话及DISPLAY权限正确。
oracle 19c 在 rhel 8 上图形化安装界面显示方块或乱码,根本不是 lang 或 nls_lang 配置错了,而是 oracle 自带的 jre 缺少中文字体文件,swing 渲染时 fallback 失败。临时改环境变量顶多让终端不报错,对 gui 界面无效。
替换 Oracle 自带 JRE 的字体文件(Linux 通用)
Oracle 安装程序 runInstaller 是 Java Swing 应用,启动时硬编码查找 jre/lib/fonts/LucidaSans.ttf ——这个文件名不能改,内容必须是中文字体。
- 进入解压后的安装包目录(如
Disk1/stage/jre),定位到jre/1.8.0/lib/fonts/ - 删掉原有
LucidaSans.ttf(或重命名备份) - 放入一个支持中文的字体,例如
simhei.ttf或NotoSansCJKsc-Regular.otf,并**严格重命名为LucidaSans.ttf** - 执行
chmod 644 jre/lib/fonts/LucidaSans.ttf,确保可读 - 若已解压过 stage 目录,需重新打包
all_except_bin.jar或直接用-jreLoc指向修改后的 JRE 路径
刷新系统字体缓存并强制 Java 使用本地渲染
即使替换了 JRE 字体,RHEL 8 默认使用 X11 远程字体路径,runInstaller 可能仍走 X Server 字体链,而服务端没装中文字体包就会空白。
- 运行
sudo fc-cache -fv刷新系统字体缓存 - 确认 X Server 端已安装中文字体:运行
yum install xorg-x11-fonts-misc gnu-free-fonts-common google-noto-sans-cjk-ttc-fonts - 启动前加 JVM 参数:在执行
./runInstaller前,先运行export JRE_OPTIONS="-Dawt.useSystemAAFontSettings=lcd -Dswing.aatext=true" - 如果通过
ssh -X连接,确保服务端(不是客户端)装了上述字体,并且XAUTHORITY和DISPLAY正确指向本地 X server(如export DISPLAY=localhost:10.0)
RHEL 8 特定:禁用 GNOME Wayland 并检查 DISPLAY 权限
RHEL 8 默认启用 Wayland,但 Oracle 图形安装器只兼容 X11。直接在 Wayland 下跑 runInstaller 会跳过字体加载逻辑,直接 fallback 成方块。
- 登录时手动选择 “GNOME on Xorg”(而非默认的 “GNOME”)
- 验证当前会话:运行
echo $XDG_SESSION_TYPE,输出应为x11,不是wayland - 检查
DISPLAY是否可访问:xhost +si:localuser:oracle(以 oracle 用户运行) - 不要依赖
localhost:10.0这类地址;若用ssh -X,优先用export DISPLAY=$(grep "localhost:" /tmp/.X11-unix/X* 2>/dev/null | head -n1 | sed 's/.*X//; s/:.*//')动态获取真实 DISPLAY 值
最容易被忽略的是:RHEL 8 的 fontconfig 默认不扫描 jre/lib/fonts/ 目录,所以哪怕你把字体放对了位置、改对了名、设对了权限,Java 仍可能加载失败——必须靠 JRE_OPTIONS 强制启用本地渲染,绕过 fontconfig 查找逻辑。


















