Raspberry Router

Für die Fälle, in denen man nur per WLAN einen Zugang zum Internet und nur einen Raspberry PI dabei hat, aber dennoch kabelgebundenes Internet braucht, notiere ich diesen Eintrag. Für weitergehende Informationen ist das Arch Linux Wiki, wie immer, empfehlenswert.

Wir müssen unseren Raspberry nur mit dem WLAN verbinden, das Ethernetkabel einstecken und spezifizieren, dass der Traffic vom einen zum anderen weitergeleitet werden sollen.

sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

Da unser Raspberry jetzt ein Router ist, muss er natürlich auch die üblichen Aufgaben eines Routers übernehmen und die Geräte, die per Ethernet verbunden werden per DHCP mit IP Adressen versorgen, beispielsweise mittels dnsmasq mit folgender Konfiguration in /etc/dnsmasq.conf:

#disable dns
port=0

dhcp-range=192.168.13.50,192.168.13.150,12h
bind-interfaces
dhcp-option=3,0.0.0.0
dhcp-option=6,1.1.1.1,8.8.8.8

Bei der Gelegenheit kann man auch dafür sorgen, dass sämtlicher Traffic durch ein VPN geleitet wird, indem man das wlan0 Interface oben durch das konfigurierte VPN-Interface austauscht (zB. durch tun0 für OpenVPN oder wg0 für WireGuard).

compress-pdf

Um ein pdf mit vielen zu hoch aufgelösten Bildern auf eine angemessene Dateigröße zu bringen (durch das Herunterskalieren und gegebenenfalls Neukodieren der Bilder), kann einfach ghostscript genutzt werden:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dEmbedAllFonts=true -dSubsetFonts=true -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Die Qualitätspresets sind screen, ebook, printer, prepress und default. Weitere Optionsnamen können durch folgendes Kommando ermittelt werden:

gs -sDEVICE=pdfwrite -o /dev/null -c "currentpagedevice { exch ==only ( ) print == } forall"

smartphone webcam

Um die Kamera eines Smartphones als Webcam für eine Videokonferenz auf dem Computer zu nutzen, braucht man zuerst eine App, die das Bild der Kamera als http-Stream bereit stellt, bspw. IP Webcam.

Für Linux existieren die Projekte v4l2loopback und ffmpeg mit deren Hilfe der Stream als Webcam input genutzt werden kann (hier für den Fall, dass das Smartphone die IP 192.168.1.127 hat):

sudo modprobe v4l2loopback
ffmpeg -i http://192.168.1.127:8080/video -map 0:v -vcodec rawvideo -vf format=yuv420p -fflags nobuffer -flags low_delay -fflags discardcorrupt -f v4l2 /dev/video2

Natürlich kann man beliebige Filter von ffmpeg anwenden, zum Beispiel einen colorkey oder chromakey, um ein beliebiges Bild background.jpg als virtuellen Hintergrund zu nutzen. Hier für den Fall, dass ein weißes Bettlaken als “green screen” genutzt wird:

ffmpeg -i images/background.jpg -i http://192.168.1.127:8080/video -vcodec rawvideo -fflags nobuffer -flags low_delay -fflags discardcorrupt -filter_complex "[1:v]colorkey=0xbbbbbb:0.3:0.2[foregroud];[0:v][foregroud]overlay[composite];[composite]format=yuv420p[out]" -map "[out]:v" -f v4l2 /dev/video2

Ähnlich kann auch das Smartphone-Mikrophon als Mikrophon für den Computer genutzt werden. Hier mithilfe von pulseaudio und gstreamer:

pactl load-module module-null-sink sink_name="ipwebcam"
pactl set-default-source "ipwebcam.monitor"
gst-launch-1.0 souphttpsrc location="http://192.168.1.127:8080/audio.wav" is-live=true ! audio/x-raw,format=S16LE,layout=interleaved,rate=44100,channels=1 ! queue ! pulsesink device="ipwebcam"