Xvfb (X virtual framebuffer) – виртуальный дисплейный сервер, позволяет выполнять графические операции в памяти без какого-либо вывода на физический дисплей. Преимущества виртуального дисплея в том, что он не требует установки графического окружения, унифицирует системы, не требует авторизации пользователя в ОС и доступа к его X-сессии.
Настройка в Debian-подобных дистрибутивах
sudo apt-get install xvfb
#!/bin/bash
### BEGIN INIT INFO
# Provides: foresight-xvfb
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start/stop xvfb server for Foresight Analytics Platform
### END INIT INFO
#VER=1
PIDFILE=/var/run/foresight-xvfb.pid
XVFB=/usr/bin/Xvfb
XVFBARGS=":987 -screen 0 1152x864x24 -ac -dpi 96 +extension GLX +render -noreset"
case "$1" in
start)
echo -n "Starting virtual X frame buffer: Xvfb"
start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
echo "."
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
start-stop-daemon --stop --quiet --pidfile $PIDFILE
echo "."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/Foresight-xvfb {start|stop|restart}"
exit 1
esac
exit 0
sudo chmod +x /etc/init.d/Foresight-xvfb
sudo update-rc.d Foresight-xvfb defaults
export DISPLAY=:987
sudo service Foresight-xvfb start
Для применения настроек потребуется перезапуск BI-сервера.
Настройка в RedHat-подобных дистрибутивах
sudo yum install xorg-x11-server-Xvfb
#!/bin/bash
#
# /etc/rc.d/init.d/Foresight-xvfb
#
# chkconfig: 345 85 28
# description: Start/stop xvfb server for Foresight Analytics Platform
# processname: Xvfb
# pidfile: /var/run/Foresight-xvfb.pid
#
. /etc/rc.d/init.d/functions
#VER=1
LOCKFILE=/var/lock/subsys/Foresight-xvfb
PIDFILE=/var/run/Foresight-xvfb.pid
XVFB=/usr/bin/Xvfb
XVFBARGS=":987 -screen 0 1152x864x24 -ac -dpi 96 +extension GLX +render -noreset"
case "$1" in
start)
[ -x $XVFB ] || exit 5
echo -n "Starting virtual X frame buffer: Xvfb"
PID=`pidofproc -p $PIDFILE foresight-xvfb`
if [[ (-z $PID) || ($PID -eq 0) ]]; then
$XVFB $XVFBARGS & echo $! > $PIDFILE
fi
RETVAL=$?
echo "."
[ $RETVAL -eq 0 ] && touch $LOCKFILE
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
killproc -p $PIDFILE $XVFB
RETVAL=$?
echo "."
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
;;
restart)
$0 stop
$0 start
;;
status)
status -p $PIDFILE $XVFB
;;
*)
echo "Usage: /etc/init.d/Foresight-xvfb {start|stop|restart|status}"
exit 1
esac
exit $?
Приоритет загрузки Foresight-xvfb должен быть выше приоритета httpd (число меньше). Для этого нужно сравнить второе число в комментариях скрипта # chkconfig: 345 85 28 и скрипта httpd.
sudo chmod +x /etc/init.d/Foresight-xvfb
export DISPLAY=:987
sudo chkconfig --add Foresight-xvfb
sudo chkconfig Foresight-xvfb on
sudo service Foresight-xvfb start
Для применения настроек потребуется перезапуск BI-сервера.
Если в ОС используется система инициализации, отличная от SysV, то Xvfb как сервис также можно настроить следующим образом:
Настройка для ОС с системой инициализации Upstart
Создайте файл задачи /etc/init/foresight-xvfb.conf с содержимым:
# xvfb - X Virtual
Frame Buffer
description "X Virtual Frame Buffer"
start on runlevel [2345]
script
Xvfb :987 -screen 0 1152x864x24 -ac -dpi 96 +extension GLX +render
-noreset
end script
Запустите задачу следующей командой:
sudo start foresight-xvfb
Настройка для ОС с системой инициализации systemd
[Unit]
Description=X Virtual Frame Buffer
Before=httpd.target
[Service]
ExecStart=/usr/bin/Xvfb :987 -screen 0 1152x864x24 -ac -dpi 96 +extension
GLX +render -noreset
Type=simple
PIDFile=/var/run/foresight-xvfb.pid
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable foresight-xvfb
sudo systemctl start foresight-xvfb
См. также: