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.