【问题标题】:wkhtmltopdf: cannot connect to X serverwkhtmltopdf:无法连接到 X 服务器
【发布时间】:2012-03-25 03:59:55
【问题描述】:

我一直在使用wkthmltopdf 在我的 linux Web 服务器上即时将 html 转换为 pdf 文档。该程序最初需要 X11 或类似的 X 服务器才能正确运行,但通过开发人员的许多请求,使其在没有 GUI 的服务器上运行,我很确定它在 static version 中运行虚拟 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 服务器什么的。

【问题讨论】:

    标签: wkhtmltopdf xserver


    【解决方案1】:

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

    1. Download 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. 我们需要编写一个小 shell 脚本来将 wkhtmltopdf 包装到 xvfb 中。创建一个名为wkhtmltopdf.sh 的文件并添加以下内容:

      xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
      
    9. 将此shell脚本移动到/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

    【讨论】:

    • 我最初尝试了该教程,但效果不佳,而且我不喜欢使用符号链接创建包装器。就像我在回答中写的那样,如果您只是将静态可执行文件移动到 /usr/bin/ 目录,您可以在任何地方使用它。他们为静态可执行文件添加了一个虚拟 x-server,因此无需制作包装脚本。
    • 它对我有用.. 在某些情况下。我认为安装缺少的 32 位库为我修复了它 - 感谢您的提示
    • 数字 6 If you get the error "Cannot connect to X server" then continue to number 6. 中的语句应该是什么意思?我对此感到非常困惑。你的意思是说继续7号?
    • 是的,就是这个意思……原始文章的项目编号错误。所以继续#7
    • 谢谢,重新编号.. 建议的答案在大多数情况下应该有效,所以请先尝试
    【解决方案2】:

    这为我解决了这个问题:

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

    【讨论】:

    • 这是最简单和最安全的方法,因为 wkhtmltopdf 的标准安装不包括 x-server。
    • 这就是绝大多数情况下“无法连接X server”的解决方法。
    • 在基于 Redhat 的发行版上使用 sudo yum install xorg-x11-server-Xvfb resp。 sudo dnf install xorg-x11-server-Xvfb.
    【解决方案3】:

    我尝试做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 a+x wkhtmltopdf

    5. 将其放入 /usr/bin :

      sudo mv wkhtmltopdf /usr/bin

    【讨论】:

    • code.google.com/p/wkhtmltopdf/issues/detail?id=730 似乎 vs 11.0_rc1 有一些问题
    • 这对我有用,但 pdf 生成失败,所以我用 https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2 替换了上述说明
    • 下载 wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz 现在对我有用。由于某种原因,最新版本没有。
    • 我可以确认这对我有用:(获取最新的稳定版本 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
    【解决方案4】:

    刚刚成功:

    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 以获取依赖项。否则就像一个魅力。与所描述的其他方法相比,更喜欢这种方法。
    • 我同意。这个解决方案让我达到了当前的转速。 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
    • 这仍然是为这个问题提供的更好的解决方案。
    • 我不得不从/usr/local/bin/ 目录运行sudo mv wkhtmltopdf /usr/bin,但这很好用!我尝试了此页面上的所有其他方法,但没有运气......
    • 这应该得到更高的支持,作为一个最新和更简单的解决方案,而不依赖其他包(这也解决了“无法连接到 X 服务器”问题)。并且我在使用 xvfb 时遇到了未加载相对 css 路径的问题。
    【解决方案5】:

    我找到了在没有假 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 得到了很好的解决方案,但使用 utilite 的存储库已更改。

    【讨论】:

    • 由于某种原因,这对我有用,而较新的版本 (0.13) 不感谢您!
    • 这是对我有用的解决方案,我尝试了很多其他解决方案,但都没有奏效。由于我是 php/Laravel 环境的新手,所以我对这些库和依赖项没有深入的了解,但是这个解决方案很棒,只是节省了我的时间 :)
    • 这个解决方案真的很棒,今天我转移到生产环境并遇到了同样的问题,没有浪费任何时间我只是运行这些解决方案,它运行顺利:)
    • gna.org 现已关闭。 :(
    【解决方案6】:

    扩展蒂莫西的答案...

    如果您是一名网络开发人员,希望将 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>');
    

    【讨论】:

      【解决方案7】:

      从 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
      <<
      

      【讨论】:

      • 我安装了0.12.1,还是提示无法连接X server。我错过了什么吗?
      • 又试了一次,这对我有用(没有安装,只是为了保持盒子干净)。请参阅上面的编辑。
      【解决方案8】:

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

      【讨论】:

        【解决方案9】:
        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
        

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            wkhtmltopdf > 0.11 没有这个X-server 问题。
            所以在linux服务器上安装0.12.2.1

            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
              

            【讨论】:

              【解决方案12】:

              我刚刚发现我可以简单地将静态可执行文件移动到/usr/bin/ 目录并从任何地方执行它。

              【讨论】:

                【解决方案13】:

                建议至少使用 0.12.2.1。

                从 wkhtmltopdf >= 0.12.2 开始,它不再需要 X 服务器或仿真。您可以从http://wkhtmltopdf.org/downloads.html下载新版本

                【讨论】:

                  【解决方案14】:

                  我确实按照此处的说明操作并让 wkhtmltopdf 为我工作,但我想提供一些观点,这是我在与wkhtmltopdf - xvfb 做我自己的小舞时发现的。

                  这很重要,因为导致它抛出臭名昭著的cannot connect to X server 错误的相同原因也导致它在严重限制下运行,即使您确实为其提供了 X 服务器。这些限制包括不能采用多个输入源、设置页眉和页脚等(检查Reduced Functionality section of the manual)。

                  wkhtmltox 本身不需要 X11,但它使用了 QT 库。在 wkthmltox 的新版本中,开发人员为 QT 制作了一个补丁,允许它在 X11 上运行。

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

                  因此,总而言之,如果您安装和使用使用补丁库的版本,它应该可以在没有 xvfb 服务器的 linux 服务器上运行,我可以确认。

                  【讨论】:

                    【解决方案15】:

                    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
                    

                    我们在 docker 容器中遇到了这个问题,上面安装的 wkhtmltopdf 带有修补的 QT

                    【讨论】:

                    • 对我来说 URL 不起作用,我使用了这个:sudo rpm -Uvh https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
                    【解决方案16】:

                    注意:你的文件可能是wkhtmltopdf.shwkhtmltopdf,第二步检查一下

                    您必须将其复制到目录:/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 - 使 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/local/bin 中添加符号链接,例如

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

                    【讨论】:

                      【解决方案17】:

                      告诉 Qt 后端不要使用 X:

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

                      【讨论】:

                        【解决方案18】:
                        1. this link下载文件
                        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 提示:detail information from this link

                        【讨论】:

                          【解决方案19】:

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

                          How can I install the latest wkhtmltopdf on Ubuntu 16.04?

                          【讨论】:

                            【解决方案20】:

                            如果您在 Centos 中为 Rails 或 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. 重启服务器。

                            完成。

                            【讨论】:

                              【解决方案21】:

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

                              【讨论】:

                                猜你喜欢
                                • 2015-08-31
                                • 2013-07-07
                                • 2014-04-29
                                • 2019-04-20
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2023-03-03
                                相关资源
                                最近更新 更多