Autostart Python-Script auf Raspi LXQT

15.01.2025 - Lesezeit: 2 Minuten

Literatur

Den Autostart Ordner anlegen, falls er nicht existiert. Danach eine Startdatei anlegen.

mkdir ~/.config/autostart
nano .config/autostart/wnfjukebox.desktop

Das Programm im Terminal starten, damit man eventuelle Fehlermeldungen sehen kann.

[Desktop Entry]
Type=Application
Name=wnfJukebox-Anzeige
Exec=xterm -hold -e '/home/bernd/bin/wnfjukenbox'

Das Programm arbeitet als Anzeige für MQTT. Da das Netzwerk beim Autostart noch nicht hochgefahren ist, muss auf das Netzwerk gewartet werden

from time import sleep
import paho.mqtt.client as mqtt

cMQTT_HOST = '192.168.80.107'
cMQTT_TOPIC = '/c2023/wnfPlay'

aMusikAnzeige = None

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe(cMQTT_TOPIC)

def on_message(client, userdata, msg):
    global aMusikAnzeige
    # print(client)
    # print(userdata)
    # aJetzt = datetime.datetime.now().strftime("%H:%M")
    # print(aJetzt + " " + msg.topic + " " + str(msg.payload))
    if aMusikAnzeige:
        aMusikAnzeige.anzeige(msg)

def starteAnzeige(aAnzeige):
    global aMusikAnzeige
    aMusikAnzeige = aAnzeige
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    # auf dem Raspi mit LXQT wird das Programm von Autostart gestartet
    # es kann sein, dass das Netzwerk noch nicht hochgefahren wurde.
    # Deshalb wir hier auf das Netzwerk gewartet.
    aConnected = False
    aAnz = 0
    while not aConnected and (aAnz < 10):
        try:
            client.connect(cMQTT_HOST, 1883, 60)
            aConnected = True
            client.loop_start()
        except Exception as E:
            print(E)
            sleep(5)
            aAnz += 1
Tags: LQXT Raspi Autostart

Python Bottle mit SSL (https)

14.01.2025 - Lesezeit: ~1 Minute

Änderung gegen über der Original-Quelle (Deprecated since version 3.6: OpenSSL has deprecated all version specific protocols.)

PROTOCOL_TLSv1_2 wird zu PROTOCOL_TLS_SERVER

  • test_bottle_https_ssl.py
from bottle import ServerAdapter,run,get

class SecureAdapter(ServerAdapter):
    def run(self, handler):
        from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer
        from socketserver import ThreadingMixIn
        import ssl

        if self.quiet:
            class QuietHandler(WSGIRequestHandler):
                def log_request(*args, **kw):
                    pass

            self.options['handler_class'] = QuietHandler

        #Setup SSL context for 'A+' rating from Qualys SSL Labs.
        context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_SERVER)
        context.load_cert_chain(certfile='server.pem')
        context.set_ciphers('EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH')

        class ThreadAdapter(ThreadingMixIn, WSGIServer): pass
        ssl_server = make_server(self.host, self.port, handler, server_class=ThreadAdapter, **self.options)
        ssl_server.socket = context.wrap_socket(ssl_server.socket, server_side=True)
        ssl_server.serve_forever()

@get("/x")
def get_x():
 return "Hi there"

run(server=SecureAdapter, host="0.0.0.0", port=8090)
Tags:

Raspberry Pi OS Lite mit Music Player Daemon (mpd)

11.01.2025 - Lesezeit: ~1 Minute

Auch unter Raspberry Pi OS Lite läuft der Music Player Daemon (mpd).

zur Beachtung:

  • der speaker-test blockiert die alsa-Schnittstelle, so dass der mpd keine Musik abspielen kann.
Tags: Raspi mpd

Raspi mit Music Player Daemon (mpd)

09.01.2025 - Lesezeit: 2 Minuten

Nachdem auf dem Raspi Zero das Soundsystem funktioniert, kann ich den mpd installieren.

sudo apt install mpd

Der User mpd muss zur Gruppe audio hinzugefügt werden

sudo usermod -aG audio mpd

Anzeige der vorhandenen Soundkarten

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

Die Datei /etc/mpd.conf anpassen:

sudo nano /etc/mpd.conf

Die Zeile kommentieren, damit der Zugriff über das Handy funktioniert:

# bind_to_address                 "localhost"
audio_output {
        type            "alsa"
        name            "Hifi Berry DAC"
        device          "hw:1,0"        # optional
        mixer_type      "software"      # optional
##      mixer_device    "default"       # optional
##      mixer_control   "PCM"           # optional
##      mixer_index     "0"             # optional
}
sudo systemctl enable mpd
sudo service mpd restart
sudo service mpd status
music_directory      "/var/lib/mpd/music"
playlist_directory    "/var/lib/mpd/playlists"

Bei Problemen das journalctl anzeigen:

  • -f Follow (Live-Anzeige)
  • -u Unit mpd

journalctl -f -u mpd

Meine Fehlermeldungen:

Tags: Raspi mpd

Raspi mit Soundkarte hifiberry-dac

08.01.2025 - Lesezeit: 2 Minuten

Raspberry Pi Zero 2 W Rev 1.0 mit Soundkarte hifiberry-dac

Soundkarte hifiberry-dac

Da das Soundsystem unter Linux nicht trivial zu installieren ist, installiere ich ein komplettes Raspbian.

Raspi-imager

Auf dem Raspi die Soundkarte eintragen:

$ sudo nano /boot/firmware/config.txt

dtoverlay=hifiberry-dac

Nicht benötigte Programme deinstallieren

$ sudo apt purge firefox
mkdir bin
nano bin/wls_update
#!/bin/bash
sudo apt update && sudo apt dist-upgrade
sudo apt-get autoremove --purge
sudo apt-get autoclean
sudo chmod +x bin/wls_update

Das Soundsystem aktivieren

sudo raspi-config
6 - Advanced Options
A7 - Audio Config
1 - Pulse Audio

Den Raspi neustarten.

Die Soundausgabe testen:

aplay /usr/share/sounds/alsa/Front_Center.wav
aplay /usr/share/sounds/alsa/Front_Left.wav
aplay /usr/share/sounds/alsa/Front_Right.wav
aplay /usr/share/sounds/alsa/Front_Center.wav

oder mit

speaker-test -t wav -c 2 
Tags: Raspi hifiberry-dac alsa sound

Entschlüsseln einer mit PGP verschlüsselten Datei

30.12.2024 - Lesezeit: 3 Minuten

Eine mit PGP verschlüsselte Datei hat normalerweise die folgenden Komponenten:

  • Passphrase – PGP verwendet eine Passphrase, um Ihren privaten Schlüssel auf Ihrem Computer zu verschlüsseln. Ihr privater Schlüssel wird auf Ihrer Festplatte verschlüsselt, wobei ein Hash Ihrer Passphrase als geheimer Schlüssel verwendet wird. Sie verwenden die Passphrase zum Entschlüsseln und Verwenden Ihres privaten Schlüssels. Eine Passphrase sollte für Sie schwer zu vergessen und für andere schwer zu erraten sein.
  • Öffentlicher Schlüssel – Ein öffentlicher Schlüssel ist ein Schlüssel, den andere Personen zum Verschlüsseln einer Nachricht verwenden, die nur Sie öffnen können.
  • Privater Schlüssel – Ein privater Schlüssel ist der Schlüssel, mit dem Sie die an Sie gesendeten Nachrichten basierend auf Ihrem öffentlichen Schlüssel entschlüsseln können.

Diese Komponenten werden vom Client bereitgestellt und wir müssen sie zum Entschlüsseln der Dateien verwenden.

Jetzt erstelle ich ein Schlüsselpaar für info@wlsoft.de Alle Fragen beantworte ich mit den Default-Werten.

$ gpg --full-generate-key

Anzeigen des erzeugten Schlüssels:

$ gpg --list-secret-keys --keyid-format=long
sec   rsa3072/7DF93BFA6A2E11DA 2024-12-31 [SC]
      863B3A7B59C550547E4AD75C7DF93BFA6A2E11DA
uid                 [ultimate] Information <info@wlsoft.de>
ssb   rsa3072/1AE18982CFBE2926 2024-12-31 [E]

Den Public-Key ausgeben:

$ gpg --armor --export 863B3A7B59C550547E4AD75C7DF93BFA6A2E11DA > info-wlsoft-de-public-key.asc

Jetzt in Thunderbird diesen Schlüssel importieren:

  • Tools - OpenPGP Manager
    • File - Import Public Key from File

Testen der Verschlüsselung und Entschlüsselung. Für das Entschlüsseln miuss einmalig die Passphrase für den privaten Schlüssel eingegeben werden.

#! /bin/bash
DATEI=/tmp/dk_bilddestages.txt
if [ -f $DATEI'.gpg' ]; then
   echo "Datei $DATEI.gpg exists."
   rm $DATEI'.gpg'
fi
echo Schlüssel auflisten
gpg --list-public-keys
echo für mich selbst Verschlüsseln
gpg -e  --recipient info@wlsoft.de --verbose $DATEI
echo Entschluesseln
gpg -d --verbose $DATEI'.gpg' > $DATEI.decrypted
Tags: gpg gnupg thunderbird