Raspberry PI: Unterschied zwischen den Versionen
Satria (Diskussion | Beiträge) |
Satria (Diskussion | Beiträge) (→Raspberry PI mit GUI) |
||
(38 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
Nach dem Schreiben des Images auf die microSD Karte kann in der boot Partition | Nach dem Schreiben des Images auf die microSD Karte kann in der boot Partition | ||
# eine Datei "ssh" erstellt werden, um den SSH Zugang gleich zu Beginn zu aktivieren. | # eine Datei "ssh" erstellt werden, um den SSH Zugang gleich zu Beginn zu aktivieren. | ||
− | # eine Datei "wpa_supplicant.conf" erstellt werden, damit sich der Raspi gleich zu Beginn mit dem darin eingetragenen WLAN verbindet. Der Inhalt ist in etwa so:<br><code>country=DE<br>ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev<br>update_config=1<br>network=<br>{<br> ssid="name"<br> scan_ssid=1<br> psk="passwort"<br> key_mgmt=WPA-PSK<br>}</code><br>scan_ssid=1 ist entscheidend, wenn der | + | # eine Datei "wpa_supplicant.conf" erstellt werden, damit sich der Raspi gleich zu Beginn mit dem darin eingetragenen WLAN verbindet. Der Inhalt ist in etwa so:<br><code>country=DE<br>ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev<br>update_config=1<br>network=<br>{<br> ssid="name"<br> scan_ssid=1<br> psk="passwort"<br> key_mgmt=WPA-PSK<br>}</code><br>scan_ssid=1 ist entscheidend, wenn der Accesspoint die SSID versteckt. |
# LAN IP herausfinden. Wenn der Raspberry per LAN, aber nicht an einem DHCP Server betrieben wird, wird er sich eine IP aus dem Bereich <code>169.254.x.x</code> geben. Man muss dem angeschlossenen Computer dann eine IP geben wie:<code>169.254.1.1/16</code>. Dann wird der Name <code>raspberrypi</code> zu dem Raspi führen, um die erste Konfiguration durchführen zu können. | # LAN IP herausfinden. Wenn der Raspberry per LAN, aber nicht an einem DHCP Server betrieben wird, wird er sich eine IP aus dem Bereich <code>169.254.x.x</code> geben. Man muss dem angeschlossenen Computer dann eine IP geben wie:<code>169.254.1.1/16</code>. Dann wird der Name <code>raspberrypi</code> zu dem Raspi führen, um die erste Konfiguration durchführen zu können. | ||
Nach dem Login per SSH mit dem Standardzugang "pi:raspberry" sollte wie immer | Nach dem Login per SSH mit dem Standardzugang "pi:raspberry" sollte wie immer | ||
sudo raspi-config | sudo raspi-config | ||
− | ausgeführt werden, um die Basiskonfiguration des Raspi vorzunehmen und | + | ausgeführt werden, um die Basiskonfiguration des Raspi vorzunehmen und das Standardkennwort zu ändern. |
+ | |||
+ | === RaspiOS Standardbenutzer === | ||
+ | In der neuen Version des Raspberry Betriebssystems gibt es keinen Standardbenutzer "pi" mehr. Zusätzlich zu den Methoden "Raspberry Pi Imager" beim Bootvorgang mit anschlossener Peripherie gibt es auch die Möglichkeit, eine Datei "userconf" in der boot Partition anzulegen mit folgendem Inhalt: | ||
+ | username:passwordhash | ||
+ | |||
+ | ''passwordhash'' stellt das verschlüsselte Passwort dar, das so generiert werden kann: | ||
+ | echo 'passwort' | openssl passwd -6 -stdin | ||
+ | |||
+ | "passwort" ist hierbei natürlich frei zu wählen. | ||
== Verschiedene Tricks == | == Verschiedene Tricks == | ||
Zeile 26: | Zeile 35: | ||
dtoverlay=disable-wifi | dtoverlay=disable-wifi | ||
− | === | + | === Hardwaremeldungen abfragen === |
+ | Mit | ||
+ | dmesg | ||
+ | fragt man das log ab, in dem auch eine "Undervoltage" aufgeführt würde, wenn sie vorkommt. | ||
+ | |||
Mit | Mit | ||
− | + | vcgencmd | |
− | + | lassen sich verschiedene Statús des VideoCores abfragen, darunter auch ''get_throttled'', was bei dem zurückgelieferten Wert '''0x50000''' für einen vergangenen und bei '''0x50005''' für einen akuten Spannungsabfall steht. | |
+ | === Wert in realtime beobachten === | ||
Mit | Mit | ||
− | + | watch -n 1 ... | |
− | + | kann z.B. der Wert für ''vcgencmd get_throttled'' in Echtzeit (1s Update) angesehen werden, anstatt vcgencmd immer wieder aufzurufen. | |
+ | |||
+ | === Spannungswarnung deaktivieren === | ||
+ | Wenn auf der Console ständig eine Meldung erscheint wie | ||
+ | hwmon hwmon1: Undervoltage detected! | ||
+ | und es einfach beim Schreiben nervt, lässt sich das abschalten mit dem Befehl: | ||
+ | sudo dmesg -n 1 | ||
+ | |||
+ | === armhf auf arm64 === | ||
+ | Notiz: | ||
+ | dpkg --add-architecture armhf | ||
+ | |||
+ | === Firmware update === | ||
+ | Um den Bootloader zu flashen führt man im RaspiOS das hier aus: | ||
+ | sudo rpi-eeprom-update -a | ||
+ | |||
+ | == Benchmarks == | ||
+ | Einige Benchmark Kommandos: | ||
+ | |||
+ | <code><poem> | ||
+ | sysbench --test=cpu --cpu-max-prime=10000 --num-threads=4 run | ||
+ | |||
+ | sysbench --test=fileio --file-total-size=512M prepare | ||
+ | sysbench --test=fileio --file-total-size=512M --file-test-mode=seqrd --init-rng=on --max-time=60 run | ||
+ | sysbench --test=fileio --file-total-size=512M --file-test-mode=seqwr --init-rng=on --max-time=60 run | ||
+ | sysbench --test=fileio --file-total-size=512M --file-test-mode=rndrw --init-rng=on --max-time=60 run | ||
+ | sysbench --test=fileio --file-total-size=512M cleanup | ||
+ | |||
+ | sysbench --test=memory --memory-total-size=3G --memory-access-mode=rnd run | ||
+ | </poem></code> | ||
+ | |||
+ | == Raspberry PI mit GUI == | ||
+ | Auch wenn man ein lite image (ohne Desktop) installiert hat, kann man ein GUI (Desktop) nachinstallieren, z.B. "lightdm". | ||
+ | |||
+ | Um den Desktop zu starten und sich erfolgreich anmelden zu können, müssen 2 Pakete nachinstalliert werden: | ||
+ | apt install lightdm | ||
+ | und | ||
+ | apt install lxsession | ||
+ | Danach kann über | ||
+ | sudo lightdm | ||
+ | der Desktop gestartet werden oder per raspi-config das System so eingestellt werden, dass es immer in den Desktop bootet. | ||
+ | |||
+ | === Nützliche tools === | ||
+ | Was beim Benutzen des Desktops helfen kann, sind diese tools, die sich per ''apt install'' installieren lassen | ||
+ | |||
+ | * file-roller (Archivverwaltung) | ||
+ | * gdebi (Debian packet installer) | ||
+ | * gedit (Texteditor) | ||
+ | * wvkbd (Bildschirmtastatur) | ||
+ | * eog (Bildbetrachter) | ||
+ | |||
+ | === Bildschirmtastatur im Alltag === | ||
+ | Eine Tastatur, die sich automatisch ein- und ausblendet ist nicht so einfach zu realisieren. Was ganz gut funktioniert ist diese Lösung mit der ''wvkbd'' Tastatur, die leider keine gute Integration in eine Desktop Umgebung mit sich bringt. | ||
+ | |||
+ | ~/toggle-keyboard.sh | ||
+ | #!/bin/bash | ||
+ | PID="$(pidof wvkbd-mobintl)" | ||
+ | if [ "$PID" != "" ]; then | ||
+ | kill $PID | ||
+ | else | ||
+ | wvkbd-mobintl & | ||
+ | fi | ||
+ | |||
+ | /usr/share/raspi-ui-overrides/applications/toggle-keyboard.desktop | ||
+ | [Desktop Entry] | ||
+ | Name=Toggle Virtual Keyboard | ||
+ | Comment=Toggle Virtual Keyboard | ||
+ | Exec=/home/pi/toggle-keyboard.sh | ||
+ | Type=Application | ||
+ | Icon=/usr/share/icons/PiXflat/24x24/devices/keyboard.png | ||
+ | Categories=Panel;Utility;MB | ||
+ | X-MB-INPUT-MECHANISM=True | ||
+ | |||
+ | ~/.config/wf-panel-pi.ini | ||
+ | ... | ||
+ | launcher_00000x=toggle-keyboard.desktop | ||
+ | ... | ||
+ | Das erzeugt ein Tastatur-Icon im launcher der Taskleiste. | ||
+ | |||
+ | == microSD Karten Image verkleinern == | ||
+ | Den Speicher (microSD Karte) des PI zu sichern ist denkbar einfach. Z.B. mit Win32DiskImager kann man den Karteninhalt als .img Datei sichern und zum Beschreiben einer neuen microSD Karte verwenden. 2 Probleme gibt es dabei: | ||
+ | # Das Image hat immer die volle Größe der microSD Karte. Das ist aus Platzgründen schon nicht sehr schön. | ||
+ | # Die zu beschreibende microSD Karte darf nicht auch geringfügig kleiner sein als das Image, weil sonst das Schreiben gar nicht erst gestartet wird. | ||
+ | |||
+ | Es gibt eine Möglichkeit, das Image zu verkleinern und zwar auf die minimal nötige Größe: | ||
+ | |||
+ | Voraussetzungen für diese Anleitung: | ||
+ | * microSD Karteninhalt existiert bereits als .img Datei und heißt exemplarisch <code>microSD.img</code> | ||
+ | * Die .img Datei liegt auf einer externen USB Festplatte bereit. Diese soll hier exemplarisch "BackupHDD" heißen. | ||
+ | * Es steht ein PI zur Verfügung mit einer extra microSD Karte und Raspbian oder RaspiOS. | ||
+ | * Dieses OS wird im Desktop-Modus betrieben (lxsession und lightdm sind installiert) und hat die Pakete dcfldd und gparted installiert. | ||
+ | * Basis-Linux Kenntnisse, da diese Anleitung nur als Gedankenstütze für nicht Selbstverständliches dienen soll. | ||
+ | |||
+ | Es ist Zeit, den PI mit Raspbian oder RaspiOS hochzufahren und sich anzumelden. Dann wird ein Terminal-Fenster geöffnet. | ||
+ | |||
+ | === Startposition der 2. Partition ermitteln === | ||
+ | Ich gehe davon aus, die externe Festplatte wurde in <code>/media/pi/BackupHDD</code> gemounted. (Hilfe: [[Linux#USB_HDD]]) | ||
+ | <pre>sudo fdisk -l /media/pi/BackupHDD/microSD.img</pre> | ||
+ | |||
+ | '''Die Sektorangabe für microSD.img2 unter "Start" ist zu notieren! Sie sei exemplarisch 524288''' | ||
+ | |||
+ | === Mounten der 2. Partition des Images === | ||
+ | Für die Zahl 524880 ist hier die tatsächlich notierte zu verwenden: | ||
+ | <pre>sudo losetup /dev/loop0 /media/pi/BackupHDD/microSD.img -o $((524288*512))</pre> | ||
+ | |||
+ | === GParted === | ||
+ | <pre>sudo gparted /dev/loop0</pre> | ||
+ | In GParted wird jetzt die große Partition verkleinert auf eine Größe von 500MB mehr als das vorgeschlagene Minimum. Wenn die Operation fehlschlagen sollte, wählt man eine Größe +500MB, bis es funktioniert. | ||
+ | |||
+ | Nach Fertigstellung, klappt man die Details auf bis man den Befehl <code>resize2fs</code> findet. '''Am Ende dieses Befehls steht eine Zahl, welche zu notieren ist! Sie sei exemplarisch 4963328K.''' | ||
+ | |||
+ | Die Partition kann jetzt wieder freigegeben werden: | ||
+ | <pre>sudo losetup -d /dev/loop0</pre> | ||
+ | === Größenanpassungen im Image mit fdisk === | ||
+ | Es wird jetzt das ganze Image gemounted: | ||
+ | <pre>sudo losetup /dev/loop0 /media/pi/BackupHDD/microSD.img</pre> | ||
+ | Jetzt werden per fdisk die Metadaten der 2. Partition neu erstellt: | ||
+ | <pre> | ||
+ | sudo fdisk /dev/loop0 | ||
+ | d | ||
+ | 2 | ||
+ | n | ||
+ | p | ||
+ | 2 | ||
+ | 524288 (der tatsächlich notierte Wert) | ||
+ | +4963328K (der tatsächlich notierte Wert) | ||
+ | w | ||
+ | </pre> | ||
+ | Die Frage, ob die Signatur entfernt werden soll mit N beantworten. | ||
+ | |||
+ | Zur Kontrolle: | ||
+ | <pre>sudo fdisk -l /dev/loop0</pre> | ||
+ | '''/dev/loop0p2 wird in der "End" Spalte einen Wert haben, der zu notieren ist! Er sei exemplarisch 9926656''' | ||
+ | |||
+ | Das Image kann unmounted werden: | ||
+ | <pre>sudo losetup -d /dev/loop0</pre> | ||
+ | |||
+ | === Das Image verkleinern === | ||
+ | Jetzt kann mit diesem Befehl die .img Datei verkleinert (abgeschnitten) werden. Für die Zahl 9926656 ist der tatsächlich notierte Wert zu verwenden: | ||
+ | <pre>sudo truncate -s $(((9926656+1)*512)) /media/pi/BackupHDD/microSD.img</pre> | ||
+ | |||
+ | Fertig. | ||
+ | |||
+ | Quelle: https://www.instructables.com/How-to-BackUp-and-Shrink-Your-Raspberry-Pi-Image/ | ||
+ | |||
+ | === Die kleine Partition auf einer neuen SD Karte wieder expandieren === | ||
+ | |||
+ | Der umgekehrte Weg funktioniert ähnlich, aber etwas einfacher. Wenn das verkleinerte Image auf eine neue SD Karte geflashed wurde, wird diese Karte per Kartenleser wieder an den Raspberry mit Desktop angeschlossen. | ||
+ | |||
+ | Sie sei verfügbar unter '''/dev/sda'''. Ihre 2 Partitionen sind dann '''/dev/sda1''' und '''/dev/sda2'''. | ||
+ | |||
+ | In einem Terminal schaut man sich die Partitionierungsdaten einmal an: | ||
+ | <pre>sudo fdisk -l /dev/sda</pre> | ||
+ | Hier ist der Start der 2. Partition (/dev/sda2) zu notieren. Er sei exemplarisch 524288. | ||
+ | |||
+ | Jetzt verändert man nun wie folgt die 2. Partition: | ||
+ | <pre> | ||
+ | sudo fdisk /dev/sda2 | ||
+ | d | ||
+ | 2 | ||
+ | n | ||
+ | p | ||
+ | 2 | ||
+ | 524288 (der tatsächlich notierte Wert) | ||
+ | [leer lassen, nur ENTER drücken] (es wird automatisch der größt mögliche Wert angenommen | ||
+ | w | ||
+ | </pre> | ||
+ | |||
+ | Wieder brauchen wir gparted: | ||
+ | <pre>sudo gparted /dev/sda2</pre> | ||
+ | Hier wählt man für die angezeigte Partition "Überprüfen", woraufhin man in den Details die Meldung sehen kann, dass das Dateisystem bis zum Auffüllen der Partition vergrößert wurde. | ||
+ | |||
+ | Fertig! | ||
+ | |||
+ | == Bluetooth Eingabegerät verbinden == | ||
+ | Wenn der PI ohne Desktop läuft oder dieser kein Menü, keine App anbietet, um Bluetoothgeräte zu verbinden, kann man das auch über die Shell machen, sogar per SSH: | ||
+ | |||
+ | <pre>sudo bluetoothctl</pre> | ||
+ | |||
+ | Ich erhielt hier eine Ausgabe wie: | ||
+ | <pre> | ||
+ | Agent registered | ||
+ | [bluetooth]# | ||
+ | </pre> | ||
+ | |||
+ | Man schaltet das Gerät, das man pairen möchte in den pairing mode und gibt im PI ein: | ||
+ | |||
+ | <pre>scan on</pre> | ||
+ | |||
+ | Man erhält eine Liste von gefundenen Geräten mit vorangestellter MAC-Adresse, gefolgt vom Namen. Die MAC-Adresse des gewünschten Gerätes wird kopiert (z.B. E4:5F:01:A8:4C:52) und für diese Befehle verwendet: | ||
+ | |||
+ | <pre>trust E4:5F:01:A8:4C:52</pre> | ||
+ | <pre>connect E4:5F:01:A8:4C:52</pre> | ||
+ | |||
+ | Ggf. verlangen PI oder das Gerät noch die Eingabe einer Ziffernfolge (im Falle einer Tastatur) und danach ist das Gerät verbunden und einsatzbereit. | ||
+ | |||
+ | Quelle: http://wiki.sunfounder.cc/index.php?title=Connecting_Raspberry_Pi_with_the_Bluetooth_keyboard | ||
+ | |||
+ | == Raspberry PI 5 mit Debian 12 bookworm == | ||
+ | === WiFi === | ||
+ | In dieser OS Version lässt sich das Wifi nicht mehr über die wpa_supplicant.conf einrichten. Hier muss der NetworkManager verwendet werden. Dessen config findet man hier | ||
+ | /etc/NetworkManager/system-connections | ||
+ | |||
+ | Alternativ kann man mit dem "Raspberry PI Imager" eine firstrun.sh erstellen, die u.A. das Wifi beim ersten Start automatisch konfiguriert. | ||
+ | |||
+ | === NVMe als Boot-Device === | ||
+ | Bevor man von einer NVMe booten kann, muss der Raspi etwas konfiguriert werden. | ||
+ | |||
+ | Der PCIe Port des Raspi ist standardmäßig deaktiviert und muss über die Datei /boot/firmware/config.txt eingeschaltet werden, die beim Booten ausgeführt wird. Der entsprechende Eintrag lautet: | ||
+ | dtparam=pciex1 | ||
+ | Nach einem Neustart kann man per | ||
+ | sudo lspci | ||
+ | überprüfen, ob ein ''Non-Volatile Memory Controller'' oder so ähnlich aufgelistet wird. Ist das der Fall, wird die Hardware der NVMe grundsätzlich erst mal erkannt. | ||
+ | |||
+ | Damit der Raspi jetzt auch von der NVMe bootet, wählt man diese Option per | ||
+ | sudo raspi-config | ||
+ | aus: 6 Advanced Options -> Boot Order -> B2 (NVMe first, then USB and SD) | ||
+ | |||
+ | === Minecraft-Server === | ||
+ | Der Raspberry PI 5 ist in der Lage, einen Java-Minecraft Server zu hosten, am besten nimmt man aus performance-Gründen aber die 8GB Variante und einen M.2 HAT mit einer NVMe drauf, anstatt einer microSD Karte. | ||
+ | |||
+ | Am einfachsten bedient man sich eines schon fertig präparierten Docker-Images. Der Download und der erste Start gehen so: | ||
+ | |||
+ | curl -fsSL https://get.docker.com -o get-docker.sh | ||
+ | sudo sh get-docker.sh | ||
+ | sudo usermod -aG docker <username> | ||
+ | docker run -d \ | ||
+ | --name minecraft-server \ | ||
+ | --restart unless-stopped \ | ||
+ | -p 25565:25565 \ | ||
+ | -e PUID=1000 \ | ||
+ | -e PGID=1000 \ | ||
+ | -e TZ=Europe/Berlin \ | ||
+ | -e EULA=TRUE \ | ||
+ | -e VERSION=1.21.3 \ | ||
+ | -e MEMORY=6G \ | ||
+ | -e SERVER_NAME=MinecraftPI \ | ||
+ | -e MAX_PLAYERS=6 \ | ||
+ | -e SNOOPER_ENABLED=FALSE | ||
+ | -v ~/mcdata:/data \ | ||
+ | itzg/minecraft-server:stable | ||
+ | |||
+ | Um den Container beim Start zu starten, kann man z.B. einen Minecraft-Service anlegen, in dem man diese Datei erstellt: | ||
+ | /etc/systemd/system/minecraft.service | ||
+ | mit dem Inhalt: | ||
+ | [Unit] | ||
+ | Description=Start Minecraft Docker container | ||
+ | After=network.target default.target | ||
+ | Wants=network-online.target | ||
+ | |||
+ | [Service] | ||
+ | ExecStart=docker start minecraft-server | ||
+ | ExecStop=docker stop minecraft-server | ||
+ | StandardOutput=inherit | ||
+ | StandardError=inherit | ||
+ | Restart=no | ||
+ | RemainAfterExit=yes | ||
+ | User=<user> | ||
+ | Type=idle | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | |||
+ | Jetzt muss der service einmal enabled werden: | ||
+ | sudo systemctl enable minecraft | ||
+ | |||
+ | === Sensor-Daten === | ||
+ | ;CPU-Temperatur:cat /sys/class/thermal/thermal_zone0/temp | ||
+ | ;CPU-Lüfter Status:cat /sys/class/thermal/cooling_device0/cur_state | ||
+ | ;CPU-Lüfter PWM-Wert:cat /sys/devices/platform/cooling_fan/hwmon/hwmon2/pwm1 | ||
+ | |||
+ | === Lüfter Steuerung === | ||
+ | In der '''/boot/firmware/config.txt''' setzt man diese Zeile hier: | ||
+ | dtoverlay=rpi-pwm-fan,temphyst=2500,temp_levels=50000,55000,60000,fan_speeds=64,100,180 | ||
+ | Bei 50°C würde der Lüfter mit 64/255 (25%) angesteuert. | ||
+ | |||
+ | Bei 55°C würde der Lüfter mit 100/255 (40%) angesteuert. | ||
+ | |||
+ | Bei 60°C würde der Lüfter mit 180/255 (70%) angesteuert. | ||
+ | |||
+ | (Unsicher, da von ChatGPT) | ||
+ | |||
+ | Andere Möglichkeit: | ||
+ | # 25% | ||
+ | dtparam=fan_temp0=50000 | ||
+ | dtparam=fan_temp0_hyst=2500 | ||
+ | dtparam=fan_temp0_speed=64 | ||
+ | |||
+ | # 40% | ||
+ | dtparam=fan_temp1=55000 | ||
+ | dtparam=fan_temp1_hyst=2500 | ||
+ | dtparam=fan_temp1_speed=100 | ||
+ | ... | ||
+ | |||
+ | == Touch-Display per DSI Kabel == | ||
+ | Das offizielle 7" touch-display für den Raspberry PI wird über den dafür vorgesehenen Port per Flachbandkabel angeschlossen und braucht dann nur noch 5V (über den GPIO header) um zu funktionieren. | ||
+ | |||
+ | === Drehen === | ||
+ | Wenn man den Bildschirminhalt beim Booten und für die Console drehen möchte, erreicht man das über diese beiden Konfigurationen: | ||
+ | |||
+ | /boot/firmware/config.txt | ||
+ | lcd_rotate=2 | ||
+ | wobei 0 = 0° | 1 = 90° | 2 = 180° | 3 = 270° bedeuten | ||
+ | |||
+ | /boot/firmware/cmdline.txt (and Ende der Zeile einfügen, mit Leerzeichen abgetrennt) | ||
+ | video=DSI-1:800x480@60,rotate=180 | ||
+ | |||
+ | Wird die Touch-Funktion des Displays genutzt (z.B. in einer GUI), muss diese dann auch gedreht werden. In dem Fall muss man Folgendes in der /boot/firmware/config.txt verändern: | ||
+ | #display_auto_detect=1 | ||
+ | dtoverlay=vc4-kms-dsi-7inch,invx,invy | ||
+ | |||
+ | === Helligkeit === | ||
+ | Um die Helligkeit beim Booten zu setzen, fügt man diese Zeile in der /boot/firmware/config.txt ein: | ||
+ | lcd_brightness=0..255 | ||
+ | ''0..255'' steht für einen Wert von 0 bis 255. |
Aktuelle Version vom 14. März 2025, 04:49 Uhr
Inhaltsverzeichnis
Vorbereitung von Raspbian
Das gilt für viele Images, die auf Raspbian basieren.
Nach dem Schreiben des Images auf die microSD Karte kann in der boot Partition
- eine Datei "ssh" erstellt werden, um den SSH Zugang gleich zu Beginn zu aktivieren.
- eine Datei "wpa_supplicant.conf" erstellt werden, damit sich der Raspi gleich zu Beginn mit dem darin eingetragenen WLAN verbindet. Der Inhalt ist in etwa so:
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network=
{
ssid="name"
scan_ssid=1
psk="passwort"
key_mgmt=WPA-PSK
}
scan_ssid=1 ist entscheidend, wenn der Accesspoint die SSID versteckt. - LAN IP herausfinden. Wenn der Raspberry per LAN, aber nicht an einem DHCP Server betrieben wird, wird er sich eine IP aus dem Bereich
169.254.x.x
geben. Man muss dem angeschlossenen Computer dann eine IP geben wie:169.254.1.1/16
. Dann wird der Nameraspberrypi
zu dem Raspi führen, um die erste Konfiguration durchführen zu können.
Nach dem Login per SSH mit dem Standardzugang "pi:raspberry" sollte wie immer
sudo raspi-config
ausgeführt werden, um die Basiskonfiguration des Raspi vorzunehmen und das Standardkennwort zu ändern.
RaspiOS Standardbenutzer
In der neuen Version des Raspberry Betriebssystems gibt es keinen Standardbenutzer "pi" mehr. Zusätzlich zu den Methoden "Raspberry Pi Imager" beim Bootvorgang mit anschlossener Peripherie gibt es auch die Möglichkeit, eine Datei "userconf" in der boot Partition anzulegen mit folgendem Inhalt:
username:passwordhash
passwordhash stellt das verschlüsselte Passwort dar, das so generiert werden kann:
echo 'passwort' | openssl passwd -6 -stdin
"passwort" ist hierbei natürlich frei zu wählen.
Verschiedene Tricks
Statische / Dynamische IP Adresse
In /etc/dhcpcd.conf werden die Interfaces konfiguriert, die statische Adressen haben sollen.
Interfaces ohne Konfiguration sind automatisch DHCP konfiguriert.
IP Adressen erneuern
Das Kommando
sudo dhclient -v
erneuert die IP Adressen der entsprechend konfigurierten Interfaces.
Wifi abschalten
In /boot/config.txt:
dtoverlay=disable-wifi
Hardwaremeldungen abfragen
Mit
dmesg
fragt man das log ab, in dem auch eine "Undervoltage" aufgeführt würde, wenn sie vorkommt.
Mit
vcgencmd
lassen sich verschiedene Statús des VideoCores abfragen, darunter auch get_throttled, was bei dem zurückgelieferten Wert 0x50000 für einen vergangenen und bei 0x50005 für einen akuten Spannungsabfall steht.
Wert in realtime beobachten
Mit
watch -n 1 ...
kann z.B. der Wert für vcgencmd get_throttled in Echtzeit (1s Update) angesehen werden, anstatt vcgencmd immer wieder aufzurufen.
Spannungswarnung deaktivieren
Wenn auf der Console ständig eine Meldung erscheint wie
hwmon hwmon1: Undervoltage detected!
und es einfach beim Schreiben nervt, lässt sich das abschalten mit dem Befehl:
sudo dmesg -n 1
armhf auf arm64
Notiz:
dpkg --add-architecture armhf
Firmware update
Um den Bootloader zu flashen führt man im RaspiOS das hier aus:
sudo rpi-eeprom-update -a
Benchmarks
Einige Benchmark Kommandos:
sysbench --test=cpu --cpu-max-prime=10000 --num-threads=4 run
sysbench --test=fileio --file-total-size=512M prepare
sysbench --test=fileio --file-total-size=512M --file-test-mode=seqrd --init-rng=on --max-time=60 run
sysbench --test=fileio --file-total-size=512M --file-test-mode=seqwr --init-rng=on --max-time=60 run
sysbench --test=fileio --file-total-size=512M --file-test-mode=rndrw --init-rng=on --max-time=60 run
sysbench --test=fileio --file-total-size=512M cleanup
sysbench --test=memory --memory-total-size=3G --memory-access-mode=rnd run
Raspberry PI mit GUI
Auch wenn man ein lite image (ohne Desktop) installiert hat, kann man ein GUI (Desktop) nachinstallieren, z.B. "lightdm".
Um den Desktop zu starten und sich erfolgreich anmelden zu können, müssen 2 Pakete nachinstalliert werden:
apt install lightdm
und
apt install lxsession
Danach kann über
sudo lightdm
der Desktop gestartet werden oder per raspi-config das System so eingestellt werden, dass es immer in den Desktop bootet.
Nützliche tools
Was beim Benutzen des Desktops helfen kann, sind diese tools, die sich per apt install installieren lassen
- file-roller (Archivverwaltung)
- gdebi (Debian packet installer)
- gedit (Texteditor)
- wvkbd (Bildschirmtastatur)
- eog (Bildbetrachter)
Bildschirmtastatur im Alltag
Eine Tastatur, die sich automatisch ein- und ausblendet ist nicht so einfach zu realisieren. Was ganz gut funktioniert ist diese Lösung mit der wvkbd Tastatur, die leider keine gute Integration in eine Desktop Umgebung mit sich bringt.
~/toggle-keyboard.sh
#!/bin/bash PID="$(pidof wvkbd-mobintl)" if [ "$PID" != "" ]; then kill $PID else wvkbd-mobintl & fi
/usr/share/raspi-ui-overrides/applications/toggle-keyboard.desktop
[Desktop Entry] Name=Toggle Virtual Keyboard Comment=Toggle Virtual Keyboard Exec=/home/pi/toggle-keyboard.sh Type=Application Icon=/usr/share/icons/PiXflat/24x24/devices/keyboard.png Categories=Panel;Utility;MB X-MB-INPUT-MECHANISM=True
~/.config/wf-panel-pi.ini
... launcher_00000x=toggle-keyboard.desktop ...
Das erzeugt ein Tastatur-Icon im launcher der Taskleiste.
microSD Karten Image verkleinern
Den Speicher (microSD Karte) des PI zu sichern ist denkbar einfach. Z.B. mit Win32DiskImager kann man den Karteninhalt als .img Datei sichern und zum Beschreiben einer neuen microSD Karte verwenden. 2 Probleme gibt es dabei:
- Das Image hat immer die volle Größe der microSD Karte. Das ist aus Platzgründen schon nicht sehr schön.
- Die zu beschreibende microSD Karte darf nicht auch geringfügig kleiner sein als das Image, weil sonst das Schreiben gar nicht erst gestartet wird.
Es gibt eine Möglichkeit, das Image zu verkleinern und zwar auf die minimal nötige Größe:
Voraussetzungen für diese Anleitung:
- microSD Karteninhalt existiert bereits als .img Datei und heißt exemplarisch
microSD.img
- Die .img Datei liegt auf einer externen USB Festplatte bereit. Diese soll hier exemplarisch "BackupHDD" heißen.
- Es steht ein PI zur Verfügung mit einer extra microSD Karte und Raspbian oder RaspiOS.
- Dieses OS wird im Desktop-Modus betrieben (lxsession und lightdm sind installiert) und hat die Pakete dcfldd und gparted installiert.
- Basis-Linux Kenntnisse, da diese Anleitung nur als Gedankenstütze für nicht Selbstverständliches dienen soll.
Es ist Zeit, den PI mit Raspbian oder RaspiOS hochzufahren und sich anzumelden. Dann wird ein Terminal-Fenster geöffnet.
Startposition der 2. Partition ermitteln
Ich gehe davon aus, die externe Festplatte wurde in /media/pi/BackupHDD
gemounted. (Hilfe: Linux#USB_HDD)
sudo fdisk -l /media/pi/BackupHDD/microSD.img
Die Sektorangabe für microSD.img2 unter "Start" ist zu notieren! Sie sei exemplarisch 524288
Mounten der 2. Partition des Images
Für die Zahl 524880 ist hier die tatsächlich notierte zu verwenden:
sudo losetup /dev/loop0 /media/pi/BackupHDD/microSD.img -o $((524288*512))
GParted
sudo gparted /dev/loop0
In GParted wird jetzt die große Partition verkleinert auf eine Größe von 500MB mehr als das vorgeschlagene Minimum. Wenn die Operation fehlschlagen sollte, wählt man eine Größe +500MB, bis es funktioniert.
Nach Fertigstellung, klappt man die Details auf bis man den Befehl resize2fs
findet. Am Ende dieses Befehls steht eine Zahl, welche zu notieren ist! Sie sei exemplarisch 4963328K.
Die Partition kann jetzt wieder freigegeben werden:
sudo losetup -d /dev/loop0
Größenanpassungen im Image mit fdisk
Es wird jetzt das ganze Image gemounted:
sudo losetup /dev/loop0 /media/pi/BackupHDD/microSD.img
Jetzt werden per fdisk die Metadaten der 2. Partition neu erstellt:
sudo fdisk /dev/loop0 d 2 n p 2 524288 (der tatsächlich notierte Wert) +4963328K (der tatsächlich notierte Wert) w
Die Frage, ob die Signatur entfernt werden soll mit N beantworten.
Zur Kontrolle:
sudo fdisk -l /dev/loop0
/dev/loop0p2 wird in der "End" Spalte einen Wert haben, der zu notieren ist! Er sei exemplarisch 9926656
Das Image kann unmounted werden:
sudo losetup -d /dev/loop0
Das Image verkleinern
Jetzt kann mit diesem Befehl die .img Datei verkleinert (abgeschnitten) werden. Für die Zahl 9926656 ist der tatsächlich notierte Wert zu verwenden:
sudo truncate -s $(((9926656+1)*512)) /media/pi/BackupHDD/microSD.img
Fertig.
Quelle: https://www.instructables.com/How-to-BackUp-and-Shrink-Your-Raspberry-Pi-Image/
Die kleine Partition auf einer neuen SD Karte wieder expandieren
Der umgekehrte Weg funktioniert ähnlich, aber etwas einfacher. Wenn das verkleinerte Image auf eine neue SD Karte geflashed wurde, wird diese Karte per Kartenleser wieder an den Raspberry mit Desktop angeschlossen.
Sie sei verfügbar unter /dev/sda. Ihre 2 Partitionen sind dann /dev/sda1 und /dev/sda2.
In einem Terminal schaut man sich die Partitionierungsdaten einmal an:
sudo fdisk -l /dev/sda
Hier ist der Start der 2. Partition (/dev/sda2) zu notieren. Er sei exemplarisch 524288.
Jetzt verändert man nun wie folgt die 2. Partition:
sudo fdisk /dev/sda2 d 2 n p 2 524288 (der tatsächlich notierte Wert) [leer lassen, nur ENTER drücken] (es wird automatisch der größt mögliche Wert angenommen w
Wieder brauchen wir gparted:
sudo gparted /dev/sda2
Hier wählt man für die angezeigte Partition "Überprüfen", woraufhin man in den Details die Meldung sehen kann, dass das Dateisystem bis zum Auffüllen der Partition vergrößert wurde.
Fertig!
Bluetooth Eingabegerät verbinden
Wenn der PI ohne Desktop läuft oder dieser kein Menü, keine App anbietet, um Bluetoothgeräte zu verbinden, kann man das auch über die Shell machen, sogar per SSH:
sudo bluetoothctl
Ich erhielt hier eine Ausgabe wie:
Agent registered [bluetooth]#
Man schaltet das Gerät, das man pairen möchte in den pairing mode und gibt im PI ein:
scan on
Man erhält eine Liste von gefundenen Geräten mit vorangestellter MAC-Adresse, gefolgt vom Namen. Die MAC-Adresse des gewünschten Gerätes wird kopiert (z.B. E4:5F:01:A8:4C:52) und für diese Befehle verwendet:
trust E4:5F:01:A8:4C:52
connect E4:5F:01:A8:4C:52
Ggf. verlangen PI oder das Gerät noch die Eingabe einer Ziffernfolge (im Falle einer Tastatur) und danach ist das Gerät verbunden und einsatzbereit.
Quelle: http://wiki.sunfounder.cc/index.php?title=Connecting_Raspberry_Pi_with_the_Bluetooth_keyboard
Raspberry PI 5 mit Debian 12 bookworm
WiFi
In dieser OS Version lässt sich das Wifi nicht mehr über die wpa_supplicant.conf einrichten. Hier muss der NetworkManager verwendet werden. Dessen config findet man hier
/etc/NetworkManager/system-connections
Alternativ kann man mit dem "Raspberry PI Imager" eine firstrun.sh erstellen, die u.A. das Wifi beim ersten Start automatisch konfiguriert.
NVMe als Boot-Device
Bevor man von einer NVMe booten kann, muss der Raspi etwas konfiguriert werden.
Der PCIe Port des Raspi ist standardmäßig deaktiviert und muss über die Datei /boot/firmware/config.txt eingeschaltet werden, die beim Booten ausgeführt wird. Der entsprechende Eintrag lautet:
dtparam=pciex1
Nach einem Neustart kann man per
sudo lspci
überprüfen, ob ein Non-Volatile Memory Controller oder so ähnlich aufgelistet wird. Ist das der Fall, wird die Hardware der NVMe grundsätzlich erst mal erkannt.
Damit der Raspi jetzt auch von der NVMe bootet, wählt man diese Option per
sudo raspi-config
aus: 6 Advanced Options -> Boot Order -> B2 (NVMe first, then USB and SD)
Minecraft-Server
Der Raspberry PI 5 ist in der Lage, einen Java-Minecraft Server zu hosten, am besten nimmt man aus performance-Gründen aber die 8GB Variante und einen M.2 HAT mit einer NVMe drauf, anstatt einer microSD Karte.
Am einfachsten bedient man sich eines schon fertig präparierten Docker-Images. Der Download und der erste Start gehen so:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker <username> docker run -d \ --name minecraft-server \ --restart unless-stopped \ -p 25565:25565 \ -e PUID=1000 \ -e PGID=1000 \ -e TZ=Europe/Berlin \ -e EULA=TRUE \ -e VERSION=1.21.3 \ -e MEMORY=6G \ -e SERVER_NAME=MinecraftPI \ -e MAX_PLAYERS=6 \ -e SNOOPER_ENABLED=FALSE -v ~/mcdata:/data \ itzg/minecraft-server:stable
Um den Container beim Start zu starten, kann man z.B. einen Minecraft-Service anlegen, in dem man diese Datei erstellt:
/etc/systemd/system/minecraft.service
mit dem Inhalt:
[Unit] Description=Start Minecraft Docker container After=network.target default.target Wants=network-online.target [Service] ExecStart=docker start minecraft-server ExecStop=docker stop minecraft-server StandardOutput=inherit StandardError=inherit Restart=no RemainAfterExit=yes User=<user> Type=idle [Install] WantedBy=multi-user.target
Jetzt muss der service einmal enabled werden:
sudo systemctl enable minecraft
Sensor-Daten
- CPU-Temperatur
- cat /sys/class/thermal/thermal_zone0/temp
- CPU-Lüfter Status
- cat /sys/class/thermal/cooling_device0/cur_state
- CPU-Lüfter PWM-Wert
- cat /sys/devices/platform/cooling_fan/hwmon/hwmon2/pwm1
Lüfter Steuerung
In der /boot/firmware/config.txt setzt man diese Zeile hier:
dtoverlay=rpi-pwm-fan,temphyst=2500,temp_levels=50000,55000,60000,fan_speeds=64,100,180
Bei 50°C würde der Lüfter mit 64/255 (25%) angesteuert.
Bei 55°C würde der Lüfter mit 100/255 (40%) angesteuert.
Bei 60°C würde der Lüfter mit 180/255 (70%) angesteuert.
(Unsicher, da von ChatGPT)
Andere Möglichkeit:
# 25% dtparam=fan_temp0=50000 dtparam=fan_temp0_hyst=2500 dtparam=fan_temp0_speed=64
# 40% dtparam=fan_temp1=55000 dtparam=fan_temp1_hyst=2500 dtparam=fan_temp1_speed=100 ...
Touch-Display per DSI Kabel
Das offizielle 7" touch-display für den Raspberry PI wird über den dafür vorgesehenen Port per Flachbandkabel angeschlossen und braucht dann nur noch 5V (über den GPIO header) um zu funktionieren.
Drehen
Wenn man den Bildschirminhalt beim Booten und für die Console drehen möchte, erreicht man das über diese beiden Konfigurationen:
/boot/firmware/config.txt
lcd_rotate=2
wobei 0 = 0° | 1 = 90° | 2 = 180° | 3 = 270° bedeuten
/boot/firmware/cmdline.txt (and Ende der Zeile einfügen, mit Leerzeichen abgetrennt)
video=DSI-1:800x480@60,rotate=180
Wird die Touch-Funktion des Displays genutzt (z.B. in einer GUI), muss diese dann auch gedreht werden. In dem Fall muss man Folgendes in der /boot/firmware/config.txt verändern:
#display_auto_detect=1 dtoverlay=vc4-kms-dsi-7inch,invx,invy
Helligkeit
Um die Helligkeit beim Booten zu setzen, fügt man diese Zeile in der /boot/firmware/config.txt ein:
lcd_brightness=0..255
0..255 steht für einen Wert von 0 bis 255.