![如何以批处理模式运行 Asymptote,而不创建窗口?](https://linux22.com/image/316968/%E5%A6%82%E4%BD%95%E4%BB%A5%E6%89%B9%E5%A4%84%E7%90%86%E6%A8%A1%E5%BC%8F%E8%BF%90%E8%A1%8C%20Asymptote%EF%BC%8C%E8%80%8C%E4%B8%8D%E5%88%9B%E5%BB%BA%E7%AA%97%E5%8F%A3%EF%BC%9F.png)
我正在使用 asymptote 在 LaTeX 文档中生成大量图像。这些图像从 asymptote 转换为 PDF,如下所示:
pdflatex text.tex
asy text-*.asy
pdflatex text.tex
但是,asymptote 坚持要打开一个窗口(短暂闪烁后消失,没有任何内容)。因此,我无法使用 ssh 从远程计算机编译我的文档:
asy x.asy
freeglut (asy): failed to open display ''
有没有办法在某些不需要窗口系统(DISPLAY
在 Unix 中没有定义)的模式下运行渐近线?
我已经尝试过-noView
和-nointeractiveView
,但 Asymptote 仍会尝试打开一个窗口。
答案1
Asymptote 默认禁用离屏渲染。要启用此功能,请将-offscreen
选项传递给asy
:
asy -offscreen text-*.asy
或者你可以创建一个config.asy
配置文件并包括以下内容:
import settings;
offscreen=true;
答案2
看起来事情已经发生了变化,第一个方法(-offscreen
)其他答案将被解释为即输出到名为或 的-o ffscreen
文件。ffscreen.eps
ffscreen.pdf
第二种方法settings.offscreen
根本不起作用。
一个选择是使用从源代码构建渐近线--enable-offscreen
。
不幸的是,对我来说,屏幕外的 OSMesa 存在一些未知问题 -https://github.com/vectorgraphics/asymptote/issues/392有详细信息。
因此,另一个选择是运行无头/虚拟 X 服务器。
- 首先,运行
Xvfb :1
启动一个虚拟X服务器,监听服务器1上的连接。 - 然后,告诉 Asymptote 使用哪个显示器:
DISPLAY=:1 asy a.asy
或者asy --glOptions="-display :1" a.asy
两者都可以。
备注:(没有很好记录的)选项-glOptions
将选项传递给glutInit()
。
注意Xvfb
似乎不使用 GPU,因此渲染速度可能较慢。您也可以看看https://superuser.com/a/503355/577463了解无头 X 服务器的其他选项。