wkhtmltopdf: no se puede conectar al servidor X


113

He estado usando wkthmltopdf para convertir documentos html a pdf sobre la marcha en mi servidor web linux. El programa originalmente necesitaba X11 o un servidor X similar para ejecutarse correctamente, pero a través de muchas solicitudes de los desarrolladores para que se ejecute en servidores sin GUI, estoy bastante seguro de que ejecuta un servidor X virtual en la versión estática . ¡He estado usando la versión estática (independiente) del programa y funciona muy bien! Pondría el archivo ejecutable en una carpeta y ejecutaría:

./wkhtmltopdf file1.html file2.pdf

Sin embargo, me gustaría instalar este programa en todo el sistema. Usé el apt-get install wkhtmltopdf(recién instalado ayer) y como estoy ejecutando en un sistema de 64 bits, también lo necesitaba apt-get install ia32-libs. Después de la instalación, puedo encontrar la versión así:

wkhtmltopdf --version

salida:

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.

Ahora, cuando intento ejecutar el programa instalado a través de aptitude, aparece el siguiente error:

wkhtmltopdf: cannot connect to X server

¿Alguien sabe como puedo arreglar esto? Supongo que a esta versión le falta un servidor X virtual o algo así.

Respuestas:


206

o prueba esto (de http://drupal.org/node/870058 )

  1. Descarga el siguiente wkhtmltopdf. O mejor instalarlo con un administrador de paquetes:

    sudo apt-get install wkhtmltopdf
    
  2. Extraerlo y moverlo a /usr/local/bin/

  3. Cambie el nombre para wkhtmltopdfque ahora tenga un ejecutable en/usr/local/bin/wkhtmltopdf
  4. Establecer permisos: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Instale los paquetes de soporte necesarios.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Comprueba si funciona: ejecuta

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

    Si funciona, entonces ha terminado. Si obtiene el error "No se puede conectar al servidor X", continúe con el número 7.

  7. Necesitamos ejecutarlo sin cabeza en un servidor x 'virtual'. Haremos esto con un paquete llamado xvfb.

    sudo apt-get install xvfb
    
  8. Necesitamos escribir un pequeño script de shell para envolver wkhtmltopdf en xvfb. Cree un archivo llamado wkhtmltopdf.shy agregue lo siguiente:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Mueva este script de shell /usr/local/biny establezca permisos:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Comprueba si funciona una vez más: ejecuta

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

Tenga en cuenta que http://www.google.com puede arrojar un error como "Un ResourceObject terminado recibió una señal de finalización de carga. Esto podría ser una indicación de que un iframe tarda demasiado en cargar". Es posible que desee probar con una página más simple como http://www.example.com.


1
Probé ese tutorial originalmente, y no funcionó del todo, tampoco me gustó tener que crear el contenedor con un enlace simbólico. Como escribí en mi respuesta, si simplemente mueve el ejecutable estático al /usr/bin/directorio, puede usarlo desde cualquier lugar. Agregaron un servidor x virtual al ejecutable estático, por lo que no es necesario crear el script contenedor.
jeffery_the_wind

funcionó para mí .. en algunas situaciones. Creo que la instalación de bibliotecas de 32 bits que faltan me lo solucionó, gracias por ese consejo
TimoSolo

¿Qué se If you get the error "Cannot connect to X server" then continue to number 6.supone que significa el enunciado del número 6 ? Estoy muy confundido por esto. ¿Quiere decir que continúe hasta el número 7?
Noz

Sí, eso es lo que se quiere decir ... el artículo original había numerado mal los elementos. Así que pasa al # 7
dwaz

gracias, renumerado .. La respuesta sugerida debería funcionar en la mayoría de los casos, así que intente primero
TimoSolo

61

Esto me resolvió el problema:

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

Este es el enfoque más fácil y seguro, ya que la instalación estándar de wkhtmltopdf no incluye el servidor x.
Peter

Así es como se resuelve "no se puede conectar al servidor X" en la gran mayoría de los casos.
tripleee

2
En las distribuciones basadas en Redhat, use sudo yum install xorg-x11-server-Xvfbresp. sudo dnf install xorg-x11-server-Xvfb.
TNT

28

Traté de hacerlo sudo apt-get install wkhtmltopdfpero sin éxito. En su lugar, te recomiendo que pruebes:

  1. Descargue el último ejecutable (.11 rc1):

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

  2. descomprimirlo:

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

  3. cambiarle el nombre:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. modifíquelo a ejecutable:

    chmod a+x wkhtmltopdf

  5. colóquelo en / usr / bin:

    sudo mv wkhtmltopdf /usr/bin


code.google.com/p/wkhtmltopdf/issues/detail?id=730 parece que vs 11.0_rc1 tiene algunos problemas
montrealmike

esto funcionó para mí, pero la generación de pdf falló, así que reemplacé las instrucciones anteriores conhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87

1
descargar wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz funciona para mí ahora. Por alguna razón, la última no lo hace.
chasetheskyforever

1
Puedo confirmar que esto funcionó para mí: (obteniendo la última versión estable 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

Lo acabo de hacer:

1- Para descargar las dependencias de wkhtmltopdf

# apt-get install wkhtmltopdf

2- Descarga de la fuente

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

# dpkg -i xxx.deb

3- Prueba

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

Está funcionando bien

¡Funciona!


Tuve que ejecutar apt-get install -fdespués de instalar el paquete para obtener las dependencias. De lo contrario funcionó a las mil maravillas. Prefiero mucho este método a los otros descritos.
dmuir

2
Estoy de acuerdo. Esta solución me llevó a las revoluciones actuales. El comando dpkg -i generó algo de información ambigua pero independientemente, funcionó: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debseguido porsudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler

esta sigue siendo la mejor solución proporcionada a esta pregunta.
versvs

1
Tuve que ejecutar sudo mv wkhtmltopdf /usr/bindesde el /usr/local/bin/directorio, ¡pero funcionó muy bien! Probé todos los demás métodos de esta página sin suerte antes de la mano ..
shaneparsons

esto debería obtener votos positivos más altos como una solución más reciente y simple sin depender de otros paquetes (lo que también resuelve el problema 'No se puede conectar al servidor X'). y tengo problemas con la ruta css relativa que no se carga cuando uso xvfb.
zynick

16

Encontré un método para resolver este problema sin un servidor X falso. En la versión más reciente de wkhtmltopdf, no necesita el servidor X para trabajar, pero no en los repositorios oficiales de Linux.

Solución para 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

Solución para Ubuntu 14.04.4 LTS (trusty) 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

El usuario felixhummel obtuvo una muy buena solución, pero el repositorio con utilite ha cambiado.


por alguna razón esto me estaba funcionando y la versión más nueva (0.13) no fue gracias.
talsibony

Esta es la solución que funcionó para mí, he probado muchas otras resoluciones pero ninguna funcionó. Como soy nuevo en el entorno php / Laravel, no tengo un conocimiento profundo de estas bibliotecas y dependencias, pero esta solución es increíble, simplemente me ahorró horas :)
Amit

Realmente esta solución es increíble hoy me mudé a producción y tuve el mismo problema, sin perder el tiempo, simplemente ejecuté esta solución y funcionó sin problemas :)
Amit

gna.org ahora está cerrado. :(
Jya

11

Ampliando la respuesta de Timothy ...

Si es un desarrollador web que busca usar wkhtmltopdf como parte de su aplicación web, simplemente puede instalarlo en su /usr/bin/carpeta así:

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

Ahora puede ejecutarlo en cualquier lugar usando wkhtmltopdf .

Yo personalmente uso la biblioteca Snappy en PHP. A continuación, se muestra un ejemplo de lo fácil que es crear un 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

Actualice a la última versión de wkhtmltopdf de SourceForge (0.12 al momento de escribir este artículo). No necesita un servidor X para funcionar.

Ejemplo para 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
He instalado 0.12.1 y todavía me indica que no puedo conectarme al servidor X. ¿Me estoy perdiendo de algo?
Ales Maticic

Lo intenté de nuevo y esto funciona para mí (sin instalar, solo para mantener la caja limpia). Ver edición arriba.
felixhummel

9

para 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

El problema probablemente esté en la versión anterior de wkhtmltopdf : la versión 0.9 del repositorio de distribución requiere ejecutar el servidor X, pero la versión actual, 0.12.2.1 no lo requiere, puede ejecutarse sin cabeza.

Descargue el paquete para su distribución desde http://wkhtmltopdf.org/downloads.html e instálelo - para Ubuntu:

sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb

6

wkhtmltopdf> 0.11no tiene este X-serverproblema.
Así que instalarlo 0.12.2.1en un servidor Linux.

  1. Primero instale el servidor xvfb:

    sudo apt-get install xvfb
    
  2. Obtenga la versión necesaria de wkhtmltopdf de http://wkhtmltopdf.org/downloads.html

  3. Instale wkhtmltopdf:

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

    o instalar con 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. Instale la dependencia (si es necesario):

    sudo apt-get -f install
    
  5. Crea un enlace simbólico en /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. Ahora intente a continuación y debería funcionar,

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

5

Me acabo de dar cuenta de que simplemente puedo mover el ejecutable estático al /usr/bin/directorio y ejecutarlo desde cualquier lugar.



1

Seguí las instrucciones aquí e hice que wkhtmltopdf funcionara para mí, pero me gustaría ofrecer un poco de perspectiva que descubrí mientras hacía mi propio pequeño baile con wkhtmltopdf- xvfb.

Esto es importante porque la misma razón que hace que arroje el infame cannot connect to X servererror también hace que se ejecute con limitaciones severas, incluso si le proporciona un servidor X. Estas limitaciones incluyen no poder tomar múltiples fuentes de entrada, establecer encabezados y pies de página, etc. (consulte la sección Funcionalidad reducida del manual ).

wkhtmltoxpor sí solo no requiere un X11, sin embargo, utiliza bibliotecas QT que sí lo hacen. En las nuevas versiones de wkthmltox, los desarrolladores crearon un parche para QT que le permite funcionar con un X11.

Actualmente, algunas versiones están construidas con QT parcheado y otras no. Puede comprobar su versión ejecutando wkhtmltopds --version. Debería haber una línea al final diciendoCompiled against wkhtmltopdf patched qt.

Entonces, para concluir, si instala y usa una versión que usa las bibliotecas parcheadas, debería funcionar en un servidor Linux sin el xvfbservidor, como puedo confirmar.


1

solución para 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

Nos encontramos con este problema dentro de los contenedores de la ventana acoplable y la instalación anterior tiene wkhtmltopdf con QT parcheado


2
para mí la URL no funcionaba, utilicé este: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

Preste atención: su archivo podría ser wkhtmltopdf.sho wkhtmltopdf, verifíquelo en el segundo paso

Debe copiarlo en el directorio: / usr / local / bin , hacer que sea ejecutable y agregar el enlace simbólico de wkhtmltopdf.sh como:

1- el comando:

sudo apt-get install wkhtmltopdf

2 - inserte el binario en el directorio / usr / bin para que el navegador no tenga permiso para ejecutarse en este directorio. Debe copiar wkhtmltopdf.sh al directorio / usr / local / bin porque el navegador tiene permiso en este directorio como:

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

3 - Después de make sur el binario tiene permiso de ejecución como:

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

4 - ahora puedes probar, funciona como:

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

hace descargar el pdf en el directorio actual en su terminal

5 - Opcional ahora puede agregar un enlace simbólico en su directorio / usr / local / bin como

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

0
  1. Descargar archivo de este enlace
  2. Extraerlo y mover el archivo ejecutable (/ wkhtmltox / bin / wkhtmltopdf) a /usr/bin/
  3. Cambie el nombre a wkhtmltopdf si el nombre actual no es wkhtmltopdf. Así que ahora tienes un ejecutable en/usr/bin/wkhtmltopdf
  4. Establecer permisos: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Instale los paquetes de soporte necesarios. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Ahora, verifique con una wkhtmltopdf http://www.google.com test.pdf pista: información detallada de este enlace


0

Si configura wkhtmltopdf para Rails o Somethings en Centos, puede seguir estos pasos a continuación:

  1. Vaya a https://wkhtmltopdf.org/downloads.html y copie el enlace del archivo rpm.

En centos server bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Obtendrá la ruta de wkhtmltopdf.

  1. Configuración para wicked_pdf o pdfkit con la ruta en el paso 4. Esta es una configuración de muestra con 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. Reinicie el servidor.

HECHO.


0

Para uso de 64 bits:

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

Simplemente dígale al backend de Qt que no use X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.