【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/vncbootUSER=pi
HOME=/home/piexport 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
;;
esacexit 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の仕組みについては、以下を参照)
2.回避法:実行スクリプトを起動時に実行
sudo vi /etc/rc.local
中身に対し、起動スクリプトの実行コマンドを追加します(exit 0よりも上に書いてください)
su - pi -c 'sudo /etc/init.d/vncboot start'
感想
rc.localはinit.dで実行されるスクリプトの中でも最も優先順位が低いスクリプトらしい。
スクリプトにスクリプトの起動コマンドを入れるっていう入れ子構造がスマートじゃない気もするが、これで動くのでよしとします。
ではでは。