2020-08-13

Raspberry Pi

Download image

https://www.raspberrypi.org/downloads/

unzip xxx.zip

dd if=xxx.img of=/dev/sdx bs=100M

-- or --

unzip -p xxx.zip  | sudo dd of=/dev/sdx bs=100M

* first time boot will resize root partition

  cmdline.txt:

   init=/usr/lib/raspi-config/init_resize.sh   


config:

raspi-config


/boot/config.txt

https://www.raspberrypi.org/documentation/configuration/config-txt/boot.md

# GPU Memory
gpu_mem=512

disable_overscan=1

# Disable rainbow image at boot
disable_splash=1

/boot/cmdline.txt
logo.nologo

# change boot message to tty3 (no boot message)
console=tty3



Boot splash:
/usr/share/plymouth/themes/pix/splash.png

default user/password: pi/raspberry

No Mouse Pointer / no screensaver:
/etc/lightdm/lightdm.conf
[SeatDefaults]
xserver-command=X -s 0 -dpms -nocursor

change background:
DISPLAY=:0.0 pcmanfm --set-wallpaper xxx.jpg

Error: desktop manager is not active
run from cron:
export DISPLAY=:0.0
export XAUTHORITY=/home/pi/.Xauthority # ???
export XDG_RUNTIME_DIR='/run/user/1000'

pcmanfm --set-wallpaper xxx.jpg

pcmanfm --reconfigure --display=:0.0


change IP:

/etc/dhcpcd.conf
interface eth0
static ip_address=192.168.0.4/24    
static routers=192.168.0.254
static domain_name_servers=192.168.0.254 8.8.8.8

profile ssid_xxx
    ipv4only
    static ip_address=192.168.4.2/24

ssid xxx
   fallback ssid_xxx

ssid yyy
   static ip_address=192.168.4.3/24


Wifi:
/etc/wpa_supplicant/wpa_supplicant.conf
network={
   ssid="xxx"
   psk="XXX"
   key_mgmt=WPA-PSK
   priority=5
}
network={
   ssid="yyy"
   psk="yyy"
   key_mgmt=WPA-PSK
   scan_ssid=1
   priority=3
}
network={
   ssid="zzz"
   key_mgmt=NONE
   priority=7
}

Disable service:
sudo update-rc.d boa disable

sudo apt update
sudo apt-get install apache2


/etc/apache2/mods-enabled
sudo ln -s ../mods-available/auth_basic.load
sudo ln -s ../mods-available/cgi.load

/etc/apache2/apache2.conf
<Directory "/usr/local/apache2/htdocs/somedir">
    Options +ExecCGI
</Directory>

AddHandler cgi-script .cgi .pl

/etc/apache2/sites-enabled/999-my.conf
<Location "/">
    AuthType basic
    AuthName "private area"
    AuthBasicProvider  file
    AuthUserFile    "/etc/apache2/password/htpasswd"
    Require            valid-user
</Location>

sudo systemctl restart apache2
sudo systemctl status apache2

virtual wlan interface
https://www.suse.com/c/creating-virtual-wlan-interfaces/

modprobe mac80211_hwsim
# wlan1 & wlan2 will be created

/etc/modules
mac80211_hwsim
* auto load

routed wireless access point

sudo apt install hostapd

sudo systemctl unmask hostapd
sudo systemctl enable hostapd

sudo apt install dnsmasq

sudo DEBIAN_FRONTEND=noninteractive apt install -y netfilter-persistent iptables-persistent

/etc/dhcpcd.conf
profile static_wlan0
static ip_address=192.168.4.1/24

interface wlan0
    env ifwireless=0
    fallback static_wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant

* fix static ip/nohook not work

/etc/sysctl.d/routed-ap.conf
net.ipv4.ip_forward=1

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo netfilter-persistent save

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

/etc/dnsmasq.conf
# Listening interface
interface=wlan0

dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h
# Pool of IP addresses served via DHCP
# Local wireless DNS domain
domain=wlan
address=/gw.wlan/192.168.4.1
# Alias for this router

sudo rfkill unblock wlan

/etc/hostapd/hostapd.conf
country_code=GB
interface=wlan0
ssid=NameOfNetwork
hw_mode=g
channel=7
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AardvarkBadgerHedgehog
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP


*** dnsmasq make resolv.conf nameserver -> 127.0.0.1

resolvconf -i
resolvconf -d lo.dnsmasq


Captive Portal
https://captivebehavior.wballiance.com/

android:
http://connectivitycheck.gstatic.com/generate_204
ios:
http://captive.apple.com/hotspot-detect.html
mi:
http://connect.rom.miui.com/generate_204
http://developers.google.cn/generate_204
samsung:
?

Web Server:
ln -s index.html generate_204
ln -s index.html hotspot-detect.html

/etc/dnsmasq.conf
# ALL domain -> 192.168.4.243
address=/#/192.168.4.243

redirect any tcp port 80/443 from interface wlan0 to 192.168.4.243
iptables -t nat -I PREROUTING -i wlan0 -p tcp --dport 80 -j DNAT --to 192.168.4.243:80
iptables -t nat -I PREROUTING -i wlan0 -p tcp --dport 443 -j DNAT --to 192.168.4.243:443




Video player: OpenMAX H.264 GPU decode (pi 3 test youtube 1080@60) 
omxplayer
    -o both    audio 3.5mm & hdmi
    -o local    audio 3.5mm
    -o hdmi    audio hdmi
    -o alsa[:device]    bluetooth, etc
    --timeout 0    (fix m3u8 live stream stop)
    --win x1,y1,x2,y2    geometry
    --crop x1,y1,x2,y2
    --layer n    Set video render layer number (higher numbers are on top) (multi omxplayer)

web server: boa
sudo apt-get install boa

# add video/audio play permission to web cgi (user: www-data)
sudo usermod -a -G video www-data
sudo usermod -a -G audio www-data

/etc/boa/boa.conf
AddType application/x-httpd-cgi cgi

/etc/sudoers.d/power
# cgi to reboot/poweroff
www-data ALL = NOPASSWD:/sbin/reboot, /sbin/poweroff

sudo service boa start


Photo Viewer: feh

Launch bar logo
sudo cp xxx.png /usr/share/icons/PiX/16x16/places/rpi-logo.png
sudo cp xxx.png /usr/share/icons/PiX/24x24/places/rpi-logo.png
sudo cp xxx.png /usr/share/icons/PiX/32x32/places/rpi-logo.png
sudo cp xxx.png /usr/share/icons/PiX/48x48/places/rpi-logo.png

Raspberry logo
sudo cp yyy.png /usr/share/icons/hicolor/32x32/apps/rpi.png
sudo cp yyy.png /usr/share/icons/PiX/16x16/apps/rpi.png
sudo cp yyy.png /usr/share/icons/PiX/24x24/apps/rpi.png
sudo cp yyy.png /usr/share/icons/PiX/32x32/apps/rpi.png
sudo cp yyy.png /usr/share/icons/PiX/48x48/apps/rpi.png


/etc/rc.local not execute at first time power on
rc.local run before dependency service & got error
 -> check & wait for the service ready

systemctl list-units --no-pager

$ systemctl status rc.local

Warning: The unit file, source configuration file or drop-ins of rc-local.service changed on disk. Run 'systemctl daemon-reload' to reload units.

sudo systemctl daemon-reload


poweroff / reboot slow
/etc/systemd/system.conf
   DefaultTimeoutStopSec=5s