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を起動する適切な方法は何ですか?

回答:


12

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

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

2
彼の質問はCentOSに対して提起されましたが、それは他のディストリビューションにも役立ちます。これはUbuntuでうまく機能します。update-rc.d代わりに実行する必要がありますchkconfig。の詳細については、この回答を参照してくださいupdate-rc.d
2013年

1
問題は、CentOSでそれを行う方法についてでした。現在のCentOSはsystemdを使用しており、この回答は問題を解決しません。JdeBPからの回答がより適切です。
Yoichi

centosの現在のバージョンが存在しなかった(systemd iircも存在しなかった)6年前に質問があったことを考慮してください。ただし、systemdソリューションの方がはるかに優れており、可能な場合は推奨されるオプションです。
Tacticus 2017年

19

そして今、systemdの答え。

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

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

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

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

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

[単位]
Description =ディスプレイ%Iの仮想フレームバッファXサーバー
After = network.target

[サービス]
ExecStart = / usr / bin / Xvfb%I -screen 0 1280x1024x24

[インストール]
WantedBy = multi-user.target

これ/etc/systemd/system/xvfb@.serviceはもちろん、ローカルで記述された、システム全体ではなく、パッケージ化されていない、システム全体の(ユーザーごとではなく)サービス用のユニットファイルです。

サービスの制御

必要な表示番号を使用して、テンプレートを実際の名前付きサービスにインスタンス化します。:99したがって、displayの場合、という名前の実際のサービスインスタンスがあります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の追加」のリンクは無効です。
マニッシュ、2015年

参照されているSuperUser質問は自動削除されています。幸いなことに、質問者はそれをマルチ投稿しました。☺
JdeBP

4

これを実現するための素晴らしいinitスクリプトを次に示します。

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 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.