VNCでラズパイ3にリモートデスクトップのように接続

ラズパイにssh接続できるようにしましたが、GUIの画面イメージを取りたいときに、Windowsで言うところのリモートデスクトップ接続のような仕組みが欲しくなります。
LinuxではVNCとその派生版を同様の機能を実現するのが最もポピュラーな方法です。
ラズパイではVNCの派生版の1つであるTightVNCを使用します。
こちらを参考にさせていただきました。 yamaryu0508.hatenablog.com

TightVNCのインストール

$ sudo apt-get update
$ sudo apt-get install tightvncserver

TightVNCの起動

ラズパイ側でVNCサーバを立ち上げます。
初回のみパスワードの設定が必要となります。

pi@raspberrypi:~ $ tightvncserver

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n

New 'X' desktop is raspberrypi:1

Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

pi@raspberrypi:~ $

TightVNCの停止

停止するときは-killオプションにディスプレイ番号を指定して停止します。
僕はVNCは必要なときだけ起動するべきだと考えているので、ラズパイを起動したときに自動的に立ち上がる設定にはせず、必要な時に起動して用が済んだら停止するようにしています。

pi@raspberrypi:~ $ tightvncserver -kill :1
Killing Xtightvnc process ID 28035
pi@raspberrypi:~ $

TightVNC起動確認

画面サイズ=1024x768、ポート=5901で起動していることがわかります。

pi@raspberrypi:~ $ ps -aef | grep tight
pi       28035     1  0 13:06 pts/0    00:00:02 Xtightvnc :1 -desktop X -auth /home/pi/.Xauthority -geometry 1024x768 -depth 24 -rfbwait 120000 -rfbauth /home/pi/.vnc/passwd -rfbport 5901 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb
pi       28945 27285  0 13:18 pts/0    00:00:00 grep --color=auto tight
pi@raspberrypi:~ $

パスワードの変更

パスワードはtightvncpasswdで変更できます。
パスワードはホームディレクトリの.vnc/passwdファイルに暗号化されて保存されているので、このファイルを削除してからtightvncserverを起動しても再度パスワード入力を求められるので、パスワードを変更できます。

pi@raspberrypi:~ $ tightvncpasswd
Using password file /home/pi/.vnc/passwd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
pi@raspberrypi:~ $

画面サイズを指定して起動

僕の使っているノートパソコンではデフォルトの画面サイズでははみ出してしまうので、画面を小さくして起動します。
この操作の前に停止するのを忘れずに。

pi@raspberrypi:~ $ tightvncserver -geometry 800x600 :1

New 'X' desktop is raspberrypi:1

Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

pi@raspberrypi:~ $

実は/usr/bin/tightvncserverはスクリプトです。
スクリプト中のgeometryを書き換えてしまってもよいと思います。

$geometry = "1024x768";

Windows機からの接続

Windows機から接続するには、UltraVNCを使います。
窓の杜からダウンロードできます。 forest.watch.impress.co.jp

UltraVNCのインストール

カスタムインストールで、UltraVNCViewerだけインストールしましょう。

UltraVNCViewer起動

ラズパイのIPアドレス:ポート番号 を入力してConnectをクリックします。 f:id:zhihong:20160923225428p:plain

次にtightvncserverを起動するときに設定したパスワードを入力します。 f:id:zhihong:20160923225624p:plain

こんな感じに起動します。 f:id:zhihong:20160923225637p:plain

以上です。
これでスナップショットを取りやすくなりました。

ラズパイSDメモリカードのバックアップとコピー

SDメモリカードを引っ越ししたい!

ラズパイのスターターキットに入っていたTeamのSDメモリカード

f:id:zhihong:20160904123522j:plain

ある程度初期設定が完了したのですが、バックアップと復元の手順を確認しておかないと落ち着きません。

また、この先いろいろと弄るにあたり、信頼性の面でこのSDカードを使い続けることに不安があります。

どうせならと、より信頼性の高いメーカーのSDカードにまるごと引っ越すことにしました。

 買ってきたメモリはこれ。SanDisk Ultra 16GB です。

f:id:zhihong:20160920225855j:plain

やっぱりSDカードはSanDiskでしょう!

Win32DiskImager

さて、コピーの方法ですが、Windows機を使います。

Win32DiskImagerでSDカードをまるごとイメージ化して、これを別のSDカードに書き込む方法です。

この方法だと、バックアップを何世代でも保存しておける利点があります。

 Win32DiskImagerはこちらからダウンロードできます。

SDメモリカードの読み込み

先ずはイメージ化です。

ラズパイのSDカードを抜いて適当なリーダにセットし、Windows機に接続します。

接続したらWin32DiskImagerを起動します。

Device にコピー元となるSDメモリカードを指定し、Image Fileにはコピー先となるイメージファイルのパスを入力します。ネットワークドライブは選択できないので注意してください。

入力が完了したらReadボタンをクリックします。

f:id:zhihong:20160920231151j:plain

それなりに時間が掛かかるので、じっくり待ちましょう。

これで指定したパスにイメージファイルが出力されました。

SDメモリカードへの書き込み

次にイメージファイルからコピー先のSDメモリカードへ書き込みを行います。

Windows機に先ほどのSanDiskSDメモリカードを挿し、Win32DiskImagerを起動します。

今度はImage Fileにコピー元となるイメージファイルのパスを入力します。

Deviceにはコピー先のSDカードを指定し、Writeボタンをクリックします。

f:id:zhihong:20160920231923j:plain

 すると…

f:id:zhihong:20160920232000j:plain

 失敗しました…。

TeamよりSanDiskの方がセクタ数が少ないのですね……。

あっさりあきらめました。

SanDiskのSDカードにNOOBSをコピーして、インストールからやり直すことにしました。

しかしこのSDカード……。

f:id:zhihong:20160920232945j:plain

抜けません!

ラズパイ3にセットしたSDメモリカードは、ケースに入れてしまうとただでさえ取り出しにくいのですが、このカードは特にツメが引っ掛かりません。

表面の塗装が段差をなだらかにしてしまっていことが原因です。

ピンセットで抜こうとしても抜けず、もがいている間に段差部分を傷つけ、塗装が剥げてしまったのですが、そこにツメが引っ掛かるようになってようやく抜けました。

頻繁に抜き差しするような使い方をするのであれば、表面の塗装の無いタイプの方が使いやすいかも知れませんね。

 

ちょっと逸れましたが、結局のところ、SDカードをバックアップ→コピーする場合は、全く同じSDカードを用意するのが無難です。

より確実なのは大きなサイズ(元が16GBなら32GB)のものを選ぶことですが、それだとどんどん大きくなってしまいそうです。

 

Windows10がNASに繋がらなくなった【解決】

たぶんこの前Windows10のアップデートが走ってからだと思いますが、これまで普通に使えていたBuffaloのNASが急に繋がらなくなってしまいました。

 

なんとか繋がりましたが、とにかくWindows10の設定方法が分かりにくく、WEB上の情報もヒットしにくいので、備忘録としてまとめました。

 

環境

OS:Windows10

NAS:Buffalo LinkStation

 エラーメッセージ

NASにアクセスしようとしたときに、次のようなメッセージが表示されます。

"指定されたログオンセッションは存在しません。そのセッションはすでに終了している可能性があります。"

"この接続は復元されませんでした。"

f:id:zhihong:20160916220919p:plain

 

設定方法

 コントロールパネルを開きま……無い!

まさかコントロールパネルを開くために検索する羽目になるとは……。

Windowsキー+Sを押して、「コントロールパネル」と打ちましょう。

 

f:id:zhihong:20160916221221p:plain

 

こんな感じで、コントロールパネルを開いたら、表示方法を小さいアイコンに変更します。

f:id:zhihong:20160916221242p:plain

 

次に資格情報マネージャを選んで、 

f:id:zhihong:20160916221302p:plain

 

Windows資格情報を選択します。

f:id:zhihong:20160916221428p:plain

 

IPアドレスとユーザ、パスワードを入力します。

試しにNASに元々用意されてる管理者権限のユーザを使いましたが、これは良くないですね。NASのWEBインタフェースでログインしてユーザを追加し、そのユーザを使うようにして下さい。

f:id:zhihong:20160916221509p:plain

 

資格情報マネージャに資格情報が追加されました。

f:id:zhihong:20160916221548p:plain

 

これでNASに繋がるようになりました!

どうやら古いSMBを使っているNASへの接続に資格情報が必須になったようです。

 まあしかしわかりにくい……。

 

ラズパイ3にNASのネットワークドライブをマウントする

ラズパイ3にNASのネットワークドライブをマウントする方法です。

CIFSインストール

NASのドライブをマウントするにはcifsというパッケージが必要です。 Raspbian(Jessie)には既に最新版がインストールされていました。

pi@raspberrypi:~ $ sudo apt-get install cifs-utils
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
cifs-utils はすでに最新版です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 3 個。

マウントポイントの作成

NASドライブをマウントするマウントポイントを作成しておきます。

pi@raspberrypi:~ $ sudo mkdir /mnt/nas
pi@raspberrypi:~ $ sudo chmod 777 /mnt/nas

試しにマウントする

pi@raspberrypi:~ $ sudo mount -t cifs //192.168.0.12/share /mnt/nas -o  username=xxx,password=yyy,iocharset=utf8,rw,uid=1000,gid=1000
pi@raspberrypi:~ $ cd /mnt/nas
pi@raspberrypi:/mnt/nas $ ls

NASの内容が表示されればOKです。

起動時にマウント

次に起動時に自動的にマウントするように設定します。 しかし、これにはドはまりしました……。

pi@raspberrypi:~ $ sudo vi /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p6  /boot           vfat    defaults          0       2
/dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
//192.168.0.12/share /mnt/nas cifs username=xxx,password=yyy,iocharset=utf8,rw,uid=1000,gid=1000,defaults 0 0

結局これでは繋がりませんでした。 起動後にsudo mount -a とするとマウントできるので、設定が間違えているわけではないようです。

/etc/rc.localにsleep 10を入れればよいという記事も見かけましたが、僕の環境ではそれでもダメでした。

tomokatsu.hatenablog.com

そこで、/etc/rc.localでmountするようにしたところ、うまくいきました。 この場合でもsleepは必要でした。

pi@raspberrypi:/mnt/nas $ sudo vi /etc/rc.local
# 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

# For NAS ここから
sleep 10
sudo mount -t cifs //192.168.0.12/share /mnt/nas -o  username=xxx,password=yyy,iocharset=utf8,rw,uid=1000,gid=1000
# For NAS ここまで

exit 0

一応これでやりたいことはできているのですが、どうもスッキリしません。 また時間のあるときに試行錯誤してみます。

ラズパイ3にssh接続する(無線LANのIPアドレスを固定する)

ラズパイ3にssh接続するためには、無線LANIPアドレスを固定しておく必要があります。 いつの間にかIPアドレスが変わっていたら、IPアドレス指定で接続できなくなるためです。 (ホスト名で繋ぐ方法もありますが、IPアドレスで接続する方が基本的でよく使われる方法です)

wpa_supplicant.conf

まず、wpa_supplicant.confに無線LAN情報を記述します。 次のコマンドを実行してください。

$ sudo sh -c 'wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf'

SSIDとPASSPHRASEは、お使いのルータの値に変更して実行してください。

/etc/wpa_supplicant/wpa_supplicant.confファイルには、生パスワードと暗号化されたパスワードが併記されます。 安全のため、生パスワードを削除しておきましょう。

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB

network={
        ssid="SSID"
        #psk="生パスワード" #<-既にコメントアウトされていますが、行ごと削除しましょう
        psk=xxx...
}

静的IPアドレスに指定できる範囲を確認

お使いのルータの管理画面で動的IPアドレスの範囲を確認してください。 その反対が使えるIPアドレスの範囲になります。

f:id:zhihong:20160908215303p:plain

僕の使っているルータでは、192.168.0.100以降を動的に割り当てるように設定してあるので、99までの値であれば静的に設定できます。 192.168.0.22を割り当てることにします。

dhcpcd.conf

Jessieでは/etc/dhcpcd.confファイルへ設定内容を記述します。

$ sudo vi/etc/dhcpcd.conf
# 追記
# Static IP
interface wlan0
static ip_address=192.168.0.22/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

domain_name_serverはroutersと同じくルータのアドレスで構わないようです。

これでIPアドレスを固定できました。 sshは特に設定などは必要なく接続できました。

ラズパイ3へのchromeインストール

Raspbian(Jessie)にはchromeの公式パッケージはありませんが、chromiumをインストールすることができます。

こちらを参考にさせていただきました。

mmays.hatenablog.com


3番目の方法そのままでchromiumをインストールできました。

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5B393194
$ sudo vi /etc/apt/sources.list
  # 次の行を追加
 deb http://ppa.launchpad.net/canonical-chromium-builds/stage/ubuntu vivid main
$ sudo apt-get update
$ sudo apt-get install chromium-browser chromium-browser-l10n


ダウンロードにはかなり時間がかかりますが、気長に待ちましょう。

ラズパイ3の日本語化

とりあえずシステムを最新の状態にします。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update


iBus-MozcとTakaoフォントをインストールします。
フォントをインストールして再起動するまでは日本語がちゃんと表示されませんが、気にせず進めてください。

$ sudo apt-get install ibus-mozc
$ sudo apt-get install fonts-takao


再起動します。

$ sudo reboot


こんな感じに日本語が表示されます。
f:id:zhihong:20160908002036j:plain

右上のJPの部分をクリックして日本語-Mozcを選択します。
半角/全角キーで日本語入力ON/OFFを切り替えられるようになります。