How to remote access to your Raspberry Pi

Know how มักจะมาพร้อมกับความต้องการเสมอ

มีความจำเป็นต้องทำอะไรบางอย่างกับ Raspbery Pi ที่อยู่ใน Network ที่สามารถออก Internet ได้แต่ไม่ได้ทำตัวเป็น Server แน่นอนว่าไม่มี IP จริง ความคิดแรกคือ จะลง Windows 10 และใช้ Teamviewer ซึ่งแค่นี้ก็น่าจะแก้ปัญหาเรื่องการไม่มี IP จริงได้

แต่... ชีวิตมันไม่ได้โรยด้วยกลีบกุหลาบ

การจะทำแบบความคิดแรกได้ จะต้องใช้ ExaGear Desktop ตามวิธีนี้ 3 Ways to Run a Remote Desktop on Raspberry Pi ซึ่งก็ดูดีทุกอย่าง ยกเว้นค่าใช้จ่ายที่ต้องเสีย €24.95 (ประมาณ 962.43 บาท) ต่อ Raspbery Pi 1 เครื่อง หรือไม่ก็ต้องใช้ no-ip ทำการ fwd อันแสนจะยุ่งยากสำหรับเรา

ทุกปัญหา มีทางออกเสมอ

โชคดีไปพบกับ weaved ที่ช่วยให้เรา Remote ไปควบคุมเครื่อง Linux ที่ไม่มี IP จริงได้เหมือน Teamviewer แต่มีข้อแม้ว่า

10 Remote Accessible Services  
1 Shares  
30 Minutes connection time per session  
1 Concurrent connection  

แถมฟรี Mobile app for iOS and Android กับ Automatic Service Detection and Provisioning ซึ่งไม่ได้บอกไว้ว่า refresh ถี่แค่ไหน แต่ก็ไม่จำเป็นต้องรู้ เพราะขอแค่ใช้ได้ตอนที่เราอยากจะ Remote ไปก็พอ

เมื่อตัดสินใจที่จะเดินทางนี้แล้ว เรามาเริ่มกันเลย

เตรียมอุปกรณ์

  • Raspberry Pi (ใช้ Pi 3 model B)
  • จอ TV/Monitor ที่มี Port HDMI
  • สาย HDMI เอาไว้ทดสอบหน้าจอ
  • Macbook คู่กาย

เหตุผลที่ใช้ Pi 3 ก็เพราะมันมี Wifi Module ในตัวไม่ต้องไปหา Donkle มาเสียบ ส่วนที่ต้องใช้จอ เพราะเราจะทดสอบว่าเวลา Remote เข้าไปแล้ว ที่หน้าจอเกิดอะไรขึ้นบ้าง

เตรียมโจทย์

  • เราอยากทำ Raspberry Pi ให้เป็นเครื่อง Kiosk คือ เปิดเครื่องมาปุ๊บ ก็แสดงหน้าจอที่เราอยากให้ User เห็น แบบ Full Screen เลย
  • หน้าจอที่แสดงผล จริงๆ แล้วเป็นหน้าเว็บ ที่เปิดด้วย Browser
  • เราอยาก Remote ไปที่เครื่อง Raspberry Pi นี้ได้
  • แถมมีข้อแม้ว่า ต้องเห็นหน้าจอปัจจุบันเหมือน Teamviewer ด้วย

ทำใจพร้อมแล้วก็ลงมือได้

1. เตรียม Raspberry Pi ให้พร้อม

ลง Lesbian เฮ้ย! Raspbian

Raspbian ใหม่สุด ณ วันที่เขียนก็ RASPBIAN JESSIE หาโหลดตามสะดวก แล้วไปนั่งเล่นได้เลย ไฟล์ 1.2GB
วิธีลงก็ตามสะดวก ง่ายสุดบน OS X ก็น่าจะเป็น ApplePi Baker

ตั้งค่า Network

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf  
network={  
    ssid="SSID"
    psk="password"
}
sudo ifdown wlan0  
sudo ifup wlan  

Update Package

sudo apt-get update  
sudo apt-get dist-upgrade  

2. ทำ fullscreen browser kiosk

sudo apt-get install matchbox x11-xserver-utils ttf-mscorefonts-installer xwit sqlite3 libnss3  

รีบูททีนึง sudo reboot

ลง chromium

# ลง libgcrypt11 ก่อน
wget http://ftp.acc.umu.se/mirror/cdimage/snapshot/Debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.3-5_armhf.deb

sudo dpkg -i libgcrypt11_1.5.3-5_armhf.deb  
# โหลด chromium package
# https://launchpad.net/ubuntu/vivid/armhf/chromium-browser/

wget http://launchpadlibrarian.net/234969703/chromium-browser_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb  
# โหลด ffmpeg extra package
# https://launchpad.net/ubuntu/vivid/armhf/chromium-codecs-ffmpeg-extra/

wget http://launchpadlibrarian.net/234969705/chromium-codecs-ffmpeg-extra_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb  
# ติดตั้ง chromium
sudo dpkg -i chromium-codecs-ffmpeg-extra_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb  
sudo dpkg -i chromium-browser_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb  

ตั้งค่า lxsession autostart

vim .config/lxsession/LXDE-pi/autostart  
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash

@xset s off
@xset -dpms
@xset s noblank

@sed -i 's/"exited_cleanly": false/"exited_cleanly": true/' ~/.config/chromium/Default/Preferences
@chromium-browser --kiosk --disable-session-crashed-bubble --disable-infobars http://app.ischool.ac.th/clockin/monitor --incognito
sudo vim /etc/lightdm/lightdm.conf  
# don't sleep the screen
xserver-command=X -s 0 dpms  

ถึงตรงนี้ก็ reboot หนนึง แล้วลองดูว่า มีการเปิด chromium browser แบบ fullscreen ไปที่ url ที่เราตั้งไว้โดยอัตโนมัติหรือเปล่า ถ้าได้ก็ไปต่อได้เลย

3. เตรียมพร้อมรอรับ VNC Client

สมัคร weaved.com แน่นอนว่าเลือกแบบฟรี

# ลง tightvncserver

sudo apt-get install tightvncserver  
sudo vim /etc/init.d/tightvncserver  

ใส่อันนี้ลงไป

#!/bin/sh
# /etc/init.d/tightvncserver
# Set the VNCUSER variable to the name of the user to start tightvncserver under
VNCUSER='pi'  
case "$1" in  
  start)
    su $VNCUSER -c '/usr/bin/tightvncserver :1'
    echo "Starting TightVNC server for $VNCUSER"
    ;;
  stop)
    pkill Xtightvnc
    echo "Tightvncserver stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
    ;;
esac  
exit 0  

จากนั้น

sudo chmod 755 /etc/init.d/tightvncserver  
sudo update-rc.d tightvncserver defaults  
# ลง Weaved Connect

sudo apt-get install weavedconnectd  

ตั้งค่า Weaved Service

sudo weavedinstaller  
********************* Sign In Menu *********************
*                                                      *
*    1) Sign in to your existing Weaved account        *
*    2) Request a code for a new Weaved account        *
*    3) Enter a verification code received in e-mail     *
*    4) Exit                                           *
*                                                      *
********************************************************

Please select from the above options (1-4):

# เลือก 1 แล้ว login
********************** Main Menu ************************
*                                                       *
*       1) Attach/reinstall Weaved to a Service         *
*       2) Remove Weaved attachment from a Service      *
*       3) Exit                                         *
*                                                       *
*********************************************************

Please select from the above options (1-3):

# เลือก 1 เพื่อ Attach Weaved to a Service
*********** Protocol Selection Menu ***********
*                                             *
*    1) SSH on default port 22                *
*    2) Web (HTTP) on default port 80         *
*    3) VNC on default port 5901              *
*    4) Custom (TCP)                          *
*    5) Return to previous menu               *
*                                             *
***********************************************

Please select from the above options (1-5):

# ทำตามขั้นตอนไปเรื่อยๆ

เลือก 3 ตั้งชื่อเป็น VNC-Pi แล้วใช้ default port 5901 เพื่อให้ Weaved ไปจับ Xtightvnc เลือก 1 ตั้งชื่อเป็น SSH-Pi แล้วใช้ default port 22 เพื่อให้ Weaved ไปจับ sshd

===========  Installed Weaved Services  =================
Protocol    Port    Service     Weaved Name  
=========================================================
VNC        5900    x11vnc          VNC-5900  
VNC        5901    Xtightvnc       VNC-Pi  
SSH        22      sshd            SSH-Pi  

ขั้นตอนนี้จะ VNC ไปทีั่ Raspberry Pi ผ่าน Internet ได้แล้ว แต่ Xtightvnc จะสร้าง Session ใหม่เสมอ เราเลยยังไม่เห็น Active Session

ลง x11vnc

apt-get install x11vnc  
x11vnc -storepasswd  
steps:  
install and set password  
- sudo apt-get install x11vnc
- x11vnc -storepasswd

create autostart entry

- cd .config
- mkdir autostart
- cd autostart
- nano x11vnc.desktop
- paste following text:

[Desktop Entry]
Encoding=UTF-8  
Type=Application  
Name=X11VNC  
Comment=  
Exec=x11vnc -forever -usepw -display :0 -ultrafilexfer  
StartupNotify=false  
Terminal=false  
Hidden=false  
sudo apt-get update  
sudo apt-get dist-upgrade  
sudo apt-get install matchbox x11-xserver-utils ttf-mscorefonts-installer xwit sqlite3 libnss3  

Then reboot : sudo reboot

Method 2 : lxsession autostart

vim .config/lxsession/LXDE-pi/autostart

@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash

@xset s off
@xset -dpms
@xset s noblank

@sed -i 's/"exited_cleanly": false/"exited_cleanly": true/' ~/.config/chromium/Default/Preferences

@chromium-browser --kiosk --disable-session-crashed-bubble --disable-infobars https://www.pangpondblog.com --incognito

sudo vim /etc/lightdm/lightdm.conf

# don't sleep the screen
xserver-command=X -s 0 dpms  

ทำให้ไม่โชว์ Boot Progress

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty3 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait loglevel=3 logo.nologo  

Mobile App

iOS : Weaved
Android : Weaved For Raspberry Pi