wkhtmltopdf: cannot connect to X server

jeffery_the_wind picture jeffery_the_wind · Mar 7, 2012 · Viewed 115.8k times · Source

I have been using wkthmltopdf to convert html to pdf documents on-the-fly on my linux web server. The program originally needed X11 or similar X server to run correctly, but through many requests by developers to have this run on servers without GUI, I am pretty sure it runs a virtual X server in the static version. I have been using the static (stand-alone) version of the program and it works great! I would put the executable file in a folder, and run:

./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

output:

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.

Now when I try to run the program installed via aptitude, I get the following error:

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.

Answer

TimoSolo picture TimoSolo · Mar 13, 2012

or try this (from http://drupal.org/node/870058)

  1. Download wkhtmltopdf. Or better install it with a package manager:

    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
    

    If it works, then you are done. If you get the error "Cannot connect to X server" then continue to number 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.