wkhtmltopdf: nie można połączyć się z serwerem X.

113

Używam wkthmltopdf do konwertowania dokumentów HTML na PDF w locie na moim serwerze sieciowym Linux. Program początkowo wymagał X11 lub podobnego serwera X do prawidłowego działania, ale dzięki wielu żądaniom programistów, aby ten działał na serwerach bez GUI, jestem prawie pewien, że uruchamia wirtualny serwer X w wersji statycznej . Używałem statycznej (samodzielnej) wersji programu i działa świetnie! Umieściłbym plik wykonywalny w folderze i uruchomiłbym:

./wkhtmltopdf file1.html file2.pdf

Chciałbym jednak zainstalować ten program w całym systemie. Użyłem apt-get install wkhtmltopdf(właśnie zainstalowałem wczoraj), a ponieważ używam systemu 64-bitowego, potrzebowałem również apt-get install ia32-libs. Po instalacji mogę znaleźć taką wersję:

wkhtmltopdf --version

wynik:

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.

Teraz, gdy próbuję uruchomić program zainstalowany przez aptitude, pojawia się następujący błąd:

wkhtmltopdf: cannot connect to X server

Czy ktoś wie, jak mogę to naprawić? Wydaje mi się, że w tej wersji brakuje wirtualnego serwera X lub czegoś takiego.

jeffery_the_wind
źródło

Odpowiedzi:

206

lub spróbuj tego (z http://drupal.org/node/870058 )

  1. Pobierz wkhtmltopdf. Lub lepiej zainstaluj go za pomocą menedżera pakietów:

    sudo apt-get install wkhtmltopdf
    
  2. Wyodrębnij go i przenieś do /usr/local/bin/

  3. Zmień nazwę na wkhtmltopdftak, aby mieć teraz plik wykonywalny pod adresem/usr/local/bin/wkhtmltopdf
  4. Ustaw uprawnienia: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Zainstaluj wymagane pakiety wsparcia.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Sprawdź, czy działa: uruchom

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

    Jeśli to zadziała, to koniec. Jeśli pojawi się błąd „Nie można połączyć się z serwerem X”, przejdź do punktu 7.

  7. Musimy uruchomić go bezgłowy na „wirtualnym” serwerze x. Zrobimy to za pomocą pakietu o nazwie xvfb.

    sudo apt-get install xvfb
    
  8. Musimy napisać mały skrypt powłoki, aby zawijać wkhtmltopdf w xvfb. Utwórz plik o nazwie wkhtmltopdf.shi dodaj:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Przenieś ten skrypt powłoki do /usr/local/bini ustaw uprawnienia:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Sprawdź, czy działa ponownie: uruchom

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

Pamiętaj, że http://www.google.com może wyświetlić błąd, taki jak „Gotowy obiekt ResourceObject odebrał sygnał zakończenia ładowania. Może to wskazywać, że ładowanie elementu iframe trwa zbyt długo”. Możesz przetestować na prostszej stronie, takiej jak http://www.example.com.

TimoSolo
źródło
1
Pierwotnie wypróbowałem ten samouczek i nie do końca zadziałał, a także nie lubiłem tworzyć opakowania z dowiązaniem symbolicznym. Jak napisałem w mojej odpowiedzi, jeśli po prostu przeniesiesz statyczny plik wykonywalny do /usr/bin/katalogu, możesz go użyć z dowolnego miejsca. Dodali wirtualny x-serwer do statycznego pliku wykonywalnego, więc nie ma potrzeby tworzenia skryptu opakowującego.
jeffery_the_wind
zadziałało dla mnie… w niektórych sytuacjach. Myślę, że zainstalowanie brakujących bibliotek 32-bitowych naprawiło to dla mnie - dzięki za tę wskazówkę
TimoSolo
Co If you get the error "Cannot connect to X server" then continue to number 6.ma oznaczać stwierdzenie w numerze 6 ? Jestem tym bardzo zdezorientowany. Czy chcesz powiedzieć, żeby przejść do numeru 7?
Noz,
Tak, o to chodzi ... w oryginalnym artykule błędnie ponumerowano pozycje. A więc przejdź do # 7
dwaz
dzięki, zmieniono numerację .. Jednak sugerowana odpowiedź powinna działać w większości przypadków, więc spróbuj najpierw
TimoSolo
61

To rozwiązało problem:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
syzspectroom
źródło
Jest to najłatwiejsze i najbezpieczniejsze podejście, ponieważ standardowa instalacja wkhtmltopdf nie obejmuje x-serwera.
Peter
Oto jak rozwiązać problem braku połączenia z serwerem X w większości przypadków.
tripleee
2
W dystrybucjach opartych na Redhat używają sudo yum install xorg-x11-server-Xvfbodp. sudo dnf install xorg-x11-server-Xvfb.
TNT,
28

Próbowałem to zrobić, sudo apt-get install wkhtmltopdfale bez powodzenia. Zamiast tego polecam spróbować:

  1. Pobierz najnowszy plik wykonywalny (.11 rc1):

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

  2. rozpakuj to:

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

  3. zmień jego nazwę:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod do pliku wykonywalnego:

    chmod a+x wkhtmltopdf

  5. umieść go w / usr / bin:

    sudo mv wkhtmltopdf /usr/bin

Yakob Ubaidi
źródło
code.google.com/p/wkhtmltopdf/issues/detail?id=730 wygląda na to, że vs 11.0_rc1 ma pewne problemy
montrealmike
to zadziałało dla mnie, ale generowanie pdf nie powiodło się, więc zamieniłem powyższe instrukcje nahttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87
1
pobieranie wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz działa teraz dla mnie. Z jakiegoś powodu najnowsze nie.
chasetheskyforever
1
Mogę potwierdzić, że to zadziałało: (pobieranie najnowszej stabilnej wersji 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

Właśnie to zrobiłem:

1- Aby pobrać zależności wkhtmltopdf

# apt-get install wkhtmltopdf

2- Pobierz ze źródła

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

# dpkg -i xxx.deb

3 Spróbuj

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

Działa dobrze

To działa!

Sfblaauw
źródło
Musiałem uruchomić apt-get install -fpo zainstalowaniu pakietu, aby uzyskać zależności. W przeciwnym razie działało jak urok. Znacznie wolę tę metodę od innych opisanych.
dmuir
2
Zgadzam się. To rozwiązanie doprowadziło mnie do aktualnej rew. Polecenie dpkg -i wygenerowało niejednoznaczne informacje, ale mimo wszystko zadziałało: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debpo czym nastąpiłosudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler,
to wciąż lepsze rozwiązanie tego pytania.
porównaniu z
1
Musiałem biec sudo mv wkhtmltopdf /usr/binz /usr/local/bin/katalogu, ale to działało świetnie! Wypróbowałem każdą inną metodę na tej stronie bez powodzenia ...
shaneparsons
powinno to zapewnić wyższą liczbę głosów jako najnowsze i prostsze rozwiązanie bez polegania na innych pakietach (co również rozwiązuje problem „Nie można połączyć się z serwerem X”). i mam problemy ze względną ścieżką css, która nie jest ładowana podczas korzystania z xvfb.
zynick
16

Znalazłem sposób na rozwiązanie tego problemu bez fałszywego serwera X. W najnowszej wersji wkhtmltopdf nie potrzebujesz X serwera do pracy, ale nie ma go w oficjalnych repozytoriach Linuksa.

Rozwiązanie dla Ubuntu 14.04.4 LTS (zaufane) 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

Rozwiązanie dla Ubuntu 14.04.4 LTS (zaufane) 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

Użytkownik felixhummel otrzymał bardzo dobre rozwiązanie, ale repozytorium z utylite uległo zmianie.

PRIHLOP
źródło
z jakiegoś powodu to działało dla mnie, a nowsza wersja (0.13) nie była ci podziękowaniem!
talsibony
To jest rozwiązanie, które działało dla mnie, próbowałem wielu innych rozdzielczości, ale żadna z nich nie działała. Ponieważ jestem nowy w środowisku php / Laravel, więc nie mam głębokiej wiedzy na temat tych bibliotek i zależności, ale to rozwiązanie jest niesamowite, po prostu zaoszczędziło mi godziny :)
Amit
Naprawdę to rozwiązanie jest dzisiaj niesamowite Przeniosłem się do produkcji i napotkałem ten sam problem, bez marnowania czasu po prostu uruchomiłem to rozwiązanie i działało płynnie :)
Amit
gna.org jest teraz zamknięty. :(
Jya
11

Rozwijając odpowiedź Tymoteusza ...

Jeśli jesteś programistą internetowym i chcesz używać wkhtmltopdf jako części swojej aplikacji internetowej, możesz po prostu zainstalować go w swoim /usr/bin/folderze w następujący sposób:

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

Możesz teraz uruchomić go w dowolnym miejscu za pomocą wkhtmltopdf.

Osobiście korzystam z biblioteki Snappy w PHP. Oto przykład, jak łatwo jest utworzyć plik 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>');
Jonathan
źródło
11

Zaktualizuj do najnowszej wersji wkhtmltopdf z SourceForge (0.12 w chwili pisania tego tekstu). Do działania nie jest potrzebny serwer X.

Przykład dla 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
<<
felixhummel
źródło
1
Zainstalowałem wersję 0.12.1 i nadal wyświetla komunikat, że nie mogę połączyć się z serwerem X. Czy coś mi brakuje?
Ales Maticic
Próbowałem ponownie i to działa dla mnie (bez instalacji, tylko po to, aby utrzymać pudełko w czystości). Zobacz edycję powyżej.
felixhummel
9

dla 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
Matthias
źródło
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
GoTLiuM
źródło
6

Problem prawdopodobnie występuje w starej wersji wkhtmltopdf - wersja 0.9 z repozytorium dystrybucji wymaga uruchomionego X serwera, ale obecna wersja - 0.12.2.1 tego nie wymaga - może działać bezgłośnie.

Pobierz pakiet do swojej dystrybucji ze strony http://wkhtmltopdf.org/downloads.html i zainstaluj go - dla Ubuntu:

sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Honza
źródło
6

wkhtmltopdf> 0.11nie ma tego X-serverproblemu.
Więc instalacja 0.12.2.1na serwerze linux.

  1. Najpierw zainstaluj serwer xvfb:

    sudo apt-get install xvfb
    
  2. Pobierz potrzebną wersję wkhtmltopdf ze strony http://wkhtmltopdf.org/downloads.html

  3. Zainstaluj wkhtmltopdf:

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

    lub zainstaluj z 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. Zainstaluj zależność (w razie potrzeby):

    sudo apt-get -f install
    
  5. Utwórz łącze symboliczne w /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. Teraz spróbuj poniżej i powinno działać,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    
Parag Tyagi
źródło
5

Właśnie doszedłem do wniosku, że mogę po prostu przenieść statyczny plik wykonywalny do /usr/bin/katalogu i uruchomić go z dowolnego miejsca.

jeffery_the_wind
źródło
1

Postępowałem zgodnie z instrukcjami tutaj i sprawiłem, że wkhtmltopdf działa dla mnie, ale chciałbym zaoferować trochę perspektywy, którą odkryłem, wykonując swój własny mały taniec z wkhtmltopdf-xvfb .

Jest to ważne, ponieważ ten sam powód, który powoduje, że cannot connect to X serverwysyła niesławny błąd, powoduje również, że działa z ograniczeniami serwera, nawet jeśli udostępnisz mu serwer X. Te ograniczenia obejmują niemożność korzystania z wielu źródeł danych wejściowych, ustawiania nagłówka i stopki itp. (Sprawdź sekcję Ograniczona funkcjonalność w instrukcji ).

wkhtmltoxsam w sobie nie wymaga X11, jednak korzysta z bibliotek QT, które to robią. W nowszych wersjach programu wkthmltox programiści stworzyli łatkę dla QT, która pozwala mu działać z X11.

Obecnie niektóre wersje są zbudowane przeciwko poprawionemu QT, a inne nie. Możesz sprawdzić swoją wersję, uruchamiającwkhtmltopds --version . Na końcu powinna znajdować się linia z napisemCompiled against wkhtmltopdf patched qt.

Podsumowując, jeśli zainstalujesz i użyjesz wersji korzystającej z poprawionych bibliotek, powinna ona działać na serwerze linux bez xvfbserwera, co mogę potwierdzić.

Cristian Vrabie
źródło
1

rozwiązanie dla 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

Napotykamy ten problem w kontenerach dockerowych, a powyższa instalacja zawiera wkhtmltopdf z poprawionym QT

DmitrySemenov
źródło
2
dla mnie adres URL nie działał, użyłem tego: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

Uwaga: Twój plik może mieć format wkhtmltopdf.shlubwkhtmltopdf , sprawdź go w drugim kroku

Musisz skopiować go do katalogu: / usr / local / bin , uczynić go wykonywalnym i dodać dowiązanie symboliczne wkhtmltopdf.sh takie jak:

1- polecenie:

sudo apt-get install wkhtmltopdf

2 - wstaw plik binarny do katalogu / usr / bin, aby przeglądarka nie miała uprawnień do wykonywania w tym katalogu. Musisz skopiować wkhtmltopdf.sh do katalogu / usr / local / bin, ponieważ przeglądarka ma uprawnienia w tym katalogu, takie jak:

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

3 - Po utworzeniu pliku binarnego ma pozwolenie na wykonanie, takie jak:

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

4 - więc teraz możesz przetestować, to działa tak:

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

sprawi, że pobierzesz plik pdf w bieżącym katalogu w twoim terminalu

5 - Opcjonalnie możesz teraz dodać dowiązanie symboliczne do swojego katalogu / usr / local / bin jak

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
rapaelec
źródło
0
  1. Pobierz plik z tego łącza
  2. Wyodrębnij go i przenieś plik wykonywalny (/ wkhtmltox / bin / wkhtmltopdf) do /usr/bin/
  3. Zmień nazwę na wkhtmltopdf, jeśli aktualna nazwa to inna niż wkhtmltopdf. Więc teraz masz plik wykonywalny pod adresem/usr/bin/wkhtmltopdf
  4. Ustaw uprawnienia: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Zainstaluj wymagane pakiety wsparcia. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Teraz sprawdź wkhtmltopdf http://www.google.com test.pdf podpowiedź: szczegółowe informacje z tego linku
Ratna Halder
źródło
0

Jeśli skonfigurujesz wkhtmltopdf dla Rails lub Somethings w Centos, możesz wykonać następujące kroki:

  1. Przejdź do https://wkhtmltopdf.org/downloads.html i skopiuj link do pliku rpm.

W centos server bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Otrzymasz ścieżkę do wkhtmltopdf.

  1. Konfiguracja dla wicked_pdf lub pdfkit ze ścieżką w kroku 4. To jest przykładowa konfiguracja z wickedpdf. config / initializers / 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. Zrestartuj serwer.

GOTOWE.

ThienSuBS
źródło
0

Do użytku 64-bitowego:

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

Thilina Hasantha
źródło
0

Po prostu powiedz serwerowi Qt, aby nie używał X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
loonix
źródło