Libreoffice --headless отказывается конвертировать, если не root, не будет работать с PHP скрипт

Запуск безголового сервера Ubuntu 12.что-то.

root @server: chown www-data /my/path/ -R

root @server: chgrp www-data /my/path/ -R

root @server: chmod 755 /my/path/ -R

root @server: libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

convert /my/path/foo.ppt -> /my/path/foo.pdf

Работает как шарм.


root @server: sudo -i -u www-data

$libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

convert /my/path/foo.ppt -> /my/path/foo.pdf
Error: Please reverify input parameters...

Блин.


root @server: sudo -i -u someotheruser

$libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

convert /my/path/foo.ppt -> /my/path/foo.pdf
Error: Please reverify input parameters...

Блин.

У кого-нибудь есть идея? Попытка исследовать это только смутила меня больше. Возможно, это ошибка или какая-то зависимость?

Ответ 1

Наконец-то я нашел ответ на этот вопрос... Добавить:

export HOME=/tmp &&

в начало, поэтому:

export HOME=/tmp && libreoffice --headless --convert-to pdf:writer_pdf_Export /my/path/foo.ppt --outdir /my/path

Это сработало для меня на CentOS 6.5 и как shell_exec() в PHP.

Ответ 2

Мы столкнулись с той же проблемой при запуске soffice двоичного безголового (LibreOffice 5.0.5.2) в контейнере CloudFoundry (Diego) в составе приложения NodeJS.

Кажется, что более новые версии libreoffice не ожидают записываемого HOME, но попытайтесь записать в TMPDIR.

strace показал: 8349 mkdir("app/tmp", 0777) = -1 ENOENT (No such file or directory) 8349 open("app/tmp/lu8349pzgegi.tmp", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 ENOENT (No such file or directory)

с TMPDIR=app/tmp

Мы исправили его, установив TMPDIR в каталог, который можно записать пользователем приложения, т.е. TMPDIR=/tmp в CloudFoundry:

process.env.TMPDIR = "/tmp";

Ответ 4

Как сказал Яцек в своем комментарии, сделайте пользователя, которым вы пытаетесь выполнить команду, как sudoer без пароля. Затем измените команду libreoffice на

sudo libreoffice <rest of command>

Работал для меня. У меня была такая же проблема.

Ответ 5

Все, что вам нужно сделать - создать папку "/var/www/.config". Когда вы пытаетесь преобразовать какой-либо файл в www-data, пользователю libreoffice требуется ".config" dir в домашнем каталоге пользователя. Но у libreoffice нет прав на создание такой папки. Домашний каталог пользователя www-data по умолчанию - "/var/www". Так что просто запустите команды:

sudo mkdir /var/www/.config
sudo chmod 700 /var/www/.config
sudo chown www-data /var/www/.config

Ответ 6

Я смог преодолеть эту проблему, сначала удалив файл, а затем запустив файл конвертирования. Похоже, перезапись файла не удалась из-за проблем с владельцем файла.

Ответ 7

Я бы посмотрел на

http://dag.wieers.com/home-made/unoconv/

Этот инструмент должен быть более подходящим для правильного преобразования ваших файлов. Он доступен в репозиториях ubuntu, поэтому проблем с установкой не должно быть.

Ответ 8

Вы не можете запустить libreoffice soffice двоичный с пользователем www-data. Вместо этого используйте пользователя с привилегиями sudo. Проверьте мой Gist https://gist.github.com/nathanielvarona/423bda9e4a8a4f0f9bbf#file-soffice-listener-sh

И так как вы собираетесь использовать это в PHP. Просто попробуйте PHP-FPM. Установите его, а затем измените файл /etc/php 5/fpm/pool.d/www.conf.

Из

user = www-data 
group = www-data

To:

user = ubuntu
group = ubuntu

Я успешно запускаю это в AWS EC2, а также с моими виртуальными машинами VBox.