Surface Pro 4 – ENDLICH – Der Durchbruch

Ich habe mich seit Monaten mal wieder an einen Test des Linux Surface Kernels gemacht und wurde erst einmal richtig enttäuscht. Eiserner Durchhaltewille, der Züge von Besessenheit annahm, brachte dann doch noch den erhofften Erfolg 🙂

Surface Pro 4 – ENDLICH – Der Durchbruch

Ich hatte ja die Hoffnung, einen aktuellen Kernel mit Touchsupport zu nutzen, schon aufgegeben, aber die Issue-Kommentare ließen die Hoffnung aufkeimen, daß mein Sturm aus GeisterTouchs irgendwie unter Kontrolle zu bekommen sein müßte. Denn sobald ein Desktop geladen wurde, poppten wie wilde Anwendungen auf, Fenster verschoben sich auf magische Weise und ein Arbeiten war so nicht möglich.

Das Setup

Das Tablet wurde frisch auf Fedora 36 gezogen, so daß alles vorhanden ist. Der Kernel kam direkt aus dem Linux Surface Kernel Repo.

Microsoft Surface Pro 4
Linux Surface Kernel 6.0.6-1
Fedora 36
iptsd 0.51.x

Die Geister sind los

Fährt man das Setup mit dem Defaults so direkt aus, geht die Geisterparty sofort los, wenn der iptsd läuft. Der übernimmt seit Kernel 5.4 die Sache mit der Toucherkennung. Dies änderte sich auch nicht, also ich diverse Optionen in der ipts.conf aktivierte, die dies eigentlich verhindern sollten. Nach einige Stunden rumtestens, hatte ich das Gefühl, daß die Config gar nicht gelesen wurde und habe sogar mit strace nachgesehen, was der Daemon alles nachlädt.

Manchmal ist es dieser eine Schritt weiter …

und der bestand darin, das TouchThreshold sehr viel weiter hochzusetzen, als das mit dem Default von „10“ vorgesehen war. Die Sache mti dem Threshold ist, daß Klicks verloren gehen, weil die als „zu schnell“ maskiert werden. Je größer also das Threshold ist, desto kleiner ist die FTR ( FingerTipRate ), das Touchäquivalent zur FPS 😉 Das könnte zu Problemen bei Spielen führen. Aber da ich damit nicht spielen wollte, zumindest nicht via Touchbedienung, stellt das für mich jetzt nicht das Problem dar.

ipts.conf

Hier meine ipts.conf für das Pro 4, damit Ihr eine Anfangkonfiguration habt.

[Config]
TouchThreshold = 50
StabilityThreshold = 0.55

[Touch]
CheckStability = true
DisableOnPalm = false
DisableOnStylus = false

[Contacts]
Detection = advanced
TemporalWindow = 5
SizeMin = 0.3

[Cone]

[DFT]

Einmal den iptsd via systemctl restart iptsd neustarten und wir sind gut \o/

OK, neuer Kernel, aber wieso leuchtet da jetzt eine weiße LED???

Eine kleine weiße LED, die noch nie auf dem Gerät zusehen gewesen ist, leuchtete fröhlich vor sich hin. Warum leuchtet die? Wieso leuchtet da eine weiße LED, EINFACH SO??? Wo kommt die her, WAS TUT DIE DA? WARUM !?!?!?! …. Na, weil die Kamera an ist \o/

Wer jetzt dachte, das würde einfach so gehen, der kennt Microsoft nicht gut genug 😉 Wir brauchen:

libcamera + Gstreamer + v4l2loopback

Glücklicherweise ist alles im Fedora Repo enthalten:

$ dnf install libcamera libcamera-tools libcamera-qcam libcamera-gstreamer libcamera-ipa v4l2loopback kernel-surface-devel
$ akmods-shutdown
$ reboot

Hinweis: Es braucht die richtige Version der Libcamera, sonst wird es nicht funktionieren. Notfalls müßt Ihr Euch die neueste Version selbst kompilieren.

Die Kameratools brauchen wir, damit wir uns mit cam -l die Liste der Kameras ansehen können und die kann von 0-3 gehen: 0 ( geht gar nicht) , 1 Front/RearCam , 2 Front & RearCam, 3 F+R+IR Cam . Auf dem Pro 4 werden es maximal 2 , weil IR nicht unterstützt wird. Hier gibt es zu dem Thema mehr Infos.

Beispiel:

# cam -l
[0:39:24.393645034] [26937] INFO Camera camera_manager.cpp:293 libcamera v0.0.0
[0:39:24.426650022] [26942] ERROR V4L2 v4l2_device.cpp:91 ‚dw9719 3-000c‘: Failed to open V4L2 device: No such file or directory
[0:39:24.426699037] [26942] ERROR CameraSensor camera_sensor.cpp:469 ‚ov8865 3-0010‘: CameraLens initialisation failed
[0:39:24.430011690] [26942] ERROR IPAProxy ipa_proxy.cpp:149 Configuration file ‚ov5693.yaml‘ not found for IPA module ‚ipu3‘
[0:39:24.455867840] [26942] INFO IPU3 ipu3.cpp:1204 Registered Camera[0] „\_SB_.PCI0.I2C2.CAMF“ connected to CSI-2 receiver 1
Available cameras:
1: Internal front camera (\_SB_.PCI0.I2C2.CAMF)

Wozu Loopback Device?

Mit der WebCam Anwendung Cheese und Qcam kann man die Kamera über das IPA Subsystem direkt ansprechen, aber Firefox und der Rest der Apps können das nicht. Das V4L2 Loopbackdevice kann über den GStreamersupport den anderen Anwendungen die Kamera zur Verfügung stellen. Leider ist das in der Praxis alles andere als stabil.

Ich empfehle das Bild von Cheese zu streamen, das dies stabil funktioniert 😉

Damit akmods das Kernelmodul bauen kann, brauchen wir die Linux-Surface-Kernel Sourcen, mit den „normalen“ geht es leider nicht. Ich empfehle noch einen Eintrag in die /etc/modprobe.d/v4l2-loopback.conf :

options v4l2loopback video_nr=42 card_label=“virtualcam“ exclusive_caps=1

Damit wird das Modul gleich beim Booten geladen.

Wenn ich jetzt noch im Plymouth Bildschirm zum Entsperren der Festplatte ein OSK bekomme, dann erkläre ich das Surface offiziell für Feature-Complete 😉

Fedora 34: Wenn Wifi weg ist…

Wenn das Wifi auf einem Tablet nicht mehr geht, ist man gewöhnlicherweise am Allerwertesten, aber es gibt vielleicht Hilfe für Euch.

Fedora 34: Wenn Wifi weg ist…

Mein Surface Tablet war mal wieder dran mit seinem Update, weil Netflix mit dem „alten“ Firefox von vor 3 Wochen nicht mehr spielen möchte, also gab es das sowieso fällige Fedora 34 Update. Das hätte ich besser nicht gemacht, denn nun habe ich Gnome 40+ und mein Tablet ist jetzt gehandycrapt. *sniff*

Aber bevor das neue Gnome überhaupt zum Problem werden konnte, überraschte mich Fedora 34 damit, daß mein Tablet kein Wifi mehr hatte, dabei hatte ich gar keinen neuen Kernel benutzt, sondern den gleichen Surface Kernel gebootet, wie sonst auch.

Bei näherer Betrachung stellte ich das hier raus:

Dez 18 13:59:00 surface kernel: mwifiex_pcie 0000:02:00.0: enabling device (0000 -> 0002)
Dez 18 13:59:00 surface kernel: mwifiex_pcie: try set_consistent_dma_mask(32)
Dez 18 13:59:00 surface kernel: mwifiex_pcie: PCI memory map Virt0: 00000000938ad086 PCI memory map Virt2: 0000000061c369a5
Dez 18 13:59:00 surface kernel: mwifiex_pcie 0000:02:00.0: Direct firmware load for mrvl/pcie8897_uapsta.bin failed with error -2
Dez 18 13:59:00 surface kernel: mwifiex_pcie 0000:02:00.0: Failed to get firmware mrvl/pcie8897_uapsta.bin
Dez 18 13:59:00 surface kernel: mwifiex_pcie 0000:02:00.0: info: _mwifiex_fw_dpc: unregister device

Und jetzt steht Ihr da genauso wie ich. WTF is pcie8897_uapsta.bin? ok, eine Firmware für den Chip. Soweit so gut. Aber wieso kann der Kernel das File (das in dem Listing unten) nicht mehr laden??

[ ~]$ ls -la /usr/lib/firmware/mrvl
insgesamt 5320
drwxr-xr-x. 3 root root 4096 30. Nov 21:18 .
drwxr-xr-x. 102 root root 36864 2. Dez 09:11 ..
-rw-r–r–. 1 root root 444052 28. Okt 15:33 pcie8897_uapsta.bin.xz
-rw-r–r–. 1 root root 287784 28. Okt 15:33 pcie8997_wlan_v4.bin.xz
-rw-r–r–. 1 root root 388188 28. Okt 15:33 pcieuart8997_combo_v4.bin.xz
-rw-r–r–. 1 root root 392276 28. Okt 15:33 pcieusb8997_combo_v4.bin.xz
drwxr-xr-x. 2 root root 4096 30. Nov 21:18 prestera
-rw-r–r–. 1 root root 165260 28. Okt 15:33 sd8688.bin.xz
-rw-r–r–. 1 root root 1804 28. Okt 15:33 sd8688_helper.bin.xz
-rw-r–r–. 1 root root 330112 28. Okt 15:33 sd8797_uapsta.bin.xz
-rw-r–r–. 1 root root 164668 28. Okt 15:33 sd8801_uapsta.bin.xz
-rw-r–r–. 1 root root 377276 28. Okt 15:33 sd8887_uapsta.bin.xz
-rw-r–r–. 1 root root 439804 28. Okt 15:33 sd8897_uapsta.bin.xz
-rw-r–r–. 1 root root 370612 28. Okt 15:33 sdsd8977_combo_v2.bin.xz
-rw-r–r–. 1 root root 381952 28. Okt 15:33 sdsd8997_combo_v4.bin.xz
-rw-r–r–. 1 root root 297988 28. Okt 15:33 usb8766_uapsta.bin.xz
-rw-r–r–. 1 root root 342532 28. Okt 15:33 usb8797_uapsta.bin.xz
-rw-r–r–. 1 root root 162968 28. Okt 15:33 usb8801_uapsta.bin.xz
-rw-r–r–. 1 root root 446100 28. Okt 15:33 usb8897_uapsta.bin.xz
-rw-r–r–. 1 root root 371036 28. Okt 15:33 usbusb8997_combo_v4.bin.xz

Ja… das dauert ne Weile, deswegen langweile ich Euch ( grummel…neuer xz algo… brabbel ) nicht damit und komme zum Wesentlichen: xv -d pcie8897_uapsta.bin.xz ; reboot  \o/ GEHT \o/

Als erstes sucht der Kernel nach der ungepackten Version der Firmware, wenn es die nicht gibt, dann nimmt er auch eine gepackt. Leider gabs da wohl ein Update und der bisherige Kernel kann die XZ komponente zum Entpacken nicht mehr benutzen und damit die Firmware nicht mehr laden. Durch das Auspacken der Firmware nimmt das mehr Platz weg, aber kann wieder geladen werden. Hat man dazu Worte? 🙁

Hallo, Computer….bist Du da?

Neulich so am Pinephone:

„Sophia, wie wird das Wetter morgen?“

Sophia: „Die Wetteraussichten für Morgen in Braunschweig : Morgens wird es Bedeckt 18 Grad Celsius. Mittags wird es Bedeckt 21 Grad Celsius. Abends wird es Leicht Bewölkt 22 bis 25 Grad Celsius. in der Nacht wird es Leicht Bewölkt 18 Grad Celsius“

Personal Voice Assistant für Linux

Ja, mein Pinephone redet jetzt mit mir und dafür gibt es einen Grund, es hört nämlich auch aufs Wort \o/

Möglich macht das die Spracherkennung Vosk und die Sprachmodelle von Alphacephei. Das besondere daran ist, es funktioniert lokal ohne Internetanbindung und es ist vergleichsweise schlank. Schlank genug jedenfalls, daß es auf einem Pinephone starten kann und gute Ergebnisse bekommt 🙂 Wo massiv viel Licht ist, ist natürlich auch Schatten: 100% auf einem Core des Pinephones sind normal und damit ist die Batterie leider sehr schnell, sehr leer 🙂

Was braucht man alles dafür?

Da die Lösung auch auf dem Desktop läuft, stell Ihr Euch jetzt natürlich die Frage, wo und wie Ihr die Software installiert. Ihr könnt zwar die Spracherkennung und die Sprachausgabe schon haben, aber leider ist „Sophia PVA“ noch nicht als Source verfügbar, weil ich da gerade die Alpha Version schreibe 😉

Hinweis: Wir benutzen hier Fedora 33/35.

Wir brauchen:

  • Python3
  • pip3
  • portaudio
  • mbrola
  • espeak
    vosk

Espeak:

sudo dnf  -y install espeak

Es könnte aber gut, das es auf Eurem PC schon drauf ist 😉

Mbrola:

Wie man Mbrola installiert könnte Ihr hier lesen:

Mbrola – etwas bessere Sprachsynthese

Von der Anleitung braucht Ihr auch mindestens das „say“ Bashscript und leider eine neue Version, denn aplay zickt rum. Ändert es von:

mbrola -t 1.2 -f 0.8 /usr/share/mbrola/$VOICE/$VOICE /tmp/out.pho -.au | aplay 1>/dev/null 2>/dev/null

nach:

FILENAME=/tmp/mbrola$RANDOM.wav
mbrola -t 1.2 -f 0.8 /usr/share/mbrola/$VOICE/$VOICE /tmp/out.pho $FILENAME
aplay $FILENAME 1>/dev/null 2>/dev/null

dann geht es wieder.

Python3 + Pip3 + portaudio

pip3 install sounddevice
sudo dnf install python3-pyaudio espeak

Vosk:

Wenn man das für den Desktop haben will:

pip3 install vosk

Wenn man es auf den Pine haben will, geht nur eine Beta:

pip3 install https://github.com/alphacep/vosk-api/releases/download/v0.3.30/vosk-0.3.30-py3-none-linux_aarch64.whl

Die Version 0.3.30 könnte sich natürlich bereits geändert haben, da müßt Ihr selbst mal nachsehen.

Das Sprachmodell

Das für Euch passende Sprachmodell kann man hier finden, ich nehme an Ihr wollt Deutsch mit Eurem PC reden 😉 : https://alphacephei.com/vosk/models

Es gibt große und kleine Modelle, die unterscheiden sich in den gelernten Sprachumfang, daher empfehle ich für den PC die große Deutschversion: https://alphacephei.com/vosk/models/vosk-model-de-0.6.zip

Nun noch installieren ( achtet auf die roten Zeilen, die müßt Ihr anpassen, die sind fürs Pine ):

mkdir Programme
cd Programme/
mkdir vosk
cd vosk/
git clone https://github.com/alphacep/vosk-api
cd vosk-api/python/example/
unzip vosk-model-small-de-0.15.zip
ln -s vosk-model-small-de-0.15 model
./test_microphone.py

Und schon läuft Eure Spracherkennungssoftware. Ihr könnt losreden 🙂

Diese Software tut nichts, außer Euch anzuzeigen, was Ihr sagt. Damit trainiert Ihr Euch. Der Personal Voice Assistent namens Sophia, der ist eine andere Sache:

Jetzt hat so ein Voice Assistent keine Oberfläche , also kann man Euch nichts außer seinen Taten zeigen:

auf der Konsole sieht dies so aus:

Nicht für mich gedacht:
 spiele musik ab
Nicht für mich gedacht:vielen danke
Nicht für mich gedacht:ich helfe gerne
Nicht für mich gedacht:können
Nicht für mich gedacht:hm
stelle eine verbindung mit wolfgang her
Ich habe stelle eine verbindung mit wolfgang her nicht verstanden
Nicht für mich gedacht:das hatte schon anwendungen oder zumindest verstanden
Nicht für mich gedacht:klar

Sophia (so heißt mein PVA auf dem Pinephone 😉 ) kann:

Musik suchen und abspielen
Dokumente wie PDF,Text,Calc,Word suchen und öffnen
Videos suchen und abspielen
Musik starten, stoppen und die Lautstärke anpassen
Es weiß was Netflix bedeutet
sagt das aktuelle oder morgige Wetter an
öffnet Firefox, Blender und noch ein paar andere Programme 😉

außerdem kann Sie sich auf Zuruf selbst kompilieren, das macht das Programmieren echt einfacher 😀

Alle Musik nicht mehr selbst suchen zu müssen, sondern suchen zu lassen inklusive Abspielen, ist Gold wert sag ich Euch 😉 Sophia ist in Java geschrieben, also ein Bruch mit dem Pyhonframework Vosk, aber das macht rein gar nicht, da man ja eh nur die Texte braucht 😉

Das gibt einen hübschen Wettlauf, wenn Ihr jetzt alle PVAs programmiert und ins Netz stellt. Weil das absehbar passieren wird, habe ich bei Purism, auch ein bisschen als Scherz, einen Verbesserungsvorschlag gepostet, dafür doch einen ein/aus Button ins Panel zu integrieren 😉

Auf dem Pinephone

müßt Ihr unbedingt darauf achten, den wieder auszumachen. Es schluckt mit meisten 100% von einem Core doch sehr viel Leistung und damit Strom. Die Spracherkennungsleistung ist allerdings besser als auf dem Desktop, was am kleineren Modell liegen könnte.

Außerdem ist das so eine Sache mit Alice Cooper und dem Pinephone, da sitzt der Lautsprecher einfach viel zu dicht am Mikro, was es für Sprache dann taub macht, also ist er als Musikassistent bauartbedingt nicht so richtig brauchbar.