不能连接到 X 服务器

我一直在使用 什么在我的 linux 网络服务器上动态地将 html 转换成 pdf 文档。这个程序最初需要 X11或类似的 X 服务器才能正确运行,但是通过开发人员的许多请求,让这个程序在没有 GUI 的服务器上运行,我非常肯定它在 静态版本中运行一个虚拟 X 服务器。我一直在使用该程序的静态(独立)版本,它的工作非常好!我将把可执行文件放在一个文件夹中,然后运行:

./wkhtmltopdf file1.html file2.pdf

However I would like to install this program system-wide. I used the apt-get install wkhtmltopdf (just installed yesterday) and since I am running on a 64 bit system, I also needed apt-get install ia32-libs. After installation I can find the version like this:

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

Does anyone know how I can fix this? I guess this version is missing a virtual X server or something.

126476 次浏览

I just figured out that I can simply move the static executable to the /usr/bin/ directory and execute it from anywhere.

或者试试这个(来自 http://drupal.org/node/870058)

  1. 下载 wkhtmltopdf. 或者最好用软件包管理器安装它:

    sudo apt-get install wkhtmltopdf
    
  2. Extract it and move it to /usr/local/bin/

  3. Rename it to wkhtmltopdf so that now you have an executable at /usr/local/bin/wkhtmltopdf
  4. Set permissions: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Install required support packages.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Check to see if it works: run

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

    如果成功了,你就完了。如果您得到错误“无法连接到 X 服务器”,然后继续编号7。

  7. We need to run it headless on a 'virtual' x server. We will do this with a package called xvfb.

    sudo apt-get install xvfb
    
  8. We need to write a little shell script to wrap wkhtmltopdf in xvfb. Make a file called wkhtmltopdf.sh and add the following:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Move this shell script to /usr/local/bin, and set permissions:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Check to see if it works once again: run

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

Note that http://www.google.com may throw an error like "A finished ResourceObject received a loading finished signal. This might be an indication of an iframe taking to long to load." You may want to test with a simpler page like http://www.example.com.

这解决了我的问题:

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

我尝试做 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 it to executable :

    chmod a+x wkhtmltopdf

  5. 把它放进/usr/bin:

    sudo mv wkhtmltopdf /usr/bin

Expanding on Timothy's answer...

如果你是一个想把 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 中的 时髦库。下面是一个创建 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>');

我确实按照这里的说明,使 wkhtmltopdf 为我工作,但我想提供一个位的观点,我发现在做我自己的小舞与 wkhtmltopdf-xvfb

这一点很重要,因为导致它抛出臭名昭著的 cannot connect to X server错误的同样原因也导致它在带有服务器限制的情况下运行,即使您确实为它提供了 X 服务器。这些限制包括不能接受多个输入源、设置页眉和页脚等(请检查 手册的简化功能部分)。

wkhtmltox本身并不需要 X11,但是它利用了 QT 库。在 wkthmltox 的最新版本中,开发人员为 QT 做了一个补丁,允许它与 X11一起运行。

目前,有些版本是针对打了补丁的 QT 构建的,有些则不是。您可以通过运行 wkhtmltopds --version来检查您的版本。最后应该有一行写着 Compiled against wkhtmltopdf patched qt.

因此,总而言之,如果您安装并使用了使用补丁库的版本,那么它应该可以在没有 xvfb服务器的 linux 服务器上工作,这一点我可以确认。

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

从 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-下载 wkhtmltopdf 依赖项

# apt-get install wkhtmltopdf

2-从源代码下载

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

# dpkg -i xxx.deb

3- Try

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

Its working fine

成功了!

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

问题可能是在 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

我找到了解决这个问题的方法,没有假的 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

用户 Felix Hummel得到了非常好的解决方案,但是具有实用程序的存储库已经发生了变化。

0.11没有这个 X-server问题。
因此,在 Linux 服务器上安装 0.12.2.1

  1. At first install xvfb server:

    sudo apt-get install xvfb
    
  2. Get needed version of wkhtmltopdf from http://wkhtmltopdf.org/downloads.html

  3. Install 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. Install dependency (if needed):

    sudo apt-get -f install
    
  5. Create symblic link in /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. Now try below and it should work,

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

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.12.2.1。

从 wkhtmltopdf > = 0.12.2开始,它不再需要 X 服务器或模拟了

  1. 这个链接下载文件
  2. 解压缩并将可执行文件(/wkhtmltox/bin/wkhtmltopdf)移动到 /usr/bin/
  3. Rename it to wkhtmltopdf if current name is not wkhtmltopdf. So that now you have an executable at /usr/bin/wkhtmltopdf
  4. 设置权限: sudo chmod a + x/usr/bin/wkhtmltopdf
  5. Install required support packages. sudo apt-get install openssl build-essential xorg libssl-dev
  6. 现在,查一下 wkhtmltopdf http://www.google.com test.pdf hint: detail information from this link

用于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

只需安装0.12.4或更高版本。这似乎解决了问题。

See 如何在 Ubuntu16.04上安装最新的 wkhtmltopdf?.

注意: 您的文件可能是 wkhtmltopdf.shwkhtmltopdf,检查它的第二步

您必须将其复制到目录: /usr/local/bin,使其成为可执行文件,并添加如下 Wkhtmltopdf.sh的符号链接:

1-命令:

sudo apt-get install wkhtmltopdf

2 - insert the binary in directory /usr/bin so the browser can't have permission to execute in this directory. 您必须将 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-可供选择 now you can add symlink in your directory /usr/local/bin like

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

如果你在 Centos 配置 wkhtmltopdf,你可以按照以下步骤:

  1. 转到 https://wkhtmltopdf.org/downloads.html并复制 rpm 文件的链接。

在森托斯服务器狂欢节上。

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

= > 您将得到 wkhtmltopdf 的路径。

  1. 设置的邪恶 _ pdf 或 pdf 工具包的路径在第4步。 This is sample config with 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. Restart server.

DONE.

只要告诉 Qt 后端不要使用 X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>