|Tony Garnock-Jones 8382a23063|
SqueakPhone: Running Squeak Smalltalk as the UI for a PostmarketOS-based Cellphone
Copyright ©2020–2022 Tony Garnock-Jones.
SqueakPhone comes in two pieces: this is the
git-based portion, and there's another part
that lives in SqueakSource.
Setting up your local Unix account
LinuxIO package depends on being able to access
/dev/input/*, which means on Debian at
least that your user needs to be in the
input group. This applies not only for running the
image, but for building it too, even if you don't plan to develop with it on your local build
Loading the Smalltalk code into an existing image
You can work with most of the codebase without actually running it on a phone. (In fact, it also makes sense to transfer images back and forth between desktop VMs and the phone.)
The relevant packages to load into your Squeak image are:
Installer squeaksource project: 'Preserves'; install: 'Preserves'. Installer squeaksource project: 'TouchScrolling'; install: 'TouchScrolling'. Installer squeaksource project: 'TiledMaps'; install: 'TiledMaps'. Installer squeaksource project: 'SyndicatedActors'; install: 'BTree-Collections'; install: 'SyndicatedActors'. Installer squeaksource project: 'SqueakPhone'; install: 'LinuxIO'; install: 'SqueakPhone'.
Building/installing the system for on-phone use
Follow these steps after installing the base Synit system.
Check out the
git clone https://git.syndicate-lang.org/tonyg/squeak-phone
squeaker so that the
squeaker program is on
make dev. Eventually, a window should open with a transient Squeak image with a fully
loaded set of SqueakPhone packages.
If that worked, try
make images/current. Then, connect your phone, set up SSH to log in to
it, and run
This will use
rsync (which has to already have been installed with
apk add rsync on the
phone) to synchronise
syndicate-serverconfiguration responsible for defining and starting the Squeak synit service.
Notes on working with PostmarketOS
How to use pmbootstrap
pmbootstrap config device <new_device>
pmbootstrap config device pine64-pinephone pmbootstrap config device samsung-herolte pmbootstrap config device qemu-amd64
Building for Samsung Galaxy S7 (samsung-herolte):
pmbootstrap install --android-recovery-zip
Building for Pinephone (pine64-pinephone):
pmbootstrap install --sdcard BLOCKDEV
Building for qemu-amd64:
pmbootstrap install pmbootstrap qemu
How to install on Samsung Galaxy S7
Reboot holding power + home + volup to enter the recovery. Choose Advanced, ADB sideload.
pmbootstrap flasher --method adb sideload
How to use RNDIS to connect via ssh over USB
For pinephone, which does get a MAC address for the RNDIS device:
sudo ip a del 10.42.0.1/32 dev usb0 sudo ip a add 172.16.42.2/32 dev usb0 sudo ip r add 172.16.0.0/16 dev usb0 SSH_AUTH_SOCK= ssh firstname.lastname@example.org
... or, huh, just use DHCP to get an address from the phone! It turns out to work.
The equivalent for samsung-herolte is similar but requires inventing a MAC address and assigning it at the link layer:
sudo ip link set dev enx000000000000 address 12:12:12:12:12:12 sudo ip a add 172.16.42.2/32 dev enx000000000000 sudo ip r add 172.16.0.0/16 dev enx000000000000 SSH_AUTH_SOCK= ssh email@example.com
How to set up WiFi on a running instance
When you pick "none" UI, you get no nmcli or wpa_supplicant.
Pick "console". Then you get both.
sudo nmcli device wifi connect <SSID> password <PASSWORD> ifname wlan0