在centos上启动时启动xvfb的正确方法?


11

我正在关注本教程,并且想知道此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的正确方法是什么?

Answers:


12

我使用以下初始化脚本在启动时添加并启动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

1
不要忘记为此文件添加执行权限:chmod + x xvfb
panchicore 2013年

2
即使他的问题是针对CentOS的,它也已对其他发行版有用。这在Ubuntu上效果很好。你只需要运行update-rc.d,而不是chkconfig。有关的更多信息,请参见此答案update-rc.d
sigpwned

1
问题是关于如何在CentOS上进行操作。当前的CentOS使用systemd,而此答案不能解决问题。JdeBP的答案更合适。
洋一

6年前,当当前版本的centos不存在(systemd iirc也不存在)时,就问了这个问题。但是systemd解决方案要好得多,并且在可能的情况下应该是首选方案。
Tacticus

19

现在,系统化的答案。

自从这些问题和答案以来已经快四年了,世界已经改变,而没有改变。从版本7开始,CentOS使用systemd。问题和评论中都提到了Ubuntu。从版本15开始,Ubuntu也使用systemd。

尽管可以rc在systemd下使用System 5 脚本,但至少可以这样说,答案中的脚本是次优的。一个善于利用的人killall,其恶魔管理问题众所周知。另一种是摇摇晃晃的锁文件和PID文件逻辑一塌糊涂没有这是一个服务管理器下确有必要的,因为服务经理自己跟踪守护进程的。

就像我在其他地方说过的,如果您开始学习这些知识并且在CentOS Linux版本7或更高版本或Ubuntu Linux版本15或更高版本上使用,则不要一开始就使用System 5 rc脚本。从系统单位文件开始。

多个Xvfb服务的模板

xvfb.service可以在https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363https://askubuntu.com/a/621256/43344上找到用于xvfb的简单systemd单位文件。但是,正如我在后一种情况中提到的那样,也可以采用模板化方法:

[单元]
Description =用于显示%I的虚拟帧缓冲区X服务器
之后= network.target

[服务]
ExecStart = / usr / bin / Xvfb%I-屏幕0 1280x1024x24

[安装]
WantedBy =多用户目标

作为用于系统范围(而不是针对每个用户)服务的本地编写的,非系统,非打包的单位文件,这/etc/systemd/system/xvfb@.service当然可以解决。

控制服务

可以使用所需的显示编号将模板实例化为实际的命名服务。: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

进一步阅读


“将xvfb添加到系统服务”的链接已消失。
Manish

此后,所引用的SuperUser问题已被自动删除。幸运的是,发问者对它进行了多次张贴。☺
JdeBP

4

这是一个不错的初始化脚本来完成此任务:

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

1

最简单的方法是将以下行添加到/etc/rc.local文件中(如果不存在则创建一个):

Xvfb :0 -screen 0 1024x768x16 &

在启动时启动X虚拟帧缓冲区。


-2

如果您只需要在计算机启动时启动或启动某些程序,则可以使用更简单的方法。

在Redhat / CentOS上,在此文件上添加脚本行: /etc/rc.d/rc.local


我没有downvote你,但我认为这只是工作的系统V
多纳托

我今天在香草CentOS 7系统上尝试了此操作(因为我很懒),它确实起作用了,并启动了Xvfb。
clusterdude
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.