Экспортирование сюжета как изображения в Mathematica на машине без X11 (т.е. Без привлечения интерфейса)

Рассмотрим следующий диалог с интерфейсом командной строки с ядром:

$ math
Mathematica 6.0 for Linux x86 (32-bit)

In[1]:= p = Plot[x^2, {x,-1,1}]
Out[1]= -Graphics-

In[2]:= Export["foo.png", p]
Out[2]= foo.png

Это отлично работает на машине с $Version = 6.0 for Linux x86 (32-bit) (June 2, 2008), но сбой на машине с $Version = 7.0 for Linux x86 (64-bit) (November 11, 2008) со следующей ошибкой:

Export::nofe: A front end is not available; export of PNG 
requires a front end.

С аналогичными ошибками для любого другого формата изображения, о котором я могу думать.

Итак, вопрос в том, как я могу получить ядро ​​Mathematica, без него, для экспорта изображений? Почему он работает без сбоев в Mathematica 6.0? Если приведенный выше пример работает для вас в версии 7, пожалуйста, дайте мне знать!

PS: Версия 7 представила функцию UsingFrontEnd, но с ошибкой

Developer`UseFrontEnd::nofestart: 
Unable to launch a front end. Proceeding without a front end.

предположительно, потому что X11 не установлен на машине.

Добавление

Оказывается, в этом отношении нет разницы между версией 6 и версией 7. Скорее всего, на машине с версией 6 внешний интерфейс вызывался молча. Проблема с другой машиной, как ясно из ответов на этот вопрос, заключается в том, что не было X-сервера, и поэтому интерфейс не мог быть вызван.

Ответ 1

Вам нужен внешний интерфейс для экспорта графики из MathKernel. Оформление графики полностью покрывается интерфейсом. Без Front End у вас нет графики для экспорта. Нет обходного пути.

Что вы можете сделать, если у вас есть рабочий интерфейс, следует использовать:

UseFrontEnd[Export[filename,graphics]]

Это вызовет переднюю часть терминала, позволяющую экспортировать графику.

Чтобы иметь рабочий интерфейс на Linux-машине без установки X-сервера и менеджера окон, у вас есть следующие возможности:

  • Используйте X-дисплей с другого устройства. См. http://www.hungry.com/~jamie/xexport.html. В основном это сводится к настройке переменной окружения export DISPLAY=machine_address:0.0 или передаче во время каждой опции выполнения -display machine_address:0.0.

  • Установить локально Xvfb, который является фрейм-буфером X-сервера. Это довольно простой и простой в использовании. См. Википедия в Xvfb. Вы можете установить X-дисплей при запуске Xvfb Xvfb :display_nr &, а затем использовать его как в предыдущей опции.

Ответ 2

Экспортировать графику также требуется передняя часть в версии 6. В свою очередь, передняя часть может потребовать X (ведь даже некоторые из 2D-графиков требуют ускорения 3D-графики...)

У меня только v6 для Windows. Там, где это необходимо, передний фронт автоматически запускается в фоновом режиме при экспорте графики из сеанса командной строки.