====== Un Raspberry Pi al posto del notebook ======
===== Abilitare SSH =====
Per abilitare l'accesso via SSH senza poter utilizzare monitor o tastiera del Raspberry Pi è sufficiente creare un file di nome **ssh** nella partizione **boot** della microSD (ovviamente estraendola dal Raspberry e montandola in un PC).
Al reboot successivo il servizio ssh verrà attivato in modo permanente e il file **/boot/ssh** rimosso.
===== Abilitare l'utente pi in Bullseye =====
**ATTENZIONE**: Fino alla versione RaspiOS basata su **Debian 10 Buster** l'utente **root** ha la password bloccata e comunque **sshd** impedisce l'accesso a root con password (''PermitRootLogin prohibit-password''). L'utente **pi** invece ha password predefinita **raspberry** e può diventare superutente con **sudo**.
Dalla versione RaspiOS basata su **Debian 11 Bullseye** anche l'utente ''pi'' ha la password bloccata, quindi non è possibile fare accesso via ssh con password. Per attivare l'utente pi con una propria password è necessario creare un file **/boot/userconf** con questo contenuto:
pi:$6$hM909zCtb36kTuHt$yJjk4...
dove la stringa che segue i due punti è l'hash SHA256 della password, ottenibile con il comando:
echo raspberry | openssl passwd -6 -stdin
Vedere la manpage **openssl-passwd(1SSL)** per le opzioni di ''openssh''.
===== Abilitare il WiFi =====
Per attivare l'interfaccia WiFi senza accedere in maniera interattiva all'installazione del Raspberry Pi è sufficiente creare un file di nome **wpa_supplicant.conf** nella partizione **boot** della microSD. Il contenuto deve essere qualcosa del genere (è possibile specificare più di una sezione //network// per più reti WiFi):
country=IT
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="NETWORK-NAME"
psk="NETWORK-PASSWORD"
}
===== raspi-config =====
**ATTENZIONE**! Se non si ha una tastiera collegata al Raspberry Pi l'esecuzione di **raspi-config** => //Localisation Options// => **Change Keyboard Layout** non funziona. Inutile installare e configurare **console-data** come suggerito da questo [[https://github.com/openhab/openhabian/issues/75|post]]. In pratica se non esiste una tastiera fisica collegata all'host il comando **dpkg-reconfigure keyboard-configuration** termina senza generare output. Non è un problema dovuto alla sessione ssh come suggerito da questo post: [[https://raspberrypi.stackexchange.com/questions/54148/keyboard-configuration-doesnt-work-via-ssh|Keyboard configuration doesn't work via SSH?]].
Per far funzionare correttamente **raspi-config** conviene eseguirlo da utente **pi** con il comando **sudo raspi-config**; se si effettua il login direttamente come root oppure se si diventa root da qualche altro utente ci potrebbero essere dei problemi di funzionamento.
Per configurare la tastiera si sceglie da **raspi-config** la voce //Localisation Options// => //Change Keyboard Layout//. Oppure da riga di comando si esegue
dpkg-reconfigure keyboard-configuration
Nella versione **RaspiOS 2020-05-27** a volte non funziona (non si avvia) l'interfaccia testuale di configurazione. Provare ad eseguire nell'interfaccia grafica il programma //Preferences// => //Keyboard and Mouse// => //Keyboard// => //Keyboard Layout...//
Il file che viene creato è **/etc/default/keyboard**, questo un esempio per una tastiera italiana e il tasto LeftLogo associato alla funzione //compose//:
XKBMODEL="pc105"
XKBLAYOUT="it"
XKBVARIANT=""
XKBOPTIONS="compose:lwin"
BACKSPACE="guess"
===== Abilitare VNC =====
Per attivare il VNC Server sul Raspberry Pi si esegue in una shell **raspi-config** quindi //Interfacing Options// => //VNC//.
Su un PC remoto su lancia il comando **vncviewer**, ma si ottiene l'errore:
CConnection: Using RFB protocol version 3.8
CConnection: No matching security types
Questo perché il viewer (client) non supporta la crittografia del VNC Server in esecuzione sul Raspberry Pi. È necessario disabilitare la crittografia, ma possibilmente impostare una password di accesso. Per ottenere questo risultato si deve creare un file **/root/.vnc/config.d/vncserver-x11** che contenga:
Authentication=VncAuth
Encryption=AlwaysOff
Password=????????
quindi il campo password (che conterrà un hash della password stessa) deve essere aggiornato eseguendo il comando:
vncpasswd -service
In alternativa a **vncpasswd** è possibile eseguire il programma **VNC Server** in modalità grafica (cliccando sull'icona nella pannello) e poi cliccare sul link //Authentication// => //Change password//.
===== Tastiera Bluetooth =====
Abbiamo provato una tastiera Bluetooth **Perixx Periboard 804II**.
=== Vantaggi ===
* Compatta (300 x 150 x 15 mm) e leggera (273 grammi).
* Batteria integrata ricaricabile con porta micro USB.
* Non richiede dongle USB perché utilizza il Bluetooth integrato del Raspberry Pi 3.
=== Svantaggi ===
* A volte è necessario premere ripetutamente un tasto per uscire dallo sleep mode.
* La meccanica dei tasti è solo discreta.
Per connetterla la prima volta al Raspberry Pi è necessario accenderla e premere il pulsantino **connect** sul retro, la tastiera si mette in modalità pairing ed il led Bluetooth inizia a lampeggiare. Quindi sul Raspberry, da riga di comando, si esegue una shell **bluetoothctl**. Quella che segue è la sessione per il paring e il connect. Quando viene mostrato il PIN, questo va digitato sulla tastiera seguito dal tasto Enter:
# bluetoothctl
Agent registered
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# agent on
Agent is already registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:76:B3:62 Discovering: yes
[NEW] Device 41:39:4E:4D:D2:64 41-39-4E-4D-D2-64
[NEW] Device CC:C5:0A:0E:0B:EB CC-C5-0A-0E-0B-EB
[CHG] Device CC:C5:0A:0E:0B:EB LegacyPairing: no
[CHG] Device CC:C5:0A:0E:0B:EB Name: Bluetooth Keyboard
[CHG] Device CC:C5:0A:0E:0B:EB Alias: Bluetooth Keyboard
[CHG] Device CC:C5:0A:0E:0B:EB LegacyPairing: yes
[bluetooth]# pair CC:C5:0A:0E:0B:EB
Attempting to pair with CC:C5:0A:0E:0B:EB
[CHG] Device CC:C5:0A:0E:0B:EB Connected: yes
[agent] PIN code: 493972
[CHG] Device CC:C5:0A:0E:0B:EB Modalias: usb:v04E8pA02Ad0001
[CHG] Device CC:C5:0A:0E:0B:EB UUIDs: 00001000-0000-1000-8000-00805f9b34fb
[CHG] Device CC:C5:0A:0E:0B:EB UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Device CC:C5:0A:0E:0B:EB UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device CC:C5:0A:0E:0B:EB ServicesResolved: yes
[CHG] Device CC:C5:0A:0E:0B:EB Paired: yes
Pairing successful
[CHG] Device CC:C5:0A:0E:0B:EB ServicesResolved: no
[CHG] Device CC:C5:0A:0E:0B:EB Connected: no
[bluetooth]# connect CC:C5:0A:0E:0B:EB
Attempting to connect to CC:C5:0A:0E:0B:EB
[CHG] Device CC:C5:0A:0E:0B:EB Connected: yes
Connection successful
[CHG] Device CC:C5:0A:0E:0B:EB ServicesResolved: yes
[Bluetooth Keyboard]# trust CC:C5:0A:0E:0B:EB
[CHG] Device CC:C5:0A:0E:0B:EB Trusted: yes
Changing CC:C5:0A:0E:0B:EB trust succeeded
Avendo attivato il **trust** la tastiera verrà collegata automaticamente ad ogni riavvio, è sufficiente che sia accesa.
FIXME Cosa accade se usiamo la tastiera accoppiata con un altro dispositivo? Sarà necessario fare di nuovo il paring?
===== Tastiera Wireless =====
Abbiamo provato una tastiera wireless **K810** (commercializzata su Amazon con il marchio **WisFox** oppure **TedGem**) abbinata ad un dongle USB che gestisce contemporaneamente un mouse wireless.
=== Vantaggi ===
* Qualità costruttiva elevata, ottimo feedback dei tasti.
* Un solo dongle USB per mouse e tastiera.
* Estremamente compatta (288x125x20 mm).
* Nessuna necessità di effettuare il pairing.
=== Svantaggi ===
* Peso leggermente più elevato (356 grammi con le batterie) a causa delle parti in metallo. Il muose combinato pesa altri 70 grammi (sempre con batteria).
* Batterie non ricaricabili.
===== Web References =====
* **[[https://desertbot.io/blog/headless-raspberry-pi-4-remote-desktop-vnc-setup|Headless Raspberry Pi 4 Remote Desktop VNC Setup]]**
* **[[https://superuser.com/questions/1194583/tigervnc-viewer-no-matching-security-types|TigerVNC viewer: no matching security types]]**
* **[[https://maps.openrouteservice.org/|openrouteservice.org]]** Web Mapping and routing
* **[[http://www.yournavigation.org/|yournavigation.org]]** Web Mapping and routing
* **[[https://graphhopper.com/maps/|graphhopper.com]]** Web Mapping and routing