web-dev-qa-db-ja.com

CentOSの起動時にxvfbを起動する適切な方法は?

私はフォローしています このチュートリアル 、そして私はこの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を起動する適切な方法は何ですか?

11
Stefan Kendall

次のinitスクリプトを使用して、起動時にxvfbを追加して起動し、/ etc/init.d /にあるものをblatして、chkconfigxvfbを実行します。

   #!/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
12
Tacticus

そして今、systemdの答え。

これらの質疑応答からほぼ4年が経ち、世界は変わりましたが、変わっていません。バージョン7以降、CentOSはsystemdを使用しています。 Ubuntuは質問とコメントで言及されています。バージョン15以降、Ubuntuはsystemdも使用しています。

SystemdでSystem5 rcスクリプトを使用できますが、ここでの回答のスクリプトは、控えめに言っても非常に最適ではありません。デーモン管理の問題がよく知られているkillallを簡単に使用します。もう1つは、がらくたロックファイルとPIDファイルロジックの混乱noneですが、サービスマネージャー自分自身はデーモンプロセスを追跡します。

他の場所で述べたように、CentOS Linuxバージョン7以降またはUbuntu Linuxバージョン15以降を使用している場合は、最初にSystem 5 rcスクリプトで始めないでください。 。 systemdユニットファイルから始めます。

複数のXvfbサービスのテンプレート

Xvfbの単純なxvfb.service systemdユニットファイルは にありますhttps://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363 および https://askubuntu.com/a/621256/43344 にあります。ただし、後者で述べたように、テンプレート化されたアプローチを取ることもできます。

 [Unit] 
 Description =ディスプレイ用仮想フレームバッファーXサーバー%I 
 After = network.target 
 
 [Service] 
 ExecStart =/usr/bin/Xvfb%I -screen 0 1280x1024x24 
 
 [Install] 
 WantedBy = multi-user.target 

ローカルで記述された、システム全体ではない、パッケージ化されていない、システム全体の(ユーザーごとではない)サービス用のユニットファイルとして、これはもちろん/etc/systemd/system/[email protected]に入ります。

サービスの管理

テンプレートを、必要な表示番号を使用して実際の名前付きサービスにインスタンス化します。したがって、表示:99には、xvfb@:99.serviceという名前の実際のサービスインスタンスがあります。

  • bootstrap with 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を使用して、現在のサービスステータスを詳細に調べます。

参考文献

19
JdeBP

これを実現するためのNiceinitスクリプトは次のとおりです。

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
Thilo

最も簡単な方法は、次の行を/etc/rc.localファイルに追加することです(存在しない場合は作成します)。

Xvfb :0 -screen 0 1024x768x16 &

ブート時にX仮想フレームバッファーを開始します。

1
kenorb