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
# Disable boot logo (top left)
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