スマートホーム構築記

IoTの恩恵を受けたいけど家庭用はなかなか出てこない。なら作ろうというブログ

Raspberry Pi 3の環境構築(9/3 ssh不安定化対策追記)

今回の目標は電源ケーブルだけつないでおけばRaspberry Pi 3をいじれるようにするところです。

目次

  • 日本語化
  • ssh(ssh不安定化対策実施を追記 16/9/3)
  • vncserver

日本語化

まずは日本語化していきます。日本語化しなくても使えなくはないですがやっぱり不便ですし。

 $sudo apt-get update

インストールの時はSDから読みだしてインストールしているみたいなので最初はパッケージリストを最新版にしておきます。

 $sudo apt-get upgrade

次に全体のパッケージを更新します。ただしこれは後回しにしてもいいかもしれません。15分程度かかるかと思います。

 $sudo apt-get install fonts-ipafont fonts-ipaexfont ibus-anthy manpages-ja manpages-ja-dev 

次に日本語フォントとimeとmanページをインストールします。これで表示・入力・ヘルプの日本語化する準備ができました。

今度はデスクトップの左上のMenuをクリックしてRaspberry Piの設定を変更していきます。

 Menu -> Prefereces -> Raspberry Pi Configuration -> Localisation 

以上の順にクリックしていきます。

次に"Set Locale"というボタンがあるのでそれをクリックします。
 -Language: ja(Japanese)
-Country: JP(Japan)
-Character Set: UTF-8
と設定して”OK”をクリックしてください。

ついでにタイムゾーン設定とキーボード設定を行います。
同じ画面で"Set TimeZone"をクリックします
-Area: Asia
-Location: Tokyo
として設定して"OK"をクリックしてください。
これでタイムゾーンが日本に設定されます。

また同じ画面で"Set Keyboard"をクリックします
-Country:Japan
-Variant:Japanese(PC-98xx Series)
として設定して"OK"をクリックしてください。
これでキーボードレイアウトが日本語キーボードに変更されます。

最後にRaspberry Pi Configurationのウィンドウから"OK"をクリックします。
そうすると再起動を進められますので再起動してください。

これで日本語化は完了です。

ssh

リモートアクセスするためのsshを設定します。
実はすでにsshでのアクセスは可能になっているのでアクセスの設定だけいじっていきます。
何も設定していないとパスワードによるログインが有効になっているのでまずはこれを公開鍵認証でログインするように変更します。
それでは公開鍵と秘密鍵のペアを作るところから始めます。
リモートアクセスするクライアント用PCで公開鍵と秘密鍵のペアを作成します。
Windowsの方はCygwinを使うかPuttyを使って作成をしてください。Mac,Linuxの方は"ssh 鍵の作り方" とでも検索していただければやり方は検索できるかと思います。
PuTTY: a free SSH and Telnet client
Cygwin
Cygwin,Puttyについては調べてみてください。簡単にでてくると思います。
それぞれの方法で作った公開鍵をraspberry pi 3に送ります。
私はCygwinを用いているので以下のようにscpコマンドで公開鍵をraspberry piに送ります。

$scp ~/.ssh/<公開鍵ファイル> pi@(Raspberry PiIPアドレス):.ssh/

送り終わったらsshでアクセスします。

 $ssh pi@(Raspberry PiIPアドレス)
 Password: <パスワード(変更していなければraspberry)>

ここからRaspberry Pi側で作業します。

 $sudo vi /etc/ssh/sshd_config

お好きなエディタで/etc/ssh/sshd_configを編集していきます。私はコマンドラインのみでも使いやすいviを使います。

 #Password Authentication yes (変更前)
 Password Authentication no  (変更後)

に変更して保存します。

 $cd ~
 $mkdir .ssh
 $mv <公開鍵ファイル> .ssh/authorized_keys
 $chmod 600 .ssh/authorized_keys

として公開鍵を登録します。

 $sudo /etc/init.d/ssh restart

sshサーバを再起動して設定を反映します。
これでパスワードによるログインを禁止して公開鍵認証によるログインができるようになりました。

ssh不安定化対策(16/9/3追記)

Raspberry Pi3 で最近sshが不安定化していてうまく接続ができなかったので調べてみました。
Raspberry Pi • View topic - [RPi3] SSH not working via wifi
上記のフォーラム内でRaspberry Pi 3に元からついているWiFiアダプタでsshがつながらないという症状が報告されています。
そこでさらに調べていくと以下のコマンドを入力することで解決するという記事が見つかりました。
Raspberry Pi 3 built-in WiFi SSH NTP Problem · Issue #1519 · raspberrypi/linux · GitHub

$ sudo iptables -t mangle -I POSTROUTING 1 -o wlan0 -p udp --dport 123 -j TOS --set-tos 0x00

なのでこの記事にも書かれているように/etc/rc.localに以下のコマンドを登録して起動時に実行されるようにします。

/sbin/iptables -t mangle -I POSTROUTING 1 -o wlan0 -p udp --dport 123 -j TOS --set-tos 0x00

しかしこの対策だけでは私の環境は改善されませんでした。
この対策はあくまでNTPが実行された際に通信エラーが起こりネットワークが落ちてしまうといったものへの対策で、それによってsshも落ちるといった時に効果があるようです。

そこでさらに、最初のフォーラムを読み進めていくと/etc/ssh/sshd.confに以下を追記することで解決ができるとのコメントを見つけました。

IPQoS cs0 cs0

そして設定を反映するためにsshdを再起動します。

$ sudo systemctl restart ssh

これで安定したssh接続ができるようになります。

vncserver

最後にvncserverをインストールしてリモートデスクトップができるようにします。
このインストールが終わると電源ケーブルをつなぐだけでRaspberry Pi3を扱えるようになるので周辺機器が不要になりすっきりします。

$sudo apt-get install tightvncserver

vncserverであるtightvncserverをインストールします。

 $vncserver
Password:(8文字以内)
Verify:
Would you like to enter a view-only password (y/n)? n

次にvncserverを起動します。パスワードは8文字までです。それ以上だと勝手に省略されて短くなります。

www.tightvnc.com
次に上のサイトからWindows用のtightvncのソフトをダウンロードします。
ダウンロードしたソフトをインストールします。
インストールする際にviewerしかいらないのでインストールでcustomを選択して
Tightvncserverをクリックして一番下の×を選択してインストールを行います。

インストールが終わったら起動して接続を試みます。

 Remote Host: (Raspberry PiIPアドレス)::5901

これでパスワード入力画面が出てくるので先ほど設定したパスワードを入力してアクセスします。
f:id:kagemomiji:20160803211447p:plain

最後にこのvncserverをRaspberry Piの起動と同時に起動されるようにします。
ここを参考にやります。
raspberrypi.stackexchange.com
起動時に呼び出されるrc.localに起動スクリプトを書きます。

 $sudo vi /etc/rc,local 
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
##ここから追加
# boot tightvnc 
su - pi -c '/usr/bin/tightvncserver :1 -geometry 1200x800 -depth 24 '
##ここまで
exit 0

本当は起動スクリプトを書いてちゃんとしたかったのですがうまく起動できなかったのでこちらでやりました。
スマートではないですがそのうち起動スクリプトを書いてなんとかできるようにしたいと思います。
これで電源ケーブル以外何もつなげずに扱えるRaspberry Piの出来上がりです。
今日はここまでです