我正在跟进本教程,我想知道这个特定于 ubuntu 的步骤的等效 centos 版本:
You may receive a few warnings regarding fonts and such, but it’ll still work despite these. If you want the framebuffer to start automatically on system startup you can do:
sudo update-rc.d xvfb defaults 10
在 centos 启动时启动 xvfb 的正确方法是什么?
答案1
我使用以下初始化脚本在启动时添加并启动 xvfb,只需在 /etc/init.d/ 中输入该脚本并运行 chkconfig xvfb 即可
#!/bin/bash
#chkconfig: 345 95 50
#description: Starts xvfb on display 99
if [ -z "$1" ]; then
echo "`basename $0` {start|stop}"
exit
fi
case "$1" in
start)
/usr/bin/Xvfb :99 -screen 0 1280x1024x24 &
;;
stop)
killall Xvfb
;;
esac
答案2
现在,systemd 给出了答案。
这些问题和答案问世已经快四年了,世界已经变了,而这些问题却没有变。从版本 7 开始,CentOS 就使用了 systemd。问题和评论中提到了 Ubuntu。从版本 15 开始,Ubuntu 也使用了 systemd。
尽管可以在 systemd 下使用 System 5rc
脚本,但这里答案中的脚本至少可以说非常不理想。一个是随意使用killall
,其守护进程管理问题众所周知;另一个是一堆摇摇欲坠的锁文件和 PID 文件逻辑没有任何在服务经理的领导下,这实际上是必要的,因为服务经理他们自己跟踪守护进程。
正如我在其他地方所说的那样,如果您开始学习这些内容并且使用的是 CentOS Linux 版本 7 或更高版本或 Ubuntu Linux 版本 15 或更高版本,那么rc
首先不要从 System 5 脚本开始。从 systemd 单元文件开始。
多个 Xvfb 服务的模板
xvfb.service
可以在以下位置找到 xvfb 的简单systemd 单元文件https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363以及https://askubuntu.com/a/621256/43344。但是,正如我在后者中提到的,也可以采用模板化的方法:
[单元] 描述=用于显示 %I 的虚拟帧缓冲区 X 服务器 之后=网络.目标 [服务] ExecStart=/usr/bin/Xvfb %I -screen 0 1280x1024x24 [安装] WantedBy=多用户.目标
作为本地编写的、非系统非打包的、用于系统范围(而不是每个用户)服务的单元文件,这当然是可行的。/etc/systemd/system/[email protected]
控制服务
将模板实例化为实际命名的服务,并指定所需的显示编号。:99
因此,对于显示,有一个名为的实际服务实例xvfb@:99.service
。
- 使用 将服务设置为在引导时自动启动
systemctl enable xvfb@:99.service
。 - 使用 取消设置自动启动服务
systemctl disable xvfb@:99.service
。 - 使用 手动启动服务
systemctl start xvfb@:99.service
。 - 使用 手动停止服务
systemctl stop xvfb@:99.service
。 - 使用 详细检查当前服务状态
systemctl status xvfb@:99.service
。
进一步阅读
- 斯蒂芬·韦德利(2014年)。 “8. 使用 systemd 管理服务” Red Hat Enterprise Linux 7 系统管理员指南。 红帽。
- Lennart Poettering(2013-10-07)。
systemctl
. systemd 手册页。freedesktop.org。 - https://unix.stackexchange.com/a/200281/5132
答案3
这是一个不错的初始化脚本,可以实现这个功能:
http://onemoretech.wordpress.com/2009/05/27/an-xvfb-init-script/
脚本如下:
#!/bin/bash
#
# /etc/rc.d/init.d/xvfbd
#
# chkconfig: 345 95 28
# description: Starts/Stops X Virtual Framebuffer server
# processname: Xvfb
#
. /etc/init.d/functions
[ "${NETWORKING}" = "no" ] && exit 0
PROG="/usr/X11R6/bin/Xvfb"
PROG_OPTIONS=":5 -screen 0 640x480x24"
PROG_OUTPUT="/tmp/Xvfb.out"
case "$1" in
start)
echo -n "Starting : X Virtual Frame Buffer "
$PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &
disown -ar
/bin/usleep 500000
status Xvfb & >/dev/null && echo_success || echo_failure
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
/bin/touch /var/lock/subsys/Xvfb
/sbin/pidof -o %PPID -x Xvfb > /var/run/Xvfb.pid
fi
echo
;;
stop)
echo -n "Shutting down : X Virtual Frame Buffer"
killproc $PROG
RETVAL=$?
[ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb
/var/run/Xvfb.pid
echo
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
status)
status Xvfb
RETVAL=$?
;;
*)
echo $"Usage: $0 (start|stop|restart|reload|status)"
exit 1
esac
exit $RETVAL
将脚本保存为 xvfbd 并将脚本复制到/etc/init.d
,然后运行以下命令:
sudo chkconfig --add xvfbd
答案4
如果您只需要在计算机启动时启动或运行某些程序,则可以使用更简单的方法。
在 Redhat/CentOS 上,在此文件中添加脚本行:/etc/rc.d/rc.local