web-dev-qa-db-ja.com

Ubuntu10.04での起動時にVNCサーバーを起動する方法

私はこれにずっと苦労していて、さらに別のスタートアップスクリプトの質問をすることができました。

比較的単純な起動スクリプトがあります。

### BEGIN INIT INFO
# Provides:          startVNC
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      
# Short-Description: Start VNC server at boot time
# Description:       Test
### END INIT INFO

#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
/usr/bin/vncserver -geometry 1280x1024 -depth 24

明らかに、本当に重要なのは最後の行だけです。スクリプトは実行可能です。

ls -l startVNC

収量:

-rwxr-xr-x 1 root root 406 2011-12-07 15:45 startVNC

my_user vncserverが起動し、デスクトップからGUIを表示できるように、ssh経由でログインしたときに実行すると。それで私はそれを起動時に実行させるために5つのことを試みました:

  1. スクリプトを/etc/init.d/にコピーし、update-rc.d -f startVNC defaultsを呼び出します(defaultsの後に99を付けて、vncserverが依存するすべてのものがすでに実行されていることを確認します)。生成されたすべてのシンボリックリンクが/etc/rcX.d/フォルダーにあることを確認しました。しかし、再起動や起動では機能しませんでした
  2. スクリプトを/etc/rc.localの前にexit 0に追加する
  3. crontab -e@reboot /home/my_user/scripts/startVNCとして追加
  4. スクリプトを/etc/init.d/rcSに追加する
  5. Gnomeの[システム]-> [環境設定]-> [スタートアップアプリケーション]にスクリプトを追加する

しかし、それらのどれも機能しませんでした。これ以上何を確認できますか。スクリプトにエラーがありますか?プロセスの所有者は、プロセスが機能するためにmy_userである必要があると思いますが、デバッグする方法がわかりません。

手がかりをいただければ幸いです。

5
mmm

su[YourUserName]-c /usr/bin/vncserverを使用して、ルートではなくユーザーとしてvncserverを実行できます。

別のポイント:スクリプトでは、VNCサーバーの起動と停止に違いはありません。通常、initスクリプトは、さまざまなケースを使用してサービスを開始/停止します。

case "$1" in
    start)
    # code to start the application
    ;;

    stop)
    # code to stop the application
    ;;

    restart)
    $0 stop
    $0 start
    ;;
esac

ここ は、initスクリプトを使用してvncサーバーを起動する方法の詳細な例です。

6
tohuwawohu

はい、分かりました。問題は次のとおりです。

  1. スクリプトをrootとして実行することは、通常は発生しますが、機能しません。そのため、su [my_user] -cを使用する必要があります
  2. オプションには引用符を使用する必要があります。

    su my_user -c "/ usr/bin/vncserver -geometry 1280x1024 -depth 16"

  3. また、. /lib/lsb/init-functionsexit 0を追加しました。これらが必要かどうかはわかりませんが、害はありません。 tohuwawohuによって提供された手の込んだ例からそれらをコピーしただけです。

だから私は結局:

### BEGIN INIT INFO
# Provides:          startVNC
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      
# Short-Description: Start VNC server at boot time
# Description:       A sophisticated script to do the job.
### END INIT INFO

#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""

. /lib/lsb/init-functions
su my_user -c "/usr/bin/vncserver -geometry 1280x1024 -depth 16"

exit 0

これは問題なく動作します。もちろん、上記で引用した 手の込んだスクリプト を使用する方がさらに良いかもしれません。次の方法で起動するスクリプトを追加しました。

Sudo update-rc.d -f startVNC start 99 2 3 4 5 .

シャットダウン時に何かを実行する理由が見当たらないためです(ロギング以外に、私は行っていません)。

Shebang(#!で始まる行)が私の元の質問の下でここに置き忘れられていることについてのコメントも参照してください。ただし、これは機能するため、テストされていないコードをここに含めたくありませんでした。使用したい場合は、おそらく変更する必要があります。

3
mmm