Toegang tot de gpio’s van de Pi in Ubuntu

Raspbian is dan wel het officiële besturingssysteem van de Raspberry Pi, je kunt er ook andere Linux-distributies op installeren. Helaas loop je dan tegen verschillen aan waardoor de uitleg die je voor Raspbian vindt niet altijd werkt, zelfs op de verwante distributies Debian of Ubuntu. Zo probeerde ik onlangs de nieuwe Ubuntu 19.10 eens uit, die als eerste Ubuntu-versie ondersteuning voor de Raspberry Pi 4 heeft. Maar al snel liep ik tegen een probleem aan toen ik de gpio’s wilde gebruiken in een Python-scriptje om een led te laten knipperen. Er is immers standaard geen groep gpio zoals in Raspbian die leden van die groep toegang geeft tot de gpio’s. Gelukkig is de oplossing niet zo moeilijk. Eerst dien je de Python-bibliotheek RPi.GPIO te installeren. Dat gaat eenvoudig met:

sudo apt install python3-pip
sudo pip3 install RPi.GPIO

Maak dan een systeemgroep met de naam gpio aan en voeg de standaardgebruiker ubuntu er aan toe:

sudo groupadd -f --system gpio
sudo adduser ubuntu gpio

Nu moet je de gebruiker nog toegang geven tot de gpio’s zonder dat je daarvoor sudo nodig hebt. Maak daarvoor het bestand /etc/udev/rules.d/10-gpiomem-permissions.rules aan:

sudo nano /etc/udev/rules.d/10-gpiomem-permissions.rules

Zet daarin het volgende:

KERNEL=="gpiomem", NAME="%k", GROUP="gpio", MODE="0660"

Sla op met Ctrl+o en sluit af met Ctrl+x. Daarna maak je het volgende Python-script aan:

import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BCM)
gpio.setup(18, gpio.OUT)

while True:
    gpio.output(18, gpio.HIGH)
    time.sleep(1)
    gpio.output(18, gpio.LOW)
    time.sleep(1)

Sla dit op onder de naam blink.py.

Schakel je Pi nu uit en sluit het lange pinnetje van een led op GPIO18 aan (het zesde pinnetje op de bovenste rij vanaf links geteld) en sluit het korte pinnetje via een weerstand van 220 Ω aan op GND (het pinnetje helemaal rechts op de onderste rij). Controleer of alles goed is aangesloten en start je Pi dan opnieuw op.

Als je nu het Python-script uitvoert, gaat de led knipperen:

python3 blink.py

Waar heb ik dat bestand gedownload?

Een weinig bekende eigenschap van bestanden in diverse bestandssystemen zijn extended file attributes: extra metadata die in het bestandssysteem opgeslagen kunnen worden bij bestanden. Om die uit te lezen, heb je het pakket attr nodig. Onder Ubuntu installeer je dit als:

sudo apt install attr

Extended file attributes worden nog niet veel gebruikt. SELinux gebruikt het op de achtergrond, maar voor eindgebruikers zijn enkele interessante programma’s die extended file attributes opslaan Dropbox, Chromium, wget en curl. Wil je alle extended attributes in de namespace user zien (andere namespaces worden door bijvoorbeeld SELinux gebruikt) voor bestanden in de huidige directory, voer dan de volgende opdracht uit:

getfattr -R -d .

Je kunt ook de extended file attributes van één specifiek bestand opvragen:

getfattr -d downloaded-file.jpg

Heb je een bestand in Chromium gedownload, dan kun je in de extended file attributes van het bestand zien van welke url je het gedownload hebt en wat de verwijzende pagina was. Dat vind je in de attributen user.xdg.origin.url en user.xdg.referrer.url. Interessant als je wilt weten waarvan je een bestand nu weer gedownload had, maar je kunt het ook als een privacyinbreuk beschouwen…

Wil je om privacyredenen geen extended file attributes gebruiken, dan dien je het bestandssysteem met de optie nouser_xattr aan te koppelen. Dat kan bijvoorbeeld door die optie in de derde kolom van het bestand /etc/fstab toe te voegen in de regel van het bestandssysteem. Of wil je een attribuut met gevoelige informatie verwijderen bij één specifiek bestand, doe dat dan als volgt:

setfattr -x user.xdg.origin.url downloaded-file.jpg

Je Android-scherm op je pc

Met het programma scrcpy kun je het scherm van je Android-telefoon op je pc tonen, en guiscrcpy biedt een grafische interface voor nog meer gebruiksgemak.

Installeer eerst scrcpy, bijvoorbeeld:

sudo snap install scrcpy

Download daarna de nieuwste release van guiscrcpy van de GitHub-pagina van het project (https://github.com/srevinsaju/guiscrcpy). Tijdens de redactiesluiting was dat guiscrcpy 1.10.0. Maak het programma daarna uitvoerbaar:

chmod +x guiscrcpy-1.10-27082019-linux

Installeer dan de Android Debug Tool:

sudo apt install adb android-sdk-platform-tools-common

Zet je Android-telefoon nu in ontwikkelaarsmodus. Ga daarvoor naar Instellingen > Over de telefoon en druk zeven keer op Build-nummer (dat lijkt wat vreemd, maar het is geen grap). Ga daarna naar het nieuwe onderdeel Opties voor ontwikkelaars in de instellingen en schakel USB-foutopsporing in. Sluit je telefoon via usb op je laptop aan.

Start nu guiscrcpy:

./guiscrcpy-1.10-27082019-linux

Bevestig nu op je telefoon dat je usb-foutopsporing wilt toestaan. Klik dan in guiscrcpy op Start scrcpy. Daarna krijg je het scherm van je Android-telefoon in een venster te zien. Je kunt nu gewoon je telefoon via dit scherm besturen.

Guiscrcpy heeft ook nog twee heel kleine vensters: een Toolkit UI Controller met knopjes om de notification drawer te openen en te sluiten, het volume omhoog en omlaag te doen, tekst te kopiëren, naar portret- en landschapsmodus over te schakelen enzovoort, en een Bottom Panel Controller voor rechtstreekse toegang tot de knoppen Home, Terug, Power enzovoort. Verder vind je in het hoofdscherm van guiscrcpy ook opties om bijvoorbeeld het scherm van de telefoon fullscreen te tonen. Guiscrcpy werkt overigens nog niet in Wayland, dus wellicht dien je je sessie eerst naar X11 over te schakelen.

https://srevinsaju.github.io/guiscrcpy/

Wireshark in de terminal

De packetsniffer en protocolanalyzer Wireshark is heel handig om netwerkproblemen te analyseren, maar soms heb je geen grafische interface tot je beschikking of vind je een terminalsessie gewoon handiger. De commandline-alternatieven tshark of tcpdump vereisen echter dat je een hele syntax van opties onthoudt. Een gebruiksvriendelijker alternatief is dan termshark.

Start termshark en laat het programma op de gewenste interface luisteren:

termshark -i wlp4s0

Daarvoor dient je gebruiker wel lid te zijn van de groep wireshark. Voeg de gebruiker indien nodig (dat zie je met id) toe aan de groep met sudo adduser gebruikersnaam wireshark.

Termshark is een grafische interface voor tshark die geïnspireerd is door de interface van Wireshark. Als je dus met Wireshark overweg kunt, ben je snel mee met de werking van termshark. Bovenaan zie je alle netwerkpakketjes binnenkomen, in het midden kun je de pakketjes ontleden en onderaan zie je de ruwe bytes van het geselecteerde pakket.

Met de tabtoets schakel je over tussen de verschillende views en ook de muis is ondersteund. Met de toets / kun je een displayfilter instellen als je slechts in specifieke pakketten geïnteresseerd bent. Vergeet niet daarna  te kiezen.

https://termshark.io/