====== 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