Стартиране на inkscape без X сървър

Изпълнявам inkscape от PHP процес на Gearman на *nix-подобни системи (OS X 10.6.8, Linux с различни вкусове), за да конвертирам SVG изображения в PNG или PDF. Използвам нещо подобно (тук са добавени нови редове само за яснота):

/full/path/to/inkscape -z \
    --export-png=/path/to/output.png \
    --export-width=100 --export-height=100 \
    /path/to/input.svg

Работи, но въпреки флага -z („Не използвайте X сървър“) получавам това в моя конзолен изход (на OS X):

Setting Language: .UTF-8

(process:44699): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.
Xlib:  extension "RANDR" missing on display "/tmp/launch-WvcqRh/org.x:0".

Това ми подсказва, че inkscape зарежда повече библиотеки, отколкото трябва, и че може да бъде по-бързо, ако не се опита да се свърже с X сървър. Въпреки това, освен използването на флага -z/--without-gui, не съм сигурен какво да опитам. Производителността на моята машина за разработка все още е под секунда (поне за тривиални SVG файлове), но бих искал да изчистя това, ако мога. Дори ако най-добрият отговор е просто „потискане на изхода за грешка“!

Може би ако изключа или нулирам bash DISPLAY env var? Изобщо не съм запознат с X.


person halfer    schedule 01.04.2012    source източник


Отговори (3)


Да, ако искате вашите програми изобщо да не намират X, можете unset DISPLAY преди да стартирате процеса.

Можете също да използвате Xvfb, за да „фалшифицирате“ X сървър: http://en.wikipedia.org/wiki/Xvfb

Може също да искате да разгледате тези инструменти:

Техният изходен код е наистина малък.

person pzanoni    schedule 03.04.2012
comment
Благодаря, ще пробвам DISPLAY и ще докладвам! Ако това не даде резултати, ще опитам Xvfb, но ще стартирам тази система на много нисък VPS, така че искам да сведа допълнителния си софтуер до минимум. - person halfer; 03.04.2012
comment
между другото; Опитах svg2pdf, със сигурност на моя Mac, и изглежда не върши много добра работа за изобразяване на Inkscape SVG документ - всички различни стилове на шрифтове от едно семейство бяха изобразени като вариант по подразбиране. (Може би има нещо, което трябва да конфигурирам тук, но inkscape просто го прави на място). - person halfer; 03.04.2012
comment
Опитах DISPLAY='' inkscape --export-png=output.png input.svg, а също и bash скрипт с unset DISPLAY и след това командата inkscape, и нито едно от двете не потиска "Gtk-WARNING". Подобно на вас, по-скоро очаквах това да проработи - бах! - person halfer; 06.04.2012
comment
В момента нямам време да проверявам Xvrb, но мисля, че ще свърши работа (за което давам отметка). Още веднъж благодаря за отговора. Междувременно просто ще потискам грешките с 2>/dev/null! :-) - person halfer; 06.04.2012
comment
Ако аз unset DISPLAY получавам три грешки CRITICAL (dbus_g_proxy_nw_for_name...) - person nowox; 07.08.2020

Друг начин за потискане на изхода, като същевременно се запази способността да се реагира на истински грешки, е да се извика Inkscape от Python.

import subprocess               # May want to use subprocess32 instead

cmd_list = [ '/full/path/to/inkscape', '-z', 
             '--export-png', '/path/to/output.png',
             '--export-width', 100,
             '--export-height', 100,
             '/path/to/input.svg' ]

# Invoke the command.  Divert output that normally goes to stdout or stderr.
p = subprocess.Popen( cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE )

# Below, < out > and < err > are strings or < None >, derived from stdout and stderr.
out, err = p.communicate()      # Waits for process to terminate

# Maybe do something with stdout output that is in < out >
# Maybe do something with stderr output that is in < err >

if p.returncode:
    raise Exception( 'Inkscape error: ' + (err or '?')  )

В моята система Mac OS неприятните съобщения за състояние (описани от оригиналния плакат) завършват в err. Плюс това, за конкретна работа, която изпълних, има допълнителни съобщения, които завършват в out:

Background RRGGBBAA: ffffff00
Area 0:0:339:339 exported to 100 x 100 pixels (72.4584 dpi)
Bitmap saved as: /path/to/output.png

(Входният svg файл беше с размер 339 на 339 пиксела.)

person Iron Pillow    schedule 05.10.2017

person    schedule
comment
Здравейте, благодаря за това. Можете ли да ми обясните това по-подробно? Не съм потребител на shell на ниво експерт, но съм объркан от аргумента --export-plain-svg към echo. Същността на вашата техника ли е, че данните за изображението се подават към командата inkscape с null DISPLAY env var? - person halfer; 16.01.2014