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!

Pinephone: Wie man schwer erreichbare Apps konfiguriert

Auf dem Pinephone läuft Linux, soweit so gut. Daß bedeutet auch, daß wir echt coole Sachen mit dem Pinephone machen können 🙂

Pinephone: Wie man schwer erreichbare Apps konfiguriert

Wenn Ihr meiner Philosophie folgt, habt Ihr Gnome auf dem Handy laufen. Was wäre, wenn Ihr dieses Gnome, auf Euren PC benutzen würdet? 😀 Ich habe da zwei Ansätze für Euch. Beide vereint, daß der Bildaufbau ein bisschen langweilig ist, weil das Pinephone nicht die schnellste CPU hat.

Das Display per SSH exportieren

Dafür müssen wir den SSH Server umkonfigurieren. Dazu muß man sich als root-Benutzer auf dem Pine anmelden, entweder Ihr macht das SSH oder Ihr quält Euch durch die Toucheingabe ( nicht zu empfehlen ).

Eure /etc/ssh/sshd_config sollte so aussehen:

Include /etc/ssh/sshd_config.d/*.conf
PermitRootLogin prohibit-password
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
X11Forwarding yes
PermitTunnel yes
Subsystem sftp /usr/libexec/openssh/sftp-server

Dann Abspeichern der Änderungen und Neustart des Servers: systemctl restart sshd

Achtung: jetzt unbedingt Testen, ob Ihr noch einloggen könnt, sonst wird das unschön 😉 Wenn es Probleme gibt, die Änderungen einfach auskommentieren ( „#“ vor die Option schreiben )

Jetzt könnt Ihr per „ssh -Y -C pine@pine.ip“ ( Eure IP in Lan benutzen ) auf Euer handy einloggen und einfach eine Anwendung starten. Das sogenannte Display wird dann von SSH so umgebogen, daß es die Ausgabe auf Eurem PC/Laptop/Tablet oder anderem Telefon rauskommt 😉

Diese Methode ist für „schnell mal ebend“ geeignet.

RDP auf das Pinephone

Ein anderes Kaliber von mit dem Pinephone arbeiten bekommt wir über die Remote-Desktop-Schiene rein.

Damit bekommt man den Gnomedesktop auf den heimischen PC. Es sei aber gleich gesagt, für schnelles Arbeiten ist das nichts, weil der Bildaufbau langsam ist. Dafür kommt man echt an jede Ecke, jedes Icon und jede Einstellung dran.

Menüs und Optionen

Zur Vorbereitung müssen wir da erst einmal den XRDP Server installieren. Also auch hier wieder root werden und eingeben:

dnf install -y xrdp
sytemctl start xrdp
sytemctl enable xrdp
systemctl stop firewalld

Das letzte Kommando muß man erklären:

Ähm …., es ist unerklärbar. Beschönigen kann man nichts, der Firewall-Server hat ne Macke. Selbst wenn man RDP durchlässt, kommt es nicht an. Da hilft leider nur ausschalten. Aber: ab der Sekunde funktioniert dann auch endlich KDE-Connect korrekt, die DLNA Freigaben Eures Handies usw. . Ich bin zwar ein Sicherheitsfanatiker, aber echte Nachteile hat das nicht. Man kommt von außen eh nur an die Ports, an die man kommen muß, um die gewünschte Funktion auszuführen, dies könnte eine Firewall ohnehin kaum sinnvoll beschränken. Außerdem kann man sich noch eine klassische Iptables-Firewall aufbauen, falls ein Schutzinteresse besteht. Das hatte ich ja eh vor.

Hinweis: Im Mobilbetrieb, also außerhalb Eures Lans, solltet Ihr die Firewall wieder einschalten! Da muß schliesslich keiner auf Eurer Handy zugreifen können, zumal er gar nicht weiß, welche IP das gerade hat.

Kamera per RDP

ACHTUNG:

Ihr müßt ausgeloggt sein am Handy, also den Unlooker vom Handy sehen, sonst kommt Ihr als „pine“ Benutzer nicht rein. Als Root geht das, weil das eine andere Session ist.

Da man alle Apps per RDP starten kann, wobei es auch Einschränkungen gibt, weil der PolicyKit-Server nicht der hellste Stern am Himmel ist ( „CPU-Freq Problem“ ), kann man natürlich auch mit dem Firefox arbeiten oder seine Emails sichten ( diesmal in lesbarer Größe 😉 ).

Auf dem Desktop-PC brauch Ihr Remmina oder xFreeRDP um Euch dann auf Eurer Handy zu verbinden. Da ein Login via RDP ein lokaler Login ist, kann man sich auch als ROOT anmelden. So sieht das dann in Remmina aus

Natürlich könnt Ihr den XRDP auch nur dann starten, wenn Ihr den wirklich braucht, aber könnte ziemlich lästig werden.

Wir sehen uns dann beim nächsten Teil der Pinephone Serie.

Pinephone: Judgement Day!