wkhtmltopdf : X 서버에 연결할 수 없습니다.


113

나는 wkthmltopdf 를 사용하여 내 리눅스 웹 서버에서 html을 pdf 문서로 즉석 에서 변환했습니다. 이 프로그램은 원래 X11 또는 유사한 X 서버가 올바르게 실행되어야했지만 개발자가 GUI가없는 서버에서 실행되도록 요청한 결과 정적 버전 에서 가상 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. xvfb에서 wkhtmltopdf를 래핑하기 위해 약간의 쉘 스크립트를 작성해야합니다. 라는 파일 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이 같은 오류가 발생 할 수 있습니다 "A는 ResourceObject가 로딩 완료 신호를받은 마쳤다. 이것은 부하에 긴에 iframe을 복용의 표시 될 수 있습니다." 와 같은 더 간단한 페이지로 테스트 할 수 있습니다 http://www.example.com.


1
나는 그 튜토리얼을 원래 시도했지만 제대로 작동하지 않았고 심볼릭 링크가있는 래퍼를 만들 필요가 없었습니다. 내 대답에서 썼 듯이 정적 실행 파일을 /usr/bin/디렉토리 로 이동하면 어디서나 사용할 수 있습니다. 그들은 가상 x- 서버를 정적 실행 파일에 추가 했으므로 래퍼 스크립트를 만들 필요가 없습니다.
jeffery_the_wind

그것은 나를 위해 일했습니다 .. 어떤 상황에서는. 나는 나를 위해 그것을 고정없는 32 비트 라이브러리를 설치 생각 - 덕분에 그 끝을 위해
TimoSolo

6 번 문장은 If you get the error "Cannot connect to X server" then continue to number 6.무슨 뜻인가요? 나는 이것에 매우 혼란 스럽습니다. 7 번을 계속하겠다는 뜻인가요?
NOZ

예, 그것이 의미하는 바입니다 ... 원래 기사가 항목 번호를 잘못 지정했습니다. 그러니 # 7로
가세요

감사합니다. 번호를 다시 매겼습니다. 제안 된 답변은 대부분의 경우에 작동하므로 먼저 시도해보십시오
TimoSolo

61

이것은 나를 위해 문제를 해결했습니다.

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

wkhtmltopdf의 표준 설치에는 x-server가 포함되어 있지 않기 때문에 이것이 가장 쉽고 안전한 접근 방식입니다.
Peter

이것은 대부분의 경우 "X 서버에 연결할 수 없음"을 해결하는 방법입니다.
tripleee

2
Redhat 기반 배포판에서는 sudo yum install xorg-x11-server-Xvfbresp를 사용 합니다. sudo dnf install xorg-x11-server-Xvfb.
TNT

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/issues/detail?id=730 vs 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
나는 동의한다. 이 솔루션은 나를 현재 rev. 때 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
빌 버틀러

이것은 여전히이 질문에 제공되는 더 나은 솔루션입니다.
versvs

1
나는 디렉토리 sudo mv wkhtmltopdf /usr/bin에서 실행해야 /usr/local/bin/했지만 이것은 훌륭하게 작동했습니다! 나는 .. 손 전 행운이 페이지에있는 모든 다른 방법을 시도
shaneparsons

이것은 다른 패키지에 의존하지 않고 최신의 간단한 솔루션으로 더 높은 업 보트를 얻을 것입니다 ( 'X 서버에 연결할 수 없음'문제도 해결됨). xvfb를 사용할 때 상대 CSS 경로가로드되지 않는 문제가 있습니다.
zynick

16

가짜 X 서버없이이 문제를 해결하는 방법을 찾았습니다. 최신 버전의 wkhtmltopdf에서는 작업을 위해 X 서버가 필요하지 않지만 공식 Linux 저장소에는 없습니다.

Ubuntu 14.04.4 LTS (trusty) 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)은 감사하지 않았습니다!
talsibony

이것은 나를 위해 일한 솔루션이며 다른 해결책을 많이 시도했지만 그중 어느 것도 작동하지 않았습니다. 내가 PHP / Laravel 환경을 처음 접했기 때문에 이러한 라이브러리 및 종속성에 대한 깊은 지식이 없지만이 솔루션은 단순히 내 시간을 절약 할 수 있습니다. :)
Amit

정말이 솔루션은 오늘 굉장합니다. 저는 프로덕션으로 옮겨서 같은 문제를 얻었습니다. 언제든지이 솔루션을 실행하고 원활하게 작동했습니다. :)
Amit

gna.org는 이제 종료됩니다. :(
Jya

11

Timothy의 대답을 확장 ...

웹 앱의 일부로 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.

개인적 으로 PHP 에서 Snappy 라이브러리를 사용합니다 . 다음은 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

SourceForge에서 최신 wkhtmltopdf 버전으로 업데이트합니다 (이 글을 쓰는 시점에서 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 서버에 연결할 수 없다는 메시지가 표시됩니다. 내가 뭔가를 놓치고 있습니까?
Ales Maticic

다시 시도했고 이것은 나를 위해 작동합니다 (설치하지 않고 상자를 깨끗하게 유지하기 위해). 위의 편집을 참조하십시오.
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.1Linux 서버에 설치 합니다.

  1. 먼저 xvfb 서버를 설치합니다.

    sudo apt-get install xvfb
    
  2. http://wkhtmltopdf.org/downloads.html 에서 필요한 버전의 wkhtmltopdf를 가져옵니다 .

  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에서 개발자는 X11과 함께 실행할 수있는 QT 용 패치를 만들었습니다.

현재 일부 버전은 패치 된 QT에 대해 빌드되고 일부는 그렇지 않습니다. 을 실행하여 버전을 확인할 수 있습니다 wkhtmltopds --version. 마지막에 줄이 있어야합니다Compiled against wkhtmltopdf patched qt.

결론적으로, 패치 된 라이브러리를 사용하는 버전을 설치하고 사용한다면 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

도커 컨테이너 내부에서이 문제가 발생하고 위의 설치에는 패치 된 QT 가있는 wkhtmltopdf 가 있습니다.


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 디렉토리에 복사하고 실행 가능하게 만들고 다음 과 같이 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-make sur 후 바이너리는 다음과 같은 실행 권한을 갖습니다.

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

4-이제 테스트 할 수 있습니다. 다음과 같이 작동합니다.

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

터미널의 현재 디렉토리에 pdf를 다운로드합니다.

5 - 선택 지금 당신은 당신의 디렉토리에 심볼릭 링크를 추가 할 수 있습니다 / usr / 지방 / 빈 과 같은

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-essential xorg libssl-dev
  6. 이제 wkhtmltopdf http://www.google.com test.pdf 힌트로 확인하십시오 : 이 링크의 세부 정보


0

Rails 또는 Centos의 Somethings에 대해 wkhtmltopdf를 구성하는 경우 다음 단계를 수행 할 수 있습니다.

  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. 4 단계에서 경로가있는 wicked_pdf 또는 pdfkit에 대한 설정. 이것은 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. 서버를 다시 시작하십시오.

끝난.


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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.