#yum install epel-release
#yum install wkhtmltopdf
#wkhtmltopdf hoge.html hoge.pdf
cannot connect to X server wkhtmltopdf
#yum install xorg-x11-server-Xvfb
#xvfb-run -a wkhtmltopdf https://www.shimauta.net/archives/2793 asabana.pdf
Loading page (1/2)
[====================================================> ] 88%
→これがいつまでだっても終わらない。。
プロセスに「wkhtmltopdf」がずっと残留。
ちなみに
xvfb-run -a wkhtmltopdf http://www.google.com google.pdf
はすぐ終わるのだが。。。
※時間かかり、終わったは、終わったが、テキストもなくまるでぐちゃぐちゃなレイアウトに。WordPressのページだからなのか・・・
【AIによる回答】
wkhtmltopdfで「Cannot connect to X server」エラーが出るのは、GUI環境(Xサーバー)がないサーバー上でヘッドレスで実行しようとしているためで、解決策はXサーバーの代わりに仮想ディスプレイを提供するxvfb(X Virtual Framebuffer) を使うことです。xvfb-runコマンドでwkhtmltopdfを実行し、仮想ディスプレイを起動・管理させるのが一般的で、PythonならPyVirtualDisplayライブラirliライブラリを使う方法もあります。原因
wkhtmltopdfはレンダリング(描画)にXサーバーを必要とするため、GUIがない(SSH接続でGUIを使わない)サーバー環境ではこのエラーが発生します。解決策
xvfb(X Virtual Framebuffer) をインストールする
- 多くのLinuxディストリビューションで利用可能です。
- 例(Ubuntu/Debian系):
sudo apt-get install xvfb- 例(CentOS/RHEL系):
sudo yum install xorg-x11-server-Xvfbxvfb-runを使ってwkhtmltopdfを実行する
- コマンド例:
bashxvfb-run -a wkhtmltopdf http://www.google.com google.pdfまたは、特定の解像度を指定して:
bashxvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf http://google.com google.pdf
-a: 利用可能なディスプレイ番号を自動で選択します。-s "-screen 0 640x480x16": 仮想画面のサイズ(640×480)と色深度(16bit)を設定します。- Pythonなどプログラミング言語から使う場合
- PyVirtualDisplay ライブラリを使うと、Pythonコード内で仮想ディスプレイを管理できます。
- 例:
pythonfrom pyvirtualdisplay import Display import imgkit # imgkit は wkhtmltopdf をラップするライブラリ # 仮想ディスプレイを起動 display = Display(visible=0, size=(800, 600)) # visible=0 でバックグラウンド実行 display.start() # imgkit でURLから画像を生成(wkhtmltopdfが内部でxvfbを利用) imgkit.from_url('https://www.google.com', 'output.jpg') # 仮想ディスプレイを停止 display.stop()- Python pip install pyvirtualdisplay
その他
wkhtmltopdfのバージョンが古い場合も問題が起きることがあるため、最新版へのアップデートも検討してください。wkhtmltopdf --versionでバージョンを確認できます。これらの方法で、GUI環境がないサーバー上でもwkhtmltopdfがXサーバーに接続できない問題を解決できます。
