徒然なるままな想い書き

何気なく見たり聞いたりした時に得られる『思わぬ発見、気付き』を読者の皆さまに届けています。

【Raspberry Pi 2】 VNCサーバを起動時に自動実行する方法

最近Raspberry Pi 2を買って遊び始めたので、まず手始めにvncサーバーを入れてリモートからRaspberry Piを操作できるようにしてみました。このvncについては、sshがcuiでリモート操作できるのに対し、vncはguiでリモート操作できるような仕組みだと思ってもらえれば良いかと思います。

 

vncサーバを使うとなると、やはり毎回起動コマンドを打つのが面倒になります。そこで、OS起動時(OSはRasbian)に起動スクリプトを自動実行してしまおうというのがよくある便利な方法です。ところが、実際にインターネットサイトを参考にして組んでみたところ、うまく行きません。

 

どうやら、Raspbianの最新VersionであるJESSIEでは、起動スクリプトがうまく実行されない問題があるようです(原因は調べてない)。そこで、回避方法として、

 

vncサーバの起動スクリプトをOS起動時に実行

vncサーバの起動スクリプトの実行スクリプトをOS起動時に実行

 

という方法をとるとうまくOS起動時にvncサーバを起動することができたので、やったことを残しておきます、ご参考まで。

 

 

起動スクリプトの作成

起動スクリプトについては、インターネットサイトに出回っているものを流用し、init.d以下に置きます。

sudo vi /etc/init.d/vncboot

(エディタは任意。vi, emacsなど。)

 

中身を編集

### BEGIN INIT INFO
# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time
# Description: Start VNC Server at boot time.
### END INIT INFO

#! /bin/sh
# /etc/init.d/vncboot

USER=pi
HOME=/home/pi

export USER HOME

case "$1" in
start)
echo "Starting VNC Server"
#Insert your favoured settings for a VNC session
su $USER -c '/usr/bin/vncserver :1 -geometry 1440x900 -depth 24'
;;

stop)
echo "Stopping VNC Server"
su $USER -c '/usr/bin/vncserver -kill :1'
;;

*)
echo "Usage: /etc/init.d/vncboot {start|stop}"
exit 1
;;
esac

exit 0

中盤にある「1440x900」がディスプレイ解像度の指定であるため、クライアント側のディスプレイ解像度に合わせておくとクライアント側で作業がしやすくなります。ちなみに私の場合、クライアントはXubuntuを使っているので、Remminaで試しています。

 

1.正攻法:init.dで起動

sudo chmod 755 /etc/init.d/vncboot

sudo update-rc.d vncboot defaults

この方法の場合、/etc/rc*.d以下にシンボリックリンクができて起動してくれそうなのですが、Version. JESSIEだとうまく行きません。そこで、次の回避方法を用います。

 

(init.dの仕組みについては、以下を参照)

www.atmarkit.co.jp

 

2.回避法:実行スクリプトを起動時に実行

sudo vi /etc/rc.local

中身に対し、起動スクリプトの実行コマンドを追加します(exit 0よりも上に書いてください)

su - pi -c 'sudo /etc/init.d/vncboot start'

 

感想

rc.localはinit.dで実行されるスクリプトの中でも最も優先順位が低いスクリプトらしい。

スクリプトにスクリプトの起動コマンドを入れるっていう入れ子構造がスマートじゃない気もするが、これで動くのでよしとします。

 

 

ではでは。