Raspberry Pi – Autorun mit Systemd

Service File für ein python script “temperature-logger.py”:

[Unit]
Description=My Temperature Logger to thingspeak.com
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/python_thingspeak/temperature-logger.py

[Install]
WantedBy=multi-user.target

Ziel Ordner für die Service Datei für den systemd:

/lib/systemd/system/temperature-logger.service

Die Permissions sollten auf “644” stehen.

Commands, um zu starten, stoppen und den Status abzufragen:

sudo systemctl start temperature-logger.service
sudo systemctl status temperature-logger.service
sudo systemctl stop temperature-logger.service
sudo systemctl enable temperature-logger.service

Basis Informationen habe ich aus folgenden Artikeln bezogen:

 

Raspberry Pi – VNC Konfiguration – v2

Nachdem nun die Jessie Version bei Raspian aktuell ist, war es einmal an der Zeit den alten Artikel durch einen neuen, aktuellen zu ersetzen.

Auf dem Pi

Das Paket TightVNC mit dem Packetmanager installieren (xfonts werden mit installiert):

sudo apt-get install tightvncserver

TightVNC konfigurieren

vncserver
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

New 'X' desktop is raspi-test2:1

Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspi-test2:1.log

Passwort vergeben. Bei read only N eingeben.

Nun kann schon einmal per RealVNC vom Windows Rechner aus zugegriffen werden:

  • 192.168.65.xx:1 mit IP Adresse und dem gewähltem Passwort
  • raspi-test2:1 mit Rechner Name und dem gewähltem Passwort

Unter Windows am PC

Hier benutze ich RealVNC.

Eine Installation ist nicht nötig. Mit der folgenden Anleitung habe ich das Programm an mein Windows 10 Startmenü geheftet:

Copy / Paste zwischen Windows und Raspi

Von Haus kann man nicht Text zwischen dem Raspi und Windows hin und her kopieren. Dazu muss man autocutsel installieren:

sudo apt-get install autocutsel

Im Anschluss noch die Konfigurationsdatei des vnc servers (~/.vnc/xstartup) mit dem autocutsel Kommando erweitern:

#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
autocutsel -fork
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

Danach den vncserver neu starten:

vncserver -kill :1 (pick your display number)
vncserver :1

Tuning. Display :0 disable

Wenn man den Raspi ausschliesslich per remote VNC Viewer bedienen möchte, kann man den Display Manager des Hauptdisplay :0 entfernen:

service lightdm stop

Tuning. Mauspointer

Statt des großen Kreuzes in der remote VNC, lässt sich auch ein normaler Mauszeiger konfigurieren. Dazu ergänzt man in der vnc Konfigurationsdatei ~/.vnc/xstartup

xsetroot -solid grey -cursor_name left_ptr

Tuning. Secure VNC mit putty Tunnel

Von Haus aus ist das VNC Protokol nicht sicher und überträgt alles im Klartext. Dies lässt sich dadurch vermeiden, indem man per putty einen SSH Tunnel zu Raspi aufbaut und erst darüber den VNC viewer startet. Dies ist in einer englischen Anleitung beschrieben.

Automatischer Start des VNCSERVER mit systemd

Seit Jessie wird zum automatischen Start der systemd eingesetzt. Um den vncserver automatisch beim Booten zu starten, müssen wir eine .service Datei für den systemd erstellen. Diese muss an folgender Stelle angelegt werden (unter dem Directory system kann man eigene service Dateien anlegen):

sudo nano /etc/systemd/system/vncserver.service

Ein passender Inhalt kann wie folgt aussehen:

# neue Datei /etc/systemd/system/vncserver.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
User=pi
PAMName=login
PIDFile=/home/pi/.vnc/%H:1.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :1 > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver -geometry 1300x800 -depth 16 :1
ExecStop=/usr/bin/vncserver -kill :1

[Install]
WantedBy=multi-user.target

Das File noch präparieren. Owner root und executable:

sudo chown root:root /etc/systemd/system/vncserver.service
sudo chmod 755 /etc/systemd/system/vncserver.service

Enable den Start beim Booten:

sudo systemctl enable vncserver

Um den VNC Server manuell zu starten:

sudo systemctl daemon-reload && systemctl start vncserver

Um den Status des VNC Server abzufragen:

sudo systemctl status vncserver

Um den VNC Server zu stoppen:

sudo systemctl stop vncserver

Quellen

 

Raspberry Pi – Quickstart – v2

Eine schnelle Zusammenfassung, wie ich zu einer GRUNDINSTALLATION komme.

  1. SD Karte formatieren
  2. RASPIAN JESSIE image auf SD Karte kopieren
  3. Rasperry Pi mit der SD Karte starten

Einen guten Quick-Guide habe ich bei kofler.info gefunden.

SD Karte formatieren:

SD-Formatter auf dem PC installieren.
Download über https://www.sdcard.org/downloads/formatter_4/

Dann die SD-Karte mit den unteren Einstellungen formatieren.

SD-DiskFormater

Image auf SD Karte kopieren:

das RASPIAN JESSIE image von https://www.raspberrypi.org/downloads/raspbian/ herunterladen und das ZIP File entpacken.

Die Image Datei (*.img) mit Hilfe des Win32DiskImager auf die SD-Karte kopieren.
Download (version 0.9.5) über http://sourceforge.net/projects/win32diskimager

Win32DiskImage095

Raspberry Pi mit SD-Karte starten:

Das neue Jessie startet direkt in den grafischen Desktop. Hier kann auch das neue grafische Konfgurations-Tool aufgerufen werden. Im folgenden die Einstellungen …

Raspi-CFG-1Raspi-CFG-2Raspi-CFG-3Raspi-CFG-4

Und hier noch die Details:

Raspi-CFG-4aRaspi-CFG-4b

 

Gameboy mit RetroPie

Hier nur einmal schnell ein paar Links von Leuten die den Raspi in einen Gameboy eingebaut haben. Das machen wir auch gerade:

 

RetroPie – Welche Tasten?

Nach wirklich einfachen Installation des RetroPie Images kam bei uns erst einmal eine lange Frust Phase. Mit Tastatur konnten wir zwar die Spiele bedienen, aber  über die an den Raspi GPIO angeschlossenen Tasten ging gar nichts.

Adafruit Arcade Controls

Eine gründliche Suche machte uns dann klar, dass dies NUR über den passenden Treiber von Adafruit zu Ihrem Projekt “Adding Arcade Controls” funktioniert.

Folgt man der Anleitung kommt man schnell zu Ziel:

  • Download des ZIP Archives
  • unzip
  • Modifikation der Tasten
  • Einbinden in die Raspi Startup Datei

Damit wir beim Drücken eines Knopfes ein Tastendruck emuliert. Klappt wunderbar.

Frage: Wie lauten die Schlüsselworte

Die erste Frage, die sich uns aber stellte: Wie lauten die ganzen Tastatur Schlüsselworte aus der Datei /usr/include/linux/input.h?

Wir wurden im Internet unter dieser Adresse fündig.

Frage: Welche Tasten benutzt der Emulator

Danach konnten wir zwar unseren Wünschen folgend jede Taste emulieren, aber leider benutzte der RetroPie Emulator für den Gameboy Color ganz andere. Doch welche?

Bei der weiteren Suche stießen wir auf die Blog Seiten des “Weekend Engineer“. In einem Artikel vom 28. August 2014, “Mapping Controllers (3 of): Setting up Controllers in RetroArch” fanden wir die nötigen Informationen.

unter /opt/retropie/configs/*  befinden sich alle Emulator Einstellungen. Im Verzeichnis all befinden sich die Einstellungen die auf alle Emulatoren zutreffen. In der Datei /opt/retropie/configs/all/retroarch.cfg konnten wir die Standardbelegung der Tasten des Emulators herauslesen:

...
input_player1_a = x
input_player1_b = z
input_player1_y = a
input_player1_x = s
input_player1_start = enter
input_player1_select = rshift
input_player1_l = q
input_player1_r = w
input_player1_left = left
input_player1_right = right
input_player1_up = up
input_player1_down = down
...

Diese stellten wir im Treiber von Adafruit so ein und schon geht das ganze wesentlich besser!!!

RetroPie – Installation

Vorbereitung zur Installation eines Raspi 2 zum Einbau in einen Game Boy Classic.

Man kann sich ein vorgefertigtes Image von der RetroPie Projektseite laden:

Die SD-Karte sollte mindestens 4GB haben. (ich habe eine mit 16GB bei Pollin geholt)

Das Vorgehen entspricht dem aus dem beschriebenen Quickstart Artikel

  1. SD Karte Formatieren (mit dem Tool SD-Formater)
    1. volume label: RetroPie
    2. Option: Adjustment ON
  2. Extrahierte img Datei mit Win32DiskImage auf die SD-Karte kopieren.

    Aufspielen des RetroPie Images
    Aufspielen des RetroPie Images
  3. am Raspi muss noch das File-System expandiert werden: Enter the Shell by F4 and do it via “sudo raspi-config”

Auch eine sehr gute Zusammenfassung findet sich auf der WIKI Seite von RetroPie.

Default Passwörter entsprechend der RetroPie website:

  • username “pi” und password “raspberry”
  • username “root” und password “raspberry”

 

Raspberry Pi – WLAN Auto-Reconnect

Lange hat mich dieses Problem beschäftigt. Mein Pi läuft per WLAN ohne Tastatur und ohne Monitor. Im Normalfall möchte ich per ssh oder vnc auf ihn zugreifen. Das ist auch alles kein Problem, solange er neu gestartet ist und mein WLAN Router nicht einmal neu gestartet wird. Passiert dies, dann ist die WLAN Verbindung leider Futsch! Ohne Änderung passiert leider kein Auto-Reconnect. Ich musste mir umständlich erst wieder das LAN einstecken und dann auf dem wlan0 Interface ein ifup durchführen.

Lang habe ich auch keine mir passende Lösung in den Internet Foren und über Google gefunden. Die angebotenen halfen nicht oder schienen mir nicht adäquat. Darunter waren:

  1. Anpassung der wpa_supplicant Datei. Hab ich zwar gemacht (schaut jetzt schöner aus), half aber nicht.
  2. Installation eines Meters, das die Wlan Verbindung bevorzugt. Nett, aber ohne Erfolg.
  3. per Cronjob die wlan0 Verbindung überwachen (per ping) und dann ein ifup durchführen (gar nicht erst probiert, da das schon die “Keule” ist)

Da das Problem immer wieder kam, suchte ich beharrlich weiter, bis ich endlich auf folgenden beiden Seiten fündig wurde. Die Erklärung dazu überzeugte mich und die Umsetzung funktioniert:

Was passiert?

Die Unterbrechung wird vom Raspi erkannt, aber es ist ein Skript hinterlegt “ifupdown”, das nicht automatisch immer wieder einen Reconnect versucht. Durch Ersetzung des Skripts durch ein schon passend vorhandenes löst das Problem!

sudo su
cd /etc/ifplugd/action.d/
mv ifupdown ifupdown.original
ln -s ../../wpa_supplicant/ifupdown.sh ifupdown

Drawback: Bei verlorener WLAN Verbindung geht das LAN leider nicht mehr.

Raspberry Pi – VNC Konfiguration

Auf der PC Seite:

Hier gibt es verschiedene Möglichkeiten:

Auf der iPhone Seite:

Hier gab es einmal eine Promotion für

Auf der Raspberry Pi Seite:

Es gibt verschiedene Anleitungen die das Ganze veranschaulichen. Hier ein paar die ich zur Hilfe genommen habe:

Hier nun in kurzem die Schritte zur Installation:

TightVNC server packet mit autocutsel und ein paar fonts installieren.

sudo apt-get install tightvncserver gsfonts-x11 xfonts-75dpi xfonts-100dpi autocutsel

TightVNC konfigurieren

tightvncserver

Passwort vergeben. Bei read only N eingeben. Ergebnis:

New 'X' desktop is raspberrypi:1
Creating default startup script /home/pi/.vnc/xstartup
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

Nun kann schon einmal per RealVNC vom Windows Rechner aus zugegriffen werden:

  • 192.168.65.xx:1 als rechner name und dem gewähltem Passwort

TightVNC automatisch mit dem Pi starten.

Dazu einen Eintrag in die Datei /etx/rc.local vornehmen:

sudo nano /etc/rc.local

Vor dem exit eintragen:

# TightVNC Server starten
su pi -c "tightvncserver -geometry 1280x1024"

Das Copy/Paste zwischen Windows und Raspberry erlauben.

nano ~/.vnc/xstartup

und ein “autocutsel -fork” eintragen. Die Datei kann dann so aussehen:

#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
autocutsel -fork
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

Nach dem nächsten Reboot funktioniert es…

Raspberry Pi – WLAN config

Kurze Zusammenfassung der Schritte, um den installierten WLAN Adapter mit meinem Router zu verbinden.

ifconfig

Hier sollte der Adapter wlan0 zu sehen sein:

wlan0     Link encap:Ethernet  Hardware Adresse 64:66:b3:1b:ad:fd
 UP BROADCAST MULTICAST  MTU:1500  Metrik:1
 RX packets:2 errors:0 dropped:4 overruns:0 frame:0
 TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
 Kollisionen:0 Sendewarteschlangenlänge:1000
 RX bytes:288 (288.0 B)  TX bytes:155 (155.0 B)

Als nächstes die Datei interface bearbeiten. Dabei ist im Moment noch DHCP eingestellt und die wpa Informationen sind in einer eigenen Datei /etc/wpa_supplicant/wpa_supplicant.conf enthalten, die auch noch erstellt werden muss:

sudo nano /etc/network/interfaces

Sollte dann so aussehen (wpa-conf lässt beide interfaces gleichzeitig zu; wpa-roam schaltet wlan ab sobald eth eingesteckt wurde):

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Jetzt noch die WPA Konfiguration schreiben:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Mit folgendem Inhalt:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="HIER AENDERN"
scan_ssid=1
# Protocol type can be: RSN (for WPA2) and WPA (for WPA1)
proto=WPA
# Key management type can be: WPA-PSK or WPA-EAP (Pre-Shared or Enterprise)
key_mgmt=WPA-PSK
# Pairwise can be CCMP or TKIP (for WPA2 or WPA1)
pairwise=TKIP
group=TKIP
psk="HIER AENDERN"
}

Jetzt noch das WLAN neu starten:

sudo service networking restart

oder

ifdown wlan0
ifup wlan0

Jetzt sollte über ifconfig eine Verbindung da sein.

Rasberry Pi – Commands

Einige grundlegende Befehle, um das Teil UP-TO-DATE zu halten:

sudo apt-get update
sudo apt-get upgrade

sudo apt update
sudo apt install --reinstall raspberrypi-bootloader raspberrypi-kernel
Dieser Befehl nimmt eine möglicherweise instabile Entwicklerversion.
sudo rpi-update (firmware update http://raspberrypiguide.de/howtos/raspberry-pi-firmware-update/)

Note: Nach dem Upgrade der Firmware ist mein installierter WLAN Adapter wieder verschwunden…

Das sind einige wichtige Kommandos um das Teil herunter zu fahren oder neu zu booten

sudo shutdown -h now
sudo reboot

Anzeige der Ethernet Adapter:

ifconfig

Anzeige der IP Adresse:

ip addr

Anzeige der USB Devices:

lsusb

Ethernet interface wieder hochbringen:

sudo ifup wlan0

Wichtige log Dateien

cat /var/log/syslog
cat /var/log/messages

Welche FirmWare läuft:

uname -a

Freies Memory und Speicher:

free -h
df -h
(-h bedeutet human readable output)