Formality GUI 启动失败怎么办:formality 打不开闪退白屏速查
更新时间:2026-10-22。FAQ 速查页,属于 EDA 工具排错系列,总入口见 EDA 开源与报错索引。Formality(Synopsys 的形式验证工具)有两种用法:纯命令行的
fm_shell,以及敲formality(等价于带图形界面的启动方式,fm_shell -gui也能进 GUI)拉起的图形界面,用来可视化 setup、match 结果和未映射比较点。GUI 打不开、闪退或白屏时,十次有八次不是 Formality 装坏了——它是一个「在服务器上算、在你屏幕上画」的 X11 老程序,断点在 DISPLAY 变量、SSH X11 转发、Motif 时代的 X11 依赖库、VNC 字体或本地缓存锁这条图形通道上。签到阶段就失败的,按姊妹篇 Formality license 获取失败速查 处理;启动后报版本不兼容的,见 Formality 版本不匹配速查。正常验证流程见 形式验证(二):LEC/Formality。
本文要回答的问题
- 敲
formality报Can't open display或窗口一闪就退,DISPLAY 该怎么设? fm_shell批处理一切正常,为什么一加 GUI 就起不来?- 报错停在
libXss.so/libXft.so一类共享库找不到,是安装坏了吗? - VNC/xrdp 远程会话里菜单方块字、白屏,和本地启动失败是同一类问题吗?
- 无人值守的回归节点上根本没有图形环境,等价性检查该怎么跑?
一、报错原文与现象
最典型的形态是进程刚起就退出,报错直指显示器连不上,DISPLAY 为空或指向一个不存在的显示号:
$ formality
Error: Can't open display:
Error: Couldn't connect to display ":0.0". Exiting.第二种形态发生在 SSH 远程会话或 crontab/批处理作业里:DISPLAY 压根没被分配,或被手工指成了服务器本机的显示号,X11 连接被拒绝。在调度作业里起 GUI 还常伴随认证失败:
$ echo $DISPLAY
$ formality
X11 connection rejected because of wrong authentication.
Error: Unable to initialize DISPLAY. Exiting.第三种形态最迷惑:license 签到通过、启动横幅都打印了,最后倒在图形共享库加载或 Motif 资源初始化上,直接段错误退出。这类在精简安装的计算节点、刚升级过 glibc 的系统、VNC 会话里最常见:
formality: error while loading shared libraries:
libXss.so.1: cannot open shared object file: No such file or directoryWarning: Missing charsets in String to FontSet conversion
Segmentation fault (core dumped)第四种形态与图形栈无关:命令行能签到,GUI 特有的授权特性不可用,或上一次 GUI 异常退出留下了残留进程与锁文件,新实例拒绝启动。现象先分两堆再动手:fm_shell 也起不来是安装或 license 问题;fm_shell 正常、只有 GUI 起不来则锁定图形通道,不要去重装 Formality。
二、可能原因速查表
| 报错/现象 | 最可能原因 | 一条命令确认 | 处置 |
|---|---|---|---|
| Can't open display(空值) | DISPLAY 未设置,常见于 crontab/批处理 | echo $DISPLAY | 用 ssh -X/-Y 重连,不手设服务器地址 |
| DISPLAY 有值仍被拒 | xauth 票据失效或串号 | xauth list | 删 ~/.Xauthority 后重连 |
| ssh -X 后 DISPLAY 仍为空 | 服务端 X11Forwarding 关闭或缺 xauth | ssh -v -X <server> 2>&1 | grep -i x11 | 管理员开转发并安装 xauth |
| libXss/libXft/libXt 找不到 | 精简系统缺老 X11/Motif 依赖 | ldd $FORMALITY_HOME/.../bin/fsgui_shell | grep "not found" | 管理员补装 libXScrnSaver、libXft 等包 |
| 启动即 Segmentation fault | 版本与 OS/glibc 不兼容 | ldd ... | grep "not found";看 OS 版本认证矩阵 | 换经认证的 OS 版本或 Formality 版本 |
| VNC 里白屏、菜单方块字 | 会话缺字体或 X 资源 | fc-list | wc -l;xlsfonts | 装基础字体包,配 xorg 字体路径 |
| LIC 前缀 GUI feature 不可用 | 授权含命令行特性、无图形特性或席位占满 | lmutil lmstat -a -c <port>@<server> | 换席位,或退回 fm_shell -f |
| 提示 lock / 已有实例运行 | fsgui_shell 残留进程或缓存锁 | ps -ef | grep -i fsgui | 清残留进程与 ~/.synopsys 锁文件 |
| 本地能开、跨地域卡顿 | X11 对高延迟敏感 | 拖动窗口测延迟 | 改在 VNC 会话里跑 GUI |
| 多屏/高分屏窗口错位 | 分辨率与多显示器配置 | xdpyinfo | grep dimensions | 单显示器启动,复位窗口资源 |
三、逐条排查展开
先做关键分叉:fm_shell 到底能不能起。
echo 'puts "FM-OK"; exit' | fm_shell能打印 FM-OK 干净退出,说明二进制、license 主特性、环境脚本都通,问题被压缩在图形通道;连这步都失败,先转 Formality license 获取失败速查 或 Formality 版本不匹配速查,本篇后面的 X11 动作一个都不用做。GUI 只是 fm_shell 外面的一层壳,壳起不来不代表内核有问题。
读这张图抓住「红色入口、蓝色分叉、橙色修复、灰色授权支线、紫色退路、绿色收尾」:第一刀必须是 fm_shell 分叉,license 与安装支线从这里就被切走;X11 通道用 xclock 验证后,仍起不来才进入缺库、字体、缓存锁的逐项修复;无显示节点不要硬凑 GUI,直接走紫色批处理退路。跳过分叉直接重装 Formality,十次有九次白忙。
第一刀查 DISPLAY,而且不要手工设。
echo $DISPLAY输出为空,X11 程序无处可画,必报 Can't open display。人在 SSH 会话里时,DISPLAY 应由 SSH 转发自动分配(通常是 localhost:10.0),正确动作是退出后用 ssh -X <user>@<server> 重连;老站点的安全扩展拦截转发时改用 ssh -Y。切忌手工 export DISPLAY=:0.0——服务器登录节点自己的显示号要么不属于你、要么在纯计算节点上根本不存在,设了只会把报错从「空」变成「connection refused」。crontab、LSF、回归脚本这类非交互环境天生没有 DISPLAY,本就不该在里面起 GUI。
有值还被拒,查 xauth 票据与 sshd 开关。 wrong authentication 是认证问题:多次 -X 登录串了票据、.Xauthority 损坏、家目录配额满写不进新票据都可能触发。删掉 ~/.Xauthority 后断开重连让 SSH 重新发票据,xauth list 应能看到一条 localhost:10 类的 cookie。重连后 DISPLAY 始终为空,问题在服务端:sshd 配置了 X11Forwarding no,或机器上没装 xauth。用 ssh -v -X <server> 连一次,调试输出里没有 Requesting X11 forwarding 就是服务端关闭,需要管理员改 /etc/ssh/sshd_config 并安装 xauth,用户态绕不过去。
先用秒开的小工具验证通道,再启动 Formality。 通道疑似修好后不要直接拉 GUI——它启动要读库、签 license,几十秒后才报错。先跑 xclock(或 xeyes),本地屏幕能弹出时钟,说明转发、认证、本地 X server 全通,再上 formality。本地这端也要有 X server:macOS 装 XQuartz(系统大版本升级后常静默失效),Windows 装 VcXsrv 或 MobaXterm。
通道通了仍倒在共享库或段错误,用 ldd 定位。 Formality GUI 是 Motif 技术栈的老程序,依赖 libXss、libXft、libXext、libXt、libXm 一串在最小化安装的服务器上默认没有的包。对 GUI 实际二进制(安装目录 bin 下的 fsgui_shell 一类可执行文件)跑 ldd,所有 not found 行就是缺失清单,报管理员按包名补装(RHEL 系常见于 libXScrnSaver、libXft、openmotif 一类包)。库全齐仍一启动就段错误,先怀疑版本与 OS/glibc 不在认证组合内——新装系统上老版本 Formality 这类事故最多,按 Formality 版本不匹配速查 的方法核对版本与平台认证矩阵,不要用装补丁库的方式硬凑。
VNC/xrdp 会话里白屏或方块字,查字体与会话资源。 远程桌面会话自带一个服务端 X server,不依赖 SSH 转发,但精简 VNC 镜像常缺基础字体:Motif 程序找不到字体集就表现为菜单空白、Missing charsets in String to FontSet conversion 警告甚至启动崩溃。让管理员在 VNC 镜像里补齐 xorg 基础字体包(75dpi/100dpi、misc、字体别名库)并执行 fc-cache,重连会话即可。跨地域团队也建议默认走 VNC——X11 协议对延迟敏感,跨机房转发即使全通也可能卡到不可用,VNC 跑在服务器侧、抗断线、可重连。
LIC 前缀与残留锁单独处理。 报 License feature ... is not available 意味着授权里没有 GUI 对应特性或席位占满;日志带 all licenses in use 的是占满,等人释放即可,特性名以本单位 license 文件为准,处置全程见 Formality license 获取失败速查。若提示已有实例运行、锁文件存在,先 ps -ef | grep -i fsgui 找残留的 GUI 进程清掉,再清理 ~/.synopsys 下本次会话的锁与缓存(动手前先确认没有正常实例在跑)——被 kill -9 的 GUI 来不及删锁,是这类假占用的主要来源。
四、预防与纪律
- 把连接方式写进上机手册:统一
ssh -Y登录或固定 VNC 会话,禁止各自手试 DISPLAY;新账号开通即由管理员确认 sshd 的X11Forwarding、xauth 与 Motif 依赖齐备。 - 无显示节点默认批处理,不硬凑 GUI:形式验证回归本来就该脚本化——
fm_shell -f run.tcl不依赖任何显示,可进 LSF/cron,GUI 只留给交互式看 unmatched 比较点,这是最重要的退路。 - 装机一次补齐图形依赖:把 libXScrnSaver、libXft、libXext、openmotif 与基础字体包写进服务器基线清单,比每次按 ldd 报错挤牙膏便宜。
- 异常退出后先清残留:GUI 崩溃重起前养成查
fsgui残留进程与~/.synopsys锁文件的习惯,避免把锁问题误判成安装问题。 - license 特性清单留档:向 CAD 管理员确认哪些席位含 GUI 特性、峰值占用多少,看到 LIC 报错一分钟内就能判断是等席位还是换授权。
这一篇在知识体系里的位置
本篇是 EDA 排错速查簇中「Formality 图形环境」节点的 FAQ 页,与 Formality license 获取失败速查(签到支线的处置全文)、Formality 版本不匹配速查(启动后的版本与平台兼容问题)互为邻居;Formality 的标准 setup-match-verify 流程见 形式验证(二):LEC/Formality,全簇索引在 开源/EDA 工具报错排查总览。
一句话总结
Formality GUI 启动失败,先跑一次 fm_shell 做分叉:命令行也失败就转 license 或版本线,命令行正常则锁定图形通道——echo $DISPLAY 为空就用 ssh -X/-Y 重连且不手设 DISPLAY,有值仍被拒就删 ~/.Xauthority 重连并查服务端 X11Forwarding 与 xauth,用 xclock 验证通道后再启动 GUI;倒在 libXss/libXft 一类共享库或段错误的,用 ldd 列缺库并核对 OS/glibc 认证组合,VNC 白屏方块字补基础字体,LIC 报错走授权线,假占用清 fsgui 残留进程与 ~/.synopsys 锁;什么都不通时记住退路:验证回归本来就该用 fm_shell -f 批处理,GUI 从来不是必需品。