Pinephone: Ein Schritt in Richtung Normalität

Heute, am zweiten Weihnachtstag, bringen wir nochmal etwas Normalität auf das Pinephone. Normal ist da nichts, aber das sollte uns nicht aufhalten 🙂

Pinephone: Ein Schritt in Richtung Normalität

Was fehlte denn bislang? Wir haben zwar Video, aber nur per MPV und Konserve. Da kommt jetzt Youtube gerade recht, wenn da nicht der Browser im Weg wäre 🙁 Der aktuelle Chromium 87x für ARM64 hat leider ein paar gravierende Bugs im Rendering und Umgang mit GPU, weswegen man viele Texte nicht sieht. Das hatte ich ja schon erwähnt: Chromium: Probleme Texte zu rendern kein Pinephoneproblem

Was tun?

Einfach den 85er Chromium benutzen, der hat die Bugs nämlich nicht. Solange man damit nur Youtube und eine klitze kleine andere Überraschung macht, ist das Sicherheitstechnisch kein Problem.

sudo dnf -y downgrade https://kojipkgs.fedoraproject.org//packages/chromium/85.0.4183.121/2.fc34/aarch64/chromium-common-85.0.4183.121-2.fc34.aarch64.rpm https://kojipkgs.fedoraproject.org//packages/chromium/85.0.4183.121/2.fc34/aarch64/chromium-85.0.4183.121-2.fc34.aarch64.rpm

Damit ziehen wir uns die alte Version vom Chromium für Fedora 34 rein.

Warum die 85? Kommt gleich 🙂

Wie man sehen kann, funktioniert Youtube damit und das sehr viel besser als Firefox, die Werbung stört natürlich auch hier, aber da kann man nicht viel machen, weil FreeTube nicht für ARM gebaut wird afaik.

Ein paar GPU Renderblips zeigt der Chromium dann, aber das ist verschmerzbar, weil es nur beim Aufbau der UI vorkommt, beim Playback war es nicht zu beobachten.

Jetzt kommt das Problem damit: Chromium ist extrem folgend bei DPI-Scaling, das wir aber brauchen um das Gnome-UI so groß zu bekommen, daß man es auf dem Pine mit Fingern bedienen kann. D.b. in der Praxis, wenn wir das Scaling in Gnome-Tweaks auf 1,5+ stellen, dann paßt der Inhalt von Chromium nicht mehr auf dem Screen. Das ist eigentlich unlogisch, weil das nur die UI also Gnome-Shell und Windowmanager betreffen sollte, aber keine Inhalte, aber Chromium macht das dann auch mit seinem Inhalt.

Ich verurteile das nicht, weil es kein echtes Fehlverhalten ist, aber hilfreich war das auch nicht, weil einige Steuerelemente der UI ( hier im Bild von Firefox illustriert, der hat das gleiche Problem ) nicht erreichbar sind, weil es abartig groß vergrößert wurde ohne einen Sanitycheck einzubauen, ob die Elemente dann überhaupt noch in den Bildschirm passen, was sie bei Chromium dann nicht mehr tun.

Jitsi Meet

Hier also der Kompromiss: Wir drehen die Größe der Fonts im Tweaktool rauf, dafür die DPI-Skalierung runter, zwischen 1 und 1,25. Damit kann man im Portraymode Chromium so starten, daß alles auf den Bildschirm paßt.

Das führt dann zum gewünschten Ergebnis: Jitsi Meet funktioniert jetzt mit Screensharing und Ton \o/

Allerdings werdet Ihr da nicht froh werden, denn Chromium verbrennt da jetzt ungelogen die gesamte CPU Leistung von 4 Kernen. Deswegen knackt der Ton auch etwas, es laggt in der App, was Video und Ton betrifft, die Gnome-Oberfläche ist nicht direkt eingefroren, aber langsam. Der CPU verbrennt so 3.67W/s, so daß man der Akkuladung beim Entladen live zusehen kann 🙂

Netflix geht damit leider nicht, weil für ARM das Widevine DRM Modul nicht verfügbar ist, da es nicht für Chrome kompiliert wurde und so nicht integriert werden kann. ( Nette Anleitung bei Chip, wie man das opportunistisch organisiert 😉 ). Merke: Kein Netflix für Pinephones 🙁

LollyPop Update

Viel bessere Nachrichten gibt es von der Lollypop-Front: das Update 1.4.7 ist da und behebt alle Bugs, die ich bislang finden konnte \o/ Das sieht dann so wie rechts aus, wenn man die DPI-Skalierung wieder etwas anhebt ( 2,00 ).

Damit läßt sich richtig gut auf dem Pinephone arbeiten und ich sage das nicht leichtfertig. Es ist hier definitiv viel sinnvoller als QMMP. Es scrollt sich herrlich, wenn man an den trägen Nautilus denkt. Bis man aus dem einen Klick rausgeholt hat, keine Ahnung wer das bei wieder verbrochen hat 😀

Wer meinem Guide zu Beginn gefolgt ist, der hat Lollypop jetzt bereits drauf und muß nur kurz das Update einspielen. Jetzt müssten nur die Kopfhörer gut funktionieren und die Sache wäre perfekt 🙂

 

Pinephone: Judgement Day!

 

 

Pinephone: wie man ohne Phosh ein Handyfeeling simuliert

Was haben Pinephone Apps und Android Apps nicht gemeinsam? Genau, jede Pinephone aka Linuxapp macht ihr eigenes Fenster in ihrer Lieblingsgröße auf. Das ändern wir heute.

Pinephone: wie man ohne Phosh ein Handyfeeling simuliert

Um das machen zu können, brauchen wir ein dauerhaft laufendes Programm. Idealerweise würde so etwas der Windowmanager übernehmen, der läuft eh, aber da es Gnome ist, naja, nicht so schnell umsetzbar. Also machen wir das mit einem Script: windowmaximixerwatch

#!/bin/bash

rm -f /tmp/liste
i="0"
while [ $i -lt 1 ];
do 
	windowmaximizer > /dev/null
	sleep 1
	RC=$(ps auxf| grep -c gnome-shell)
	if [ $RC -eq 0 ]; then 
		i=1
	fi
done

Diese Datei wird nach /home/pine/.local/bin/windowmaximizerwatch geschrieben

„Das macht ja gar nicht so viel“ Stimmt, aber das ist ja auch nur ein Teil davon. Wie man leicht erkennen kann, ist das eine Programmschleife, die nur dann abbricht, wenn kein Gnome-Shell-Prozess (mehr) vorhanden ist.

Das Programm „windowmaximizer“ ist auch nur wieder ein Shellscript, das die ganze Arbeit macht:

#!/bin/bash

#1 
ISONBOARDOPEN=$(wmctrl -l | grep -c Onboard)

#2 
RESOLUTION=$(xdpyinfo | grep dimens | awk '{print $2;}')
X=$( echo $RESOLUTION | awk -F "x" '{print $1;}')
Y=$( echo $RESOLUTION | awk -F "x" '{print $2;}')

#3
ORIENTATION="landscape"
if [ $Y -gt $X ]; then 
        ORIENTATION="portray";
fi

#4 
LASTORIENTATION=$(cat /tmp/display.orientation.last);
if [ "$LASTORIENTATION" != "$ORIENTATION" ]; then

        # REMOVE OLD IDs as all needs to get maxed newly, because we had a layout orientation switch
        rm -f /tmp/liste
fi

echo "$ORIENTATION" > /tmp/display.orientation.last;

#5 create new /tmp/liste if missing:

touch /tmp/liste

# place Onboard window at the correct position and define variables for wmctrl cmds:

if [ "$ORIENTATION" == "portray" ]; then

        wmctrl -l | grep Onboard | awk '{print "echo "$1";wmctrl -i -r "$1" -e 2,0,1170,720,270";}' | bash
        TOP=41
        WIDTH=720
        if [ $ISONBOARDOPEN -eq 0 ]; then 
                HEIGHT=1440
        else 
                HEIGHT=1130
        fi

else
        wmctrl -l | grep Onboard | awk '{print "echo "$1";wmctrl -i -r "$1" -e 2,0,450,1440,270";}' | bash
        TOP=41
        WIDTH=1440
        if [ $ISONBOARDOPEN -eq 0 ]; then 
                HEIGHT=720
        else 
                HEIGHT=410
        fi
fi 

#6 now ALL windows WITHOUT Onboard, that are still unprocessed ( not in our brain file ), get processed. This is needed as resizing causes a lot of pain to the eye, as it flickers, even if it's not needed.

LISTE=$(wmctrl -l | grep -v Onboard | awk '{print $1;}')

for id in $LISTE
do 
        echo "processing $id";
        RC=$(grep -c $id /tmp/liste)
        if [ $RC -eq 0 ]; then 
                echo "resizing $id"
                wmctrl -i -r "$id" -e 5,0,$TOP,$WIDTH,$HEIGHT
                wmctrl -i -r "$id" -b toggle,maximized_vert,maximized_horz
                wmctrl -i -r "$id" -e 5,0,$TOP,$WIDTH,$HEIGHT
#               wmctrl -i -r "$id" -b remove,fullscreen
                echo $id >> /tmp/liste
        fi
done

#7
# Now we check, if all ids in your brain file are still open windows. Thats needed, because same windows, get the same id, when they are closed and repopend.
# if they are closed we need to remove the id, because we need to reposition them again on next open.

LISTE=$(cat /tmp/liste)
for id in $LISTE
do

        RC=$(wmctrl -l |grep -c $id)
        if [ $RC -eq 0 ]; then
                # Entferne Windows die weg sind!

                echo "remove id $id";

                grep -v $id /tmp/liste > /tmp/liste2;
                rm -f /tmp/liste;
                mv /tmp/liste2 /tmp/liste;
        fi 
done

Diese Datei wird nach /home/pine/.local/bin/windowmaximizer geschrieben.

  1. wir stellen erstmal fest, ob das Onboard OSK läuft. Das ist wichtig für die Berechnung der Fenstergröße, auf die die Apps gezogen werden müssen.
  2. xdpyinfo teilt uns die Bildschirmauflösung und jede Menge anderen Kram mit.
  3. Anhand der ermittelten X/Y Koordinaten legen wir fest, ob wir im Landscapemode ( 1440×720 ) oder Portraymode ( 720×1440 ) arbeiten.
  4. Wenn sich die Orientierung innerhalb des letzten Aufrufes geändert hat, löschen wir die gesicherten FensterIDs, so daß alle Fenster auf die neuen Gegebenheiten umgeändert werden.
  5. nun repositionieren wir das Onboard OSK passend zur Orientierung an die richtige Stelle und berechnen gleich noch die Variablen für die Fensterhöhe und -breite.
  6. nun werden alle Fenster, deren FensterIDs wir noch nicht bearbeitet hatten, was in einer Datei gespeichert wird, auf Position gebracht. Das sind die, die in der letzten Sekunde noch nicht da waren.
  7. Natürlich muß man auch mal aufräumen, was in diesem Fall meint, daß alle FensterIDs aus der Speicherung entfernt werden, die nicht mehr präsent sind. Normalerweise würde man ja annehmen, daß FensterIDs fortlaufend sind, aber nicht bei uns, da werden die FensterIDs wiederverwendet. Tja.

Das funktioniert ganz gut, von Gnome selbst mal abgesehen. Alles was wir jetzt noch machen müssen, ist dem ganzen ein Desktopfile zu erstellen, damit es in der Appübersicht auftaucht:

[Desktop Entry]
Version=1.0
Name=WindowMaximizer
Name[de_DE]=WindowMaximizer
Exec=windowmaximizerwatch
#Terminal=false
Type=Application
StartupNotify=true
#Icon=cs-login
Icon=/usr/share/icons/Mint-X/apps/96/cs-login.svg
MimeType=x-content/unix-software
Categories=Network;
Keywords=web;internet;
X-Desktop-File-Install-Version=0.23

Diese Datei wird nach /usr/share/applications/windowmaximizer.desktop geschrieben.

Wenn alle Shellscripte mit chmod 755 versehen wurden, kann es losgehen. Ich rate dazu ein anderes Icon zu benutzen, da müßt Ihr allerdings selbst sehen, welches Ihr nehmen wollt.

Mit dem Gnome-Tweak-Tools ( Optimierungen ) kann man das Script als App im Startmenü platzieren und so sollte es beim nächsten Start des Desktops automatisch mitstarten. Wenn es das nicht tut, einfach von Hand selbst starten.

Ab nun werden alle-gnome Fenster maximiert und selbst bei Gnome-Fenstern klappt das gelegentlich ( die haben so eine Art Tagesform ). Wer das ganze verbessern will, kann noch eine APP Datenbank aufbauen, aus der z.b. festgelegt wird, ob eine Anwendung in Fullscreen gehen soll, oder nicht. Ist nur so ein Gedanke.. an einen weiteren Bugreport bei Gnome 😉 Natürlich habe ich das schon ausprobiert 😀

In 3 Tagen sehen wir uns wieder. Achtet auf die täglichen kleinen Pine Updates, die kommen alle außer der Reihe rein. Öfters Reinschauen oder gleich den RSS-Feed abonnieren.

 

Pinephone: Judgement Day!