Utilizzare il Raspberry Pi 3 via Termux

AGGIORNATO IN DATA 8/03/2018

In data 8/03/2018 ho modificato quasi completamente il post originale, perché ho deciso di impuntarmi e risolvere i miei problemi con Raspbian Stretch. La soluzione adottata in questa versione dell’articolo è senza dubbio migliore della precedente: è più facile, più veloce e ho utilizzato una distribuzione (Raspbian) adatta ad un uso giornaliero. Ho comunque salvato in un file pdf l’articolo originale, che potete scaricare qui.

+++++++++++++++++++

Qualche mese fa ho comprato un Raspberry Pi 3 Model B, l’ho comprato per curiosità, per giocarci (letteralmente). Nelle settimane successive ho acquistato un piccolo schermo da 3,5 pollici, una powerbank e un paio di joystick (modello Nintendo SNES) e grazie al bellissimo progetto RetroPie ho trasformato il mio Raspberry in una console portatile di giochi retro.

Nel frattempo ho anche voluto provare qualche distribuzione, ne ho provate in totale tre: Raspbian Jessie, Raspbian Stretch e Kali Linux 2017.3. Il primo approccio con Raspbian Jessie è stato perfetto, tutto funzionava alla perfezione, non ha richiesto particolari configurazioni. Purtroppo non posso dire lo stesso della versione successiva, Stretch, che continua a darmi problemi nonostante sia ormai considerata stabile, soprattutto continua a bloccarsi totalmente il sistema operativo quando quest’ultimo utilizza l’antenna wireless integrata per connettersi alla rete (problematica risolta). Proprio a causa di questi piccoli problemi con Raspbian Stretch ho deciso di provare anche Kali Linux perché dalla versione 2017.3 contiene il kernel Re4son , un kernel modificato che al suo interno ha preinstallati diversi driver per vari chipset wireless.

L’obiettivo di questo post è spiegare come configurare un Raspberry per poterlo usare tramite smartphone Android via connessione SSH, anche se il Raspberry non è connesso a nessuna rete wi-fi.

Io mi sono trovato, casualmente, a dovermi arrangiare con questi oggetti:

  • Raspberry Pi 3 Model B +  Kali 2017.3 Raspbian Stretch
  • ‎TP Link TL-WN722N v3

La mia chiavetta ha un chipset Realtek e Raspbian Stretch la riconosce subito automaticamente, ma se così non fosse basta dare i seguenti comandi per risolvere la situazione:

sudo apt-get update
sudo apt-get install firmware-realtek

Per utilizzare il Raspberry via SSH anche se quest’ultimo non è connesso a una rete l’idea è quella di usare (almeno) due antenne wi-fi, una per creare un access point e  un’altra libera di connettersi a internet. Una volta creato un AP potremmo connetterci via SSH tramite l’applicazione Termux e utilizzare così il terminale. In ordine ho dovuto:

  1. Installare Network Manager e rinunciare a dhcpd
  2. Configurare Raspbian affinché ad ogni avvio assegni sempre gli stessi nomi alle antenne wi-fi
  3. Creare un access point e far sì che questo si crei in automatico ad ogni avvio

1.

Ho deciso di rinunciare a dhcpd in favore di Network Manager, perché quest’ultimo semplifica molto la vita quando ci si vuole connettere a una rete wi-fi usando solo il terminale e perché con dhcpd, usando l’antenna integrata, Raspbian Stretch mi si blocca in maniera quasi sistematica. Seguendo un commento su StackExchange, do i seguenti comandi nel terminale:

sudo apt-get install network-manager network-manager-gnome
sudo apt-get purge openresolv dhcpcd5
sudo ln -sf /lib/systemd/resolv.conf /etc/resolv.conf

Fatto ciò posso rimuovere l’icona del wi-fi nel pannello in alto, che verrà sostituita dall’icona di Network Manager.

reboot

2.

A questo punto devo assegnare dei nomi fissi alle due antenne wi-fi, quella interna e quella esterna. Dopo numerosi tentativi falliti scopro, grazie a un topic sul forum di RaspberryPi, che prima bisogna eliminare il file /etc/systemd/network/99-default.link.
Ritento e fallisco ancora, scopro infatti che Network Manager cambia i MAC Address ad ogni avvio, per evitare ciò modifico il file /etc/NetworkManager/NetworkManager.conf e aggiungo le seguenti righe:

[device]
wifi.scan-rand-mac-address=no

[connection]
ethernet.cloned-mac-address=preserve
wifi.cloned-mac-address=preserve

Salvo e riavvio due volte per accertarmi che i MAC Address siano persistenti. Una volta fatto ciò mi basta creare il file /etc/udev/rules.d/70-persistent-net.rules e aggiungerci il seguente testo:

ACTION=="add", SUBSYSTEM=="net", DRIVERS=="brcmfmac", NAME="wlan0"
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="mac:addr:ext:wifi", NAME="wlan1"

Riavvio, per accertarmi che i nomi siano correttamente assegnati: wlan0 è l’antenna integrata nel Raspberry e servirà a creare l’access point e wlan1 è l’antenna USB che servirà per collegarsi alle reti wi-fi .

3.

Ora bisogna creare un access point, ci sono diverse guide in internet, ma io ho trovato molto comodo e veloce il programma create_ap di oblique. Procedo quindi all’installazione di create_ap:

git clone https://github.com/oblique/create_ap
cd create_ap
sudo make install

Digito ora i seguenti comandi, che servono a creare un access point con l’antenna integrata del Raspberry, appoggiarsi all’antenna esterna per collegarsi ad una rete wi-fi e ripetere quest’azione ad ogni avvio:

sudo create_ap wlan0 wlan1 AccessPoint PasswordAP --mkconfig /etc/create_ap.conf
sudo systemctl start create_ap
sudo systemctl enable create_ap
reboot

A questo punto, se tutto fila liscio, appare la rete wi-fi AccessPoint, collego il telefono a questa rete wi-fi, e apro Termux dove digito il comando ssh [email protected]. Inserisco le credenziali d’accesso et voilà! Posso utilizzare il Raspberry comodamente tramite smartphone. Un programma utile per gestire al meglio le connessioni SSH è screen.

C’è un ultimo problema da risolvere: l’access point creato per ora non ha una connessione ad internet, e se il telefono è connesso alla rete creata dal Raspberry allora non può essere connesso a un’altra rete wi-fi (e quindi è privo di una connessione internet). Basta utilizzare quindi wlan1 per connettere il Raspberry ad una rete wi-fi funzionante. Per fare ciò uso il comando nmcli, che non è altro che il Network Manager da riga di comando.

nmcli device wifi rescan
nmcli device wifi list
nmcli device wifi connect SSID-Name password wireless-password

Ringrazio un post di Peter Robinson per avermi fatto scoprire questo comando e avermi semplificato la vita. Questa, per ora, è la soluzione che ho adottato io.

Pareri e conclusioni personali:

  • Kali 2017.3 è una buona distribuzione per Raspberry, soprattutto grazie al suo kernel e ai repository molto ampi, ma non è pensata per un utilizzo giornaliero.
  • La mia esperienza con Raspbian Jessie è stata di gran lunga migliore di quella con Raspbian Stretch.
  • Il progetto Retropie per emulare vecchi videogiochi è davvero bellissimo, se non sapete come utilizzare un Raspberry, compratevi due joystick, installate Retropie e giocate a Mario Kart, che è avvincente anche dopo trent’anni.
  • Visto le piccole, ma pur sempre fastidiose, problematiche con l’ultima versione di Raspbian penso proverò Ubuntu Mate 16 per Raspberry. L’idea è di trovare una distribuzione con cuore Debian che sia stabile e leggera per un utilizzo giornaliero.
    Ho provato Ubuntu Mate 16 e personalmente l’ho trovato terribile.