Ich bin ja insgesamt nicht so der Freund von den ganzen Datenkraken wie Google, Facebook usw. und nutze nur wenige Social Media. Und erstrecht auf dem Smartphone, das ich mit LineageOS und somit “entgoogelt” betreibe, nutze ich sehr wenige Apps. Ich tu da wirklich noch so altmodische Sachen wie SMS schreiben und telefonieren!

Auch Whatsapp ist mir suspekt, da es das Telefonbuch abgreift, um die Kontakte darin mit Whatsapp-Nutzern abzugleichen. Das will ich meinen Kontakten nicht zumuten, und überhaupt habe ich jahrelang keinerlei Antrieb verspürt, mich an dieser Plattform zu beteiligen. Allerdings hatte ich dann vor etwa eineinhalb Jahren doch eine Gruppe Leute, mit denen ich gerne Kontakt halten wollte, und die sich dafür nun mal Whatsapp als Medium ausgesucht haben. Emails waren ihnen zu mühsam.

Meine Lösung war, auf meinem Laptop eine VirtualBox VM zu erstellen, darin Android-x86 zu installieren und auf dieser “Quarantäne-Umgebung”, die ich zu sonst nichts nutze, Whatsapp. Es gibt auf osboxes.org fertige VM-Images, aber ich meine mich zu erinnern, dass das bei mir nicht funktioniert hat. Also habe ich das damals (Mitte 2019) aktuelle ISO-Image android-x86_64-8.1-r2.iso von Fosshub auf eine “Linux” VM installiert. Als Parameter nahm ich:

  • Name: Android-x86
  • OS: Linux 2.6 / 3.x / 4.x 64-bit
  • Memory: 2048MB
  • Display: VBoxVGA (habe ich inzwischen zu VBoxSVGA geändert, das inzwischen empfohlene VMSVGA funktioniert nicht)
  • Virtual Disk: 16GB an SATA Port 0
  • Network Adapter 1: NAT
  • Network Adapter 2: host only

Ich konnte das ISO mounten und davon Android installieren. Ich habe keinen Google Account eingetragen. Ich muss gestehen, ich weiß nicht mehr, ob ich bezüglich der Netzwerkeinstellungen irgendwas machen musste, oder ob sich das so ergeben hat. Jedenfalls bekommt die VM das NAT-Interface als vlan0 mit IP 10.0.2.15 default gateway 10.0.2.2 und das lokale interface als eth1 mit IP 192.168.56.101 zugewiesen.

Im Linux drumherum kann ich nun mit adb connect 192.168.56.101 eine adb-Verbindung herstellen und dann z.B. mit adb shell zugreifen (im Android-x86 ist auch eine App “Terminalemulator” für eine lokale Shell installiert) oder mit adb install APK-Dateien installieren. Das bin ich schon von meinem Smartphone mit LineageOS so gewöhnt, in dem Fall via USB Kabel, der adb connect ist sozusagen mein virtuelles USB-Kabel zur VM.)

So habe ich also auch Whatsapp von apkpure.com runtergeladen und installiert. (Hin und wieder warnt Whatsapp, dass der client nur noch x Tage supportet ist, dann lade ich die aktuellste Version runter und aktualisiere mit z.B. adb install -r Downloads/WhatsApp\ Messenger_v2.20.206.19_apkpure.com.apk dabei steht -r für replace)

Nun ist Android-x86 ja ein virtuelles Tablet und kein virtuelles Smartphone, hat also keinen Mobilfunkteil und keine Telefonnummer. Ich wollte auch meine Handynummer nicht mit meinem Whatsapp-Account verknüpfen, aber einmalig beim Registrieren erfordert Whatsapp nun mal eine Telefonnummer. Normalerweise wird da eine SMS hingeschickt, aber alternativ erfolgt auch ein Anruf mit einer Ansage der PIN. Ich habe meine sipgate-Festnetznummer verwendet, die ich nur gelegentlich verwende und auch nur dann einbuche (seit ich eine allnet-flat auf meinem Handy habe). Ansonsten bekomme ich Anrufbeantworter-Sprüche als Mail zugeschickt, als mp3 Attachment, plus eine nicht ganz treffsichere Spracherkennung als Text, aber das nur nebenbei. Das hat prima geklappt.

Kürzlich habe ich diese VM noch ein bisschen gepimpt, und das ist auch der Grund für diesem Blogeintrag, damit ich mir merken kann, was ich gemacht habe.

Ein Problem, das ich immer wieder mit whatsapp hatte, ist nämlich, dass ich nicht zuverlässig in einem chat zurückscrollen konnte. Ich habe durch Maus-Dragging (bzw. Touchpad) das Bild nach unten gezogen, um zurückzublättern, aber an manchen Stellen, meistens wenn jemand ein Bild oder video gepostet hat, ist es immer wieder ganz nach unten gehüpft, ich bin also an ältere Dialoge nicht mehr rangekommen. Dachte schon, es liegt daran, dass ich den “Finger” ja nicht ganz abgeben kann sondern den Mauszeiger ungedrückt immer wieder nach unten ziehen muss, oder sonst an einer Dummheit meinerseits, aber inzwischen bin ich überzeugt, Whatsapp hat da einen Bug, wenn man es im Querformat benutzt, und meine VM kommt per default mit 1024x768 also quer daher.

Android-x86 hat eine Simulation für den Lagesensor, wenn man F9, F10, F11, F12 jeweils zweimal drückt, dann simuliert es angeblich Landscape (also wie ich es auf dem Monitor sehe), Kopfüber, Linksgedreht-Hochformat und Rechtsgedreht-Hochformat. Nur tut sich da nichts.

Die Lösung ist, dass das Displaydrehen nur möglich ist, wenn Android denkt, es hat einen Lagesensor. Das wird beim Booten in /etc/init.sh bestimmt. Die Funktion init_hal_sensors prüft auf diverse Gerätetypen oder Hardwaremerkmale, und setzt has_sensors entspfrechend true oder false. Also habe ich in dem default-Fall

	*)
		has_sensors=false

false durch true ersetzt.

Und siehe da, nach dem nächsten Neustart kippt ein F11 F11 Doppeltipper das Bild nach links, und F9 F9 wieder aufrecht. Und im Hochformat wischt sich’s in Whatsapp so, wie man es erwartet, ohne diese nervigen Sprünge. (Ich dachte erst, ich brauche eine App zum drehen, aber nachdem ich das mit den Funktionstasten gefunden hab, hab ich die wieder deinstalliert.)

Wo ich schon dabei bin, mein Laptop hat ja 1920x1080 (die Zeiten, wo man Laptops mit 16:10 Display, also 1920x1200, bekommen hat, sind ja leider weitgehend vorbei, das wär mir lieber), da sind 1024x768 für das Android-Fenster schon unnötig klein.

Auch hier ist /etc/init.sh die relevante Datei. In der Funktion init_uvesafb habe ich die Auflösung als default-Fall eingetragen:

	*)
	### ke 20201210 always set 1600x900
		UVESA_MODE=${UVESA_MODE:-1600x900}
		;;

aber hoppla, nach Reboot bekomme ich scrollbars und in Machine/Session Information sehe ich, dass der Videomode 1600x1200 ist.

Die Lösung: in meinem Linux muss ich den mode noch in der VirtualBox hinzufügen (ich habe dazu vorsichtshalber die VM gestoppt und das GUI geschlossen):

 VBoxManage setextradata Android-x86 "CustomVideoMode2" 1600x900x32

Jetzt klappt es, wie ich es wollte.