Archives for category: frickelig

Sometimes in meeting software screen sharing is needed but broken on linux somehow (thank you chrome) or you have to pay for it (slack …). This is, where sharing your screen by virtual WebCam comes in handy. You can do this via the video4linux loopback device. This will create a dummy camera device, that you can feed by ffmpeg grabbing your screen.

This might only work with kernel versions later then 6.8, at least this did not work on a Ubuntu with a kernel that old. You’ll need to install and enable v4l2loopback, install the linux-headers to if you haven’t done so, jet:

$ sudo apt install v4l2loobback-dkms linux-headers

Check your current video devices with ls -lha /dev/video* then load the module.

$ sudo modprobe v4l2loopback devices=1 max_buffers=2 exclusive_caps=1 card_label=VirtualCam

Check again which new device appeared, there should be a new one.

Make sure your user belongs to the group video. Add it by $ usermod -aG video $ME (log off and on!).

Now you can use ffmpeg to feed your screen into your virtual camera device:

$ ffmpeg -f x11grab -r 15 -s 1280×720 -i :0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video2

-r is the frame rate, -s the screens resolution, -i the screen shared. On my setup /dev/video2 is the virtual camera device, seen as VirtualCam in any WebCam software.

In complex display setups it is possible to share just part of the whole screen. In my case I’d like to share only my laptops native display. To get that part I ask xrandr for the current configuration.

$ xrandr
Screen 0: minimum 320 x 200, current 4320 x 1920, maximum 16384 x 16384
eDP-1 connected primary 1920×1080+2400+840 (normal left inverted right x axis y axis) 309mm x 174mm
1920×1080 60.05*+ 60.01 59.97 59.96 59.93 48.04
1680×1050 59.95 59.88
1400×1050 59.98
1600×900 59.99 59.94 59.95 59.82
1280×1024 60.02
1400×900 59.96 59.88
1280×960 60.00
1440×810 60.00 59.97
1368×768 59.88 59.85
1280×800 59.99 59.97 59.81 59.91
1280×720 60.00 59.99 59.86 59.74
1024×768 60.04 60.00
960×720 60.00
928×696 60.05
896×672 60.01
1024×576 59.95 59.96 59.90 59.82
960×600 59.93 60.00
960×540 59.96 59.99 59.63 59.82
800×600 60.00 60.32 56.25
840×525 60.01 59.88
864×486 59.92 59.57
700×525 59.98
800×450 59.95 59.82
640×512 60.02
700×450 59.96 59.88
640×480 60.00 59.94
720×405 59.51 58.99
684×384 59.88 59.85
640×400 59.88 59.98
640×360 59.86 59.83 59.84 59.32
512×384 60.00
512×288 60.00 59.92
480×270 59.63 59.82
400×300 60.32 56.34
432×243 59.92 59.57
320×240 60.05
360×202 59.51 59.13
320×180 59.84 59.32
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
DP-1-1 disconnected (normal left inverted right x axis y axis)
DP-1-2 connected 1200×1920+0+0 left (normal left inverted right x axis y axis) 518mm x 324mm
1920×1200 59.95*+
1920×1080 60.00 50.00 59.94 30.00 25.00 24.00 29.97 23.98
1600×1200 60.00
1280×1024 75.02 60.02
1152×864 75.00
1280×720 60.00 50.00 59.94
1024×768 75.03 60.00
800×600 75.00 60.32
720×576 50.00
720×480 60.00 59.94
640×480 75.00 60.00 59.94
720×400 70.08
DP-1-3 connected 1200×1920+1200+0 right (normal left inverted right x axis y axis) 518mm x 324mm
1920×1200 59.95*+
1920×1080 60.00 50.00 59.94 30.00 25.00 24.00 29.97 23.98
1600×1200 60.00
1280×1024 75.02 60.02
1152×864 75.00
1280×720 60.00 50.00 59.94

On my whole Screen 0, made of 3 displays (4320 x 1920), this is eDP-1, sitting at the coordinates 2400,840. I have to change the -i option to -i:0.0+2400,840 and the resolution of the video to -s 1920x1080.

The complete ffmpeg line is:

$ ffmpeg -f x11grab -r 15 -s 1920×1080 -i :0.0+2400,840 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video2

Now your virtual webcam should stream the screens content.

(swg>

Meine Kinder sind mein Motor, nix treibt Vorhaben so voran, wie sie. Selbst der Umzug des Homeservers auf neue Hardware – die hier schon zu lange rumliegt – treiben sie an. Ein paar wenig enthusiastische Anläufe hab ich jetzt schon unternommen gehabt; Die sind aber versandet. Der Einbau der größeren SSD scheiterte zum Beispiel am physischen Format, ein Adapter war nötig. Bestellt, eingebaut, bootet … Pause. Vielleicht war Alpine dann auch nicht die beste Idee fürs Server-Betriebsystem; Nicht, das Alpine das nicht kann, ich kenne Alpine nicht gut. Debianbasiertes und Arch sind eher meine Linux-Heimat; Alpine hab‘ ich noch nie probiert. Getriggert wurde der Switch zu Alpine von einem ‚Hilferuf‘ des Debian Maintainers, dass zu wenige beitragen und zu viel verwaiste Peckages rumliegen. Sowas gruselt mich ein bisschen, weil ich den Kisten zu Hause die fürs digitale Familienleben essenziellen Dinge anvertraue.

Alpine, Minecraft und ich

Mich in Alpine einzulesen hat mich mehr gefordert, als ich zugeben wöllte. Aber jetzt hat die Sidequest „Internet Exposed Minecraft Server“ zum nächsten, ernsthafteren Anlauf geführt. Jannika will unbedingt mit ihrer Freundin gemeinsam Minecraft zocken. Debian hatte ich kurz nochmal probiert, weil ich dachte, es geht schneller, wenn ich mich auf dem System schon gut auskenne. Aber wenn das Ethernet Device nicht direkt erkannt wird … Nee, keinen Bock. Dann ist halt doch das Alpine Linux drauf geblieben, mit dem ich angefangen hatte. So wahnsinnig anders, als Debian früher war, ist’s nun auch nicht. Das Prinzip ist das gleiche, die Befehle nur manchmal anders.

Im Prinzip gefällt mir Alpine sogar sehr gut! OpenRC als Startsystem für Services ist wirklich schön und einfach. Nachdem avahi fürs interne Finden von Geräten im Netzwerk drauf war und OpenSSH auch, konnte ich eigentlich schon alles für den Minecraftserver vorbereiten:

  • Eigenen User einrichten, der den PaperMC ausführen wird
  • Backup vom alten PaperMC auf dem Raspi kopieren. Schick.
  • Als Service soll das Teil auch starten, gleich nach dem Bootup, aber erst wenn Netzwerk da ist.

Letzteres ist mit einem kurzen Script in /etc/init.d/ schnell erledigt.

Das Problem dabei ist, dass man nicht mehr an die Serverconsole des PaperMC ran kommt, wenn der erstmal in den Hintergrund gedrückt wurde. Ich müsste die in Minecraft integrierte Remote Management Console freischalten, und da streubt es sich in mir. Bisher hab ich den Server auf dem Raspi händisch in einem screen gestartet und dann detached. Auf dem Raspi kann ich mich jederzeit per SSH einloggen und den screen zurückholen. Da der Raspi selten neu booten muss, war das Setup erstmal ok.

Automatik in OpenRC

Auf dem neuen Rechner will ich da nicht hinterherhirscheln, das muss von selber gehen. Für den simplen PaperMC-Start hatte ich ein Script geschrieben, das einen screen detached und mit Namen startet und drinnen einfach der PaperMC-Server ausführt: papermc.sh

#!/bin/sh
cd /opt/minecraft/papermc/
/usr/bin/screen -dmS MinecraftServer /usr/bin/java -Xms2048M -Xmx2048M -jar papermc.jar nogui

Ausführbar ist das durch den User für den Server (schreibbar nicht). Mit einem doas -u minecraft papermc.sh läuft das dann auch im Kontext des richtigen Users, der nur minimal die Rechte hat, die er dafür braucht. Piped man in das screen ein stopp-Kommando doas -u minecraft /usr/bin/screen -S MinecraftServer -X stuff 'stop\n' endet nicht nur der java-Teil, sondern auch das screen endet.

Das Script könnte ich jetzt direkt in OpenRC rufen, das hat aber Nachteile: OpenRC ‚guckt dann nicht auf den richtigen Prozess und meldet trotz laufendem Server eine ‚Service crashed‘ im status. Also schreiben wir die nötigen Zeilen direkt in /etc/init.d/minecraft:

#!/sbin/openrc-run
name="PaperMC"
description="papermc minecraft server"
command="/usr/bin/screen"
directory="/opt/minecraft/papermc"
command_args="-dmS papermc /usr/bin/java -Xms2048M -Xmx2048M -jar papermc.jar nogui"
command_user="minecraft"
command_background=true
pidfile="/run/screen_papermc.pid"

depend() {
need net
}

stop() {
ebegin "Stopping PaperMC gracefully"

su -s /bin/sh minecraft -c \
'/opt/minecraft/papermc/stop_papermc.sh'

eend $?
}

Achja: Ausführbar muss das sein chmod u+x /etc/init.d/minecraft.

Im stop_papermc.sh script wird ein ’stop‘ ins screen geschickt, worauf der Server und das screen endet. Wir warten in einer Schleife darauf, dass der Server die Nutzer benachrichtigt hat und dann sauber alles gespeichert und sich beendet hat.

#!/bin/bash
PAPERMCPID=$(/usr/bin/pgrep -f "java .*papermc.jar")
if [[ -z $PAPERMCPID ]];
then
exit 1;
fi

/usr/bin/screen -S papermc -p 0 -X stuff 'say Server fährt herunter in 10 Sekunden …\n'
sleep 10
/usr/bin/screen -S papermc -p 0 -X stuff 'stop\n'
((count=0))
until [[ -z $(/usr/bin/pgrep -f "java .*papermc.jar") ]];
do
sleep 1;
((count=count+1))
if [[ $count -gt 20 ]];
then
exit 1;
fi
done

Zuletzt soll unser ganzer schöner start-stop-minecraft dann auch beim boot/shutdown ausgeführt werden: rc-update add minecraft default

Für die Erreichbarkeit von außen hab ich eine Subdomain eingerichtet, die per dynDNS ihre IP bekommt. Der Updater dafür ist ddclient. Loch in Router gebohrt, dass der Weiß, wohin der Minecraft-Server-Traffic soll. Geht. Ganz wunderbar.

Es gilt noch zu schauen, wie die Kinder sich unterhalten – weil: nur miteinander schreiben, während man in Minecraft fleißig baut, ist ja auch doof. Vorerst löst ein Talk-Chatroom auf meiner Nextcloud das Problem. Irgendein Plugin für Minecraft wird das aber wahrscheinlich schöner lösen könne.

(swg)

Marias altes Notebook hatte ich zuletzt Mitte 2022 nochmal gerettet: Der Akku hatte sich aufgebläht, die Beule unter der Tastatur hat das Tippen behindert. Naja, und ‚gesund‘ ist das natürlich nicht, schließlich will man ja nicht abbrennen. Für 140,-€ hatte er einen Nachbau-Akku verpasst bekommen, ging auch leicht zu wechseln und funktionierte danach schlicht.

Nochmal zwei Jahre später tut das alte Sony Vaio Duo immer noch recht guten Dienst. Mit 8 GB RAM und einem i7 der vierten Generation war es 2014 top ausgestattet, unter Linux mit Gnome-Desktop fühlt sich das auch heute noch sehr fluffig an. Damals lag man mit 1100,- € eher im oberen Bereich der Preisliste. Eine neue Alterserscheinung hat sich jetzt aber doch gezeigt, das Display flackert gerne mal. Offenbar ist nach gut zehn Jahren das Display-Kabel langsam durch. Die OP das zu Tauschen ist deutlich aufwendiger, als der bloße Akkuwechsel. Die sehr spezielle Display-Mechanik steht da dagegen und dass ich online keine Hinweise gefunden habe, wie man so weit ins Innere des Notebooks vordringt.

Maria mag ihren Rechner, braucht ihn aber auch. Ehe der Ausfall fatal ist, wollte ich Ersatz haben; Und ein bisschen sind ja auch unter Linux die Anforderungen gestiegen. Eine vollverschlüsselte Systempartition ist heute State of the Art, Browser fressen für Webseiten auch hier in ein paar mehr Tabs ordentlich RAM und bei den Tastaturen von Notebooks hat sich in den letzten 10 Jahren auch einiges getan. So hab ich angefangen zu suchen. Gebraucht.

Für mich selbst hatte ich mal festgelegt, dass ich mir keine neue Hardware mehr kaufen will. Der ganz simple Grund ist, dass ich meine Notebooks auch viel mobil benutze. Die Dinger laufen einfach Gefahr, zerdeppert zu werden. Wenn die dann so richtig teuer waren, tut das sehr weh, das Zerdeppern und Wiederbeschaffen; Solche Schmerzen muss ich ja nicht provozieren. Also kaufe ich lieber gebrauchte Notebooks, die mal teuer waren. Gerade PC-Technik hat einen unglaublichen Wertverfall; Nicht ganz unschuldig daran ist derzeit Microsoft. Seit Windows 11 absurde und auch nicht logisch nachvollziehbare Kriterien hat, worauf der Ramsch läuft, werden unglaublich Mengen wirklich schöner Hardware in die Kleinanzeigen-Portale gespült. Unter Linux sind das immer noch sehr feine Arbeitsgeräte. Dazu kommt die Gier der Leute, sich jetzt doch ‚endlich‘ mal wieder was Neues gönnen zu müssen.

Ganz kurz hatten Maria und ich trotzdem mal nach etwas geguckt, was auch als Neukauf in Frage käme: Das Framework-Notebook hätte ich cool gefunden. Dem entgegen steht ein Neupreis von über 1800,- €. Schmerzen, potentiell große Schmerzen. Deswegen ist es letztendlich doch ein gebrauchter geworden: HP Elitebook x360 1030 G4. Ein i7 der achten Generation mit 16 GB RAM, Tabletfunktion & Touchscreen und LTE-Modem für 300,- €, Versand inklusive. Ob Maria die Tablet-Funktion tatsächlich nutzen wird, sei mal dahingestellt. Beim Vaio kam das eher selten vor, das Teil ist halt ein ganz klein wenig zu schwer, um es vor sich zu halten. Dazu die Angst, dessen Display an den empfindlichen Kanten zu schrotten; Aber vielleicht jetzt. Gnome als Desktop macht auf dem Ding jedenfalls sehr viel Spaß´. Die Bedienung ist vor allem für solche hybriden Geräte wirklich durchdacht und einfach. Alles funktioniert zudem out of the box und ohne herumfrickeln zu müssen: Display-Dreherei und Screen-Keyboard im Tablet-Mode klappen und die physische Tastatur ist für mein Empfinden großartig, das Alu-Gehäuse fühlt sich stabil und hochwertig an.

Aber warum ich das jetzt so breit erzähle: Letzten Dienstag wurde Maria von Blitzeis in Freiberg überrascht. Und da hat sie sich mit dem Faltrad ‚hingelegt‘; Passiert ist ihr glücklicher Weise nichts weiter, aber sie hatte den x360 im Rucksack dabei. Dessen Alu-Gehäuse ist jetzt an einer Ecke krumm und der Touch auf dem Display ist dort auch gerissen. Wenn ich mir ausmale, dass das auch der Framework hätte gewesen sein können … Auch beim HP biegs’te nichts mehr gerade, immerhin: Er funktioniert noch, als Ersatzteilspender ist er verwendbar. Heute kam der nächste x360 mit der Post, wieder für 300,- €. Nur das LTE-Modem hab ich umgepflanzt und die SSD (um die Neuinstallation zu sparen). Klar hätten wir das Geld gern nicht nochmal bzw. für was anderes ausgegeben, aber es tat nicht so sehr weh, wie es das beim Framework …

Ein Lob übrigens an HP: Die betreiben auf youtube einen Support-Kanal auf dem sie sogar nützliches verbreiten, zum Beispiel das Zerlegen des x360 1030 G4. Cool.

(swg)

Mein neues gebrauchtes Board ist noch am Freitag vor Weihnachten geliefert worden. Ne Briefsendung ging rasant mit der Post. Da mich der rechnerlose Zustand in der Stube wirklich mehr nervt, als ich vorher vermutet hätte, ist er jetzt dran. Der Zeitpunkt ist recht günstig, zwar ist Marie, Alinas beste Schulfreundin, gerade da. Aber die Mädels haben sich entschieden die neue Wohnung von Marie angucken zu gehen, die ziehen nämlich näher zu uns.

Ich pflücke meinen Rechner auf dem Wohnzimmertisch auseinander. Natürlich kann ich nicht einfach und ganz schnell alles vom alten auf das neue Mainboard stecken. Mein altes Board hat unter der CPU einen Stützrahmen mit vier Gewindelöchern. Da ließ sich die Pumpe der Wasserkühlung einfach reinschrauben. Dem neuen Board fehlt dieses Detail. Ich improvisiere was aus Kunststoff-Unterlegscheiben und meinem Sammelsurium aus der Schraubenkiste. Nicht schön aber selten – und zu Gesicht bekommt das ja auch nie jemand. Richtig ist, was funktioniert.

Ein kurzer Test, bevor ich den Radiator wieder an seinem Halteblech fixiere: Bootet! Gott sei Dank. Der Rest ist schnell zusammengeschraubt. Noch schnell die Lüfterkennlinien im BIOS einstellen, damit die auf den Gehäuselüfter-Anschluss gesteckten Radiator-Lüfter auch mit einer Mindestdrehzahl pusten. Damit kühlen die nicht nur die Abwärme der CPU weg, die blasen auch die PCH und die Kondensatoren um den CPU-Sockel an. Auf das die alle ein langes Leben haben.

So, nu muss ich Abendbrot machen, Mika wird schon wieder knatschig.

(swg)

PHP Code Snippets Powered By : XYZScripts.com