Экспортирование сюжета как изображения в 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. Там, где это необходимо, передний фронт автоматически запускается в фоновом режиме при экспорте графики из сеанса командной строки.