wkhtmltopdf: не вдається підключитися до X-сервера


113

Я використовував wkthmltopdf для перетворення html в PDF-документи на ходу на моєму веб-сервері Linux. Програма спочатку потрібно X11 або аналогічний сервер X правильно працювати, але через багато запитів від розробників , щоб це працювати на серверах без графічного інтерфейсу, я впевнений , що він працює віртуальний сервер X в статичної версії . Я використовую статичну (автономну) версію програми, і вона чудово працює! Я б поклав виконуваний файл у папку та запустив:

./wkhtmltopdf file1.html file2.pdf

Однак я хотів би встановити цю програму в цілому. Я використовував apt-get install wkhtmltopdf(тільки що встановлений вчора), і оскільки я працюю на 64-бітній системі, мені також знадобився apt-get install ia32-libs. Після установки я можу знайти таку версію:

wkhtmltopdf --version

вихід:

Name:
  wkhtmltopdf 0.9.9

License:
  Copyright (C) 2008,2009 Wkhtmltopdf Authors.



  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
  This is free software: you are free to change and redistribute it. There is NO
  WARRANTY, to the extent permitted by law.

Authors:
  Written by Jakob Truelsen. Patches by Mário Silva, Benoit Garret and Emmanuel
  Bouthenot.

Тепер, коли я намагаюся запустити програму, встановлену через aptitude, я отримую таку помилку:

wkhtmltopdf: cannot connect to X server

Хтось знає, як я можу це виправити? Я думаю, що в цій версії відсутній віртуальний сервер X або щось подібне.

Відповіді:


206

або спробуйте це (з http://drupal.org/node/870058 )

  1. Завантажте wkhtmltopdf. Або краще встановити його за допомогою менеджера пакунків:

    sudo apt-get install wkhtmltopdf
    
  2. Витягніть його і перемістіть до нього /usr/local/bin/

  3. Перейменуйте його wkhtmltopdfтак, щоб тепер у вас був виконуваний файл/usr/local/bin/wkhtmltopdf
  4. Встановити дозволи: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Встановіть необхідні пакети підтримки.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Перевірте, чи працює він: запустіть

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

    Якщо це працює, значить, ви закінчили. Якщо ви отримаєте помилку "Не вдається підключитися до X-сервера", продовжуйте число 7.

  7. Нам потрібно запустити його без голови на "віртуальному" x сервері. Ми зробимо це з пакетом під назвою xvfb.

    sudo apt-get install xvfb
    
  8. Нам потрібно написати невеликий скрипт оболонки, щоб обернути wkhtmltopdf у xvfb. Зробіть файл, викликаний wkhtmltopdf.shі додайте наступне:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Перемістіть цей скрипт оболонки до /usr/local/binта встановіть дозволи:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Перевірте, чи працює він ще раз: запустіть

    /usr/local/bin/wkhtmltopdf.sh http://www.google.com test.pdf
    

Зауважте, що http://www.google.com може нанести помилку на кшталт "Готовий ResourceObject отримав сигнал, що закінчується завантаженням. Це може бути вказівкою на завантаження iframe для тривалого завантаження." Ви можете протестувати на більш простій сторінці, як-от http://www.example.com.


1
Я спробував цей підручник спочатку, і він не дуже працював, також мені не сподобалося створювати обгортку з символічним посиланням. Як я писав у своїй відповіді, якщо ви просто перемістите статичний виконуваний файл у /usr/bin/каталог, ви можете використовувати його з будь-якого місця. Вони додали віртуальний x-сервер до статичного виконуваного файлу, тому не потрібно робити сценарій обгортки.
jeffery_the_wind

це працювало для мене .. в деяких ситуаціях. Я думаю, що встановлення відсутніх 32-бітових бібліотек виправили це для мене - дякую за цю пораду
TimoSolo

Що If you get the error "Cannot connect to X server" then continue to number 6.повинно означати твердження під номером 6 ? Мене це дуже бентежить. Ви хочете сказати, щоб продовжити число 7?
Ноз

Так, саме так мається на увазі ... в оригінальній статті були неправильно пронумеровані елементи. Тож продовжуйте # 7
dwaz

спасибі, перенумерований. Пропонована відповідь має працювати в більшості випадків, тому спробуйте спочатку
TimoSolo

61

Це вирішило для мене питання:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf

Це найпростіший і безпечний підхід, оскільки стандартна установка wkhtmltopdf не включає x-сервер.
Петро

Це як вирішити "не вдається підключитися до X-сервера" в переважній більшості випадків.
tripleee

2
На дистрибуції на основі Redhat використовують sudo yum install xorg-x11-server-Xvfbресп. sudo dnf install xorg-x11-server-Xvfb.
ТНТ

28

Я намагався це зробити, sudo apt-get install wkhtmltopdfале без жодного успіху. Натомість рекомендую спробувати:

  1. Завантажте останню версію файлу (.11 rc1):

    wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  2. віджати його:

    tar -vxf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  3. перейменуйте його:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod це у виконуваний файл:

    chmod a+x wkhtmltopdf

  5. помістіть його в / usr / bin:

    sudo mv wkhtmltopdf /usr/bin


code.google.com/p/wkhtmltopdf/isissue/detail?id=730 здається, що проти 11.0_rc1 є деякі проблеми
montrealmike

це працювало для мене, але покоління PDF не вдалося, тому я замінив вищезазначені інструкції наhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87

1
завантаження wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz працює для мене зараз. Чомусь останніх немає.
chasetheskyforever

1
Я можу підтвердити, що це працювало для мене: (отримання останньої стабільної версії atm) wget download.gna.org/wkhtmltopdf/0.12/0.12.3/… tar -vxf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz chmod a + x wkhtmltox / bin / wkhtmltopdf sudo mv wkhtmltopdf / usr / local / bin / wkhtmltopdf
Magico

27

Щойно вдалося:

1- Завантажити залежності wkhtmltopdf

# apt-get install wkhtmltopdf

2- Завантажити з джерела

# wget http://downloads.sourceforge.net/project/wkhtmltopdf/xxx.deb

# dpkg -i xxx.deb

3- Спробуйте

# wkhtmltopdf http://google.com google.pdf

Його добре працює

Це працює!


Мені довелося бігти apt-get install -fпісля встановлення пакета, щоб отримати залежності. Інакше працював як шарм. Багато чого віддають перевагу цьому методу перед іншими описаними.
dmuir

2
Я згоден. Це рішення привело мене до нинішньої версії. Команда dpkg -i генерувала деяку неоднозначну інформацію, але незалежно, вона спрацювала: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debдаліsudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Білл Батлер

це все-таки краще рішення, яке надається цим питанням.
проти

1
Мені довелося бігти sudo mv wkhtmltopdf /usr/binз /usr/local/bin/каталогу, але це спрацювало чудово! Я спробував будь-який інший метод на цій сторінці, не
пощастивши

це повинно отримати більш високу оцінку як найновіше і простіше рішення, не покладаючись на інші пакунки (що також вирішує проблему "Не вдається підключитися до сервера X"). і у мене проблеми, коли відносний шлях css не завантажується під час використання xvfb.
зиник

16

Я знайшов спосіб вирішити цю проблему без підробленого сервера X. У новітній версії wkhtmltopdf не потрібен X-сервер для роботи, але він не входить в офіційні сховища Linux.

Рішення для Ubuntu 14.04.4 LTS (надійний) i386

$ sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-i386.deb
$ sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-i386.deb
$ wkhtmltopdf http://www.google.com test.pdf

Рішення для Ubuntu 14.04.4 LTS (надійний) amd64

$ sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-amd64.deb
$ sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-amd64.deb
$ wkhtmltopdf http://www.google.com test.pdf

Користувач felixhummel отримав дуже гарне рішення, але сховище з утилітом змінилося.


чомусь це працювало для мене, і новіша версія (0,13) не була вам вдячна!
тальсибон

Це рішення, яке працювало для мене, я спробував багато інших дозволів, але жодна з них не працювала. Як я новачок у середовищі php / Laravel, тому я не маю глибоких знань про ці бібліотеки та залежності, але це рішення приголомшливо просто врятувало мої години :)
Amit

Дійсно, це рішення є приголомшливим сьогодні я перейшов до виробництва і отримав ту саму проблему, не витрачаючи жодного разу, я просто запускаю це рішення, і воно спрацювало безперечно :)
Amit

gna.org зараз закритий. :(
Jya

11

Розкриваємо відповідь Тимофія ...

Якщо ви веб-розробник, який хоче використовувати wkhtmltopdf як частину свого веб-додатка, ви можете просто встановити його у свою /usr/bin/папку так:

cd /usr/bin/
curl -C - -O http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
tar -xvjf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
mv wkhtmltopdf-i386 wkhtmltopdf

Тепер ви можете запустити його будь-де, використовуючи wkhtmltopdf.

Я особисто використовую бібліотеку Snappy в PHP. Ось приклад того, як легко створити PDF:

<?php

// Create new PDF
$pdf = new \Knp\Snappy\Pdf('wkhtmltopdf');

// Set output header
header('Content-Type: application/pdf');

// Generate PDF from HTML
echo $pdf->getOutputFromHtml('<h1>Title</h1><p>Your content goes here.</p>');

11

Оновлення до останньої версії wkhtmltopdf від SourceForge (0,12 станом на цей час). Для запуску не потрібен X-сервер.

Приклад для Ubuntu 14.04:

$ cd /tmp/                                                                                                                                                                                                       
$ wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
$ dpkg -x wkhtmltox-0.12.2.1_linux-trusty-amd64.deb foo

$ echo '<p>hi</p>' | ./foo/usr/local/bin/wkhtmltopdf - /tmp/hi.pdf
Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done                                                                      

$ head -n3 /tmp/hi.pdf 
%PDF-1.4
1 0 obj
<<

1
Я встановив 0.12.1, і це все ще спонукає мене не можу підключитися до X-сервера. Я щось пропускаю?
Алесь Матич

Спробував це ще раз, і це працює для мене (не встановлюйте, просто щоб ящик був чистим). Див. Редагування вище.
felixhummel

9

для 14.04.1-Ubuntu https://wkhtmltopdf.org/downloads.html

wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz -O mktemp.tar.xz
tar xf mktemp.tar.xz
sudo cp wkhtmltox/bin/wkhtmltopdf /usr/bin/wkhtmltopdf
sudo chmod +x /usr/bin/wkhtmltopdf
rm mktemp.tar.xz
rm wkhtmltox -rf
apt-get update
apt-get install -y libxrender1 libxtst6 libxi6
wkhtmltopdf http://www.google.com test.pdf

6
sudo -i
apt-get install wkhtmltopdf xvfb libicu48
mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdf-origin
touch /usr/bin/wkhtmltopdf && chmod +x /usr/bin/wkhtmltopdf && cat > /usr/bin/wkhtmltopdf << END
#!/bin/bash

/usr/bin/xvfb-run -a -s "-screen 0 1024x768x24" /usr/bin/wkhtmltopdf-origin  "\$@"
END

6

Проблема, ймовірно, у старій версії wkhtmltopdf - версія 0.9 із сховища дистрибутива потребує запуску X-сервера, але поточна версія - 0.12.2.1 цього не потребує - може працювати без голови.

Завантажте пакет для свого розповсюдження з http://wkhtmltopdf.org/downloads.html та встановіть його - для Ubuntu:

sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb

6

wkhtmltopdf> 0.11не має цієї X-serverпроблеми.
Отже, встановлення 0.12.2.1на сервер Linux.

  1. Спочатку встановіть сервер xvfb:

    sudo apt-get install xvfb
    
  2. Отримайте необхідну версію wkhtmltopdf від http://wkhtmltopdf.org/downloads.html

  3. Встановити wkhtmltopdf:

    sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
    

    або встановити за допомогою wget

    URL='http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb'; FILE=`mktemp`; wget "$URL" -qO $FILE && sudo dpkg -i $FILE; rm $FILE
    
  4. Встановіть залежність (якщо потрібно):

    sudo apt-get -f install
    
  5. Створіть симбічне посилання в /usr/local/bin/:

    echo 'exec xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"' | sudo tee /usr/local/bin/wkhtmltopdf.sh >/dev/null
    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  6. Тепер спробуйте нижче, і це має спрацювати,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

5

Я просто зрозумів, що я можу просто перемістити статичний виконуваний файл у /usr/bin/каталог і виконати його з будь-якого місця.



1

Я дотримувався тут інструкцій і змусив роботу wkhtmltopdf для мене, але я хотів би запропонувати трохи перспективи, які я виявив, роблячи свій маленький танець wkhtmltopdf- xvfb.

Це важливо, тому що та сама причина, яка змушує його кинути сумнозвісну cannot connect to X serverпомилку, також призводить до запуску із суворими обмеженнями, навіть якщо ви надаєте йому X-сервер. Ці обмеження включають неможливість прийому декількох джерел введення, встановлення колонтитулів та колонтитулів тощо (перегляньте розділ " Понижена функціональність" в посібнику ).

wkhtmltoxсам по собі не вимагає X11, однак він використовує бібліотеки QT, які це роблять. Проте в інших версіях розробники wkthmltox створили патч для QT, що дозволяє йому працювати з X11.

В даний час деякі версії побудовані на основі виправленого QT, а деякі - ні. Ви можете перевірити свою версію, запустивши wkhtmltopds --version. У кінці повинно бути рядокCompiled against wkhtmltopdf patched qt.

Отже, на закінчення, якщо ви встановите та використовуєте версію, яка використовує виправлені бібліотеки, вона повинна працювати на сервері linux без xvfbсервера, як я можу підтвердити.


1

рішення для Centos7 :

yum -y install xorg-x11-fonts-75dpi \
               xorg-x11-fonts-Type1 \
&& rpm -Uvh http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm

Ми стикаємося з цією проблемою всередині контейнерів докера, і вищевказана установка має wkhtmltopdf з виправленим QT


2
URL-адреса для мене не працює, я використав цей:sudo rpm -Uvh https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
WebOrCode

1

Зверніть увагу: ваш файл може бути wkhtmltopdf.shабо wkhtmltopdf, перевірте його на другому кроці

Ви повинні скопіювати його в каталог: / usr / local / bin , зробити sur його виконуваним і додати symlink з wkhtmltopdf.sh, як:

1- команда:

sudo apt-get install wkhtmltopdf

2 - вставити двійковий файл у каталог / usr / bin, щоб браузер не мав дозволу на виконання цього каталогу. Ви повинні скопіювати wkhtmltopdf.sh у каталог / usr / local / bin, оскільки браузер має дозвіл у цьому каталозі, наприклад:

sudo cp /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf.sh

3 - Після здійснення сюрпризу бінарний файл має дозвіл на виконання, наприклад:

sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh

4 - тож тепер ви можете протестувати, це працює так:

/usr/local/bin/wkhtmltopdf.sh http://www.google.com google.pdf

це змусить завантажити pdf у поточний каталог у своєму терміналі

5 - Необов’язково тепер ви можете додати symlink у свій каталог / usr / local / bin like

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf

0
  1. Завантажте файл за цим посиланням
  2. Витягніть його та перемістіть виконуваний файл (/ wkhtmltox / bin / wkhtmltopdf) в /usr/bin/
  3. Перейменуйте його на wkhtmltopdf, якщо поточне ім'я не є wkhtmltopdf. Так що тепер у вас є виконуваний файл/usr/bin/wkhtmltopdf
  4. Встановити дозволи: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Встановіть необхідні пакети підтримки. sudo apt-get install openssl build-basic xorg libssl-dev
  6. Тепер перевірте з wkhtmltopdf http://www.google.com test.pdf підказкою: детальна інформація за цим посиланням


0

Якщо ви налаштуєте wkhtmltopdf для Rails або Somethings у Centos, ви можете виконати наступні кроки нижче:

  1. Перейдіть на сторінку https://wkhtmltopdf.org/downloads.html і скопіюйте посилання файлу rpm.

У сервері centos bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Ви отримаєте шлях до wkhtmltopdf.

  1. Налаштування для wicked_pdf або pdfkit з контуром на кроці 4. Це зразок конфігурації з wickedpdf. config / ініціалізатори / wicked_pdf.rb

    if Rails.env != "production"
        path = %x[which wkhtmltopdf].gsub(/\n/, "")
    else
        path = "path_of_wkhtmltopdf_in_step_4"
    end
    WickedPdf.config = { exe_path: path }
    
  2. Перезавантажте сервер.

Зроблено.


0

Для 64-бітного використання:

wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2

tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2

sudo mv wkhtmltopdf-amd64 /usr/bin/wkhtmltopdf

sudo chmod +x /usr/bin/wkhtmltopdf


0

Просто скажіть сервісу Qt не використовувати X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.