My WATCH runs GNU/Linux And It Is Amazing

5 Jan 2017
Lennart Poettering would love it!

In 2015, I found myself becoming a very independent smart-watch reviewer. Due to some lucky conditions, I ended up with a free LG Watch Urbane. It was very snazzy, but I just didn't get the point of smartwatches. One day in 2016, I forgot to put it on. From then on I realized that smartwatches were just a fad (for me at least), and this was a device I could experiment with.

How can I experiment with a smartwatch? Having tried (and failed) to run Ubuntu on another device (nexus 9), the obvious answer was to install GNU/Linux on it! It is an amazing piece of hardware with a stunning circular touch screen. Since I know how to write apps for GNU/Linux (it even runs a web browser!), I was excited by the possibilities.

Then I found Asteroid OS:

Asteroid OS Home Page
Hacking? I hope this isn't like _Surgeon Simulator_

3-2-1 FastBoot

The contributors to Asteroid OS have done an amazing job with the install process. If you know how to install Cyanogen (or whatever it is these days), you can install Asteroid OS. You just use fastboot and adb, like a regular Android phone.

The Asteroid OS image is a whopping 414 Mb. How massive! That lead me on a slight distraction. How does my tiny, cool-running little smartwatch compare older computers? Maybe the original iPhone?

SpeciPhone 1LG Watch Urbane
Thickness (mm)11.610.9
Water ResistancenoIP67 certified
CPU Core Countsingle corequad core
CPU Clock Speed412 HMz ARM 111.2 GHz Cortex A7
RAM128 MB512 MB
Battery1400 mAh410 mAh
Screen Resolution320x480320x320
Storage4/8/16 GB4 GB

Wow! More CPU and RAM than the original iPhone, almost as many pixels and just as much storage; all in a much smaller case. It's pretty crazy that the watch has any battery life - let alone a good days worth!

Back to reality, the download finished and it copied itself to my watch. Then I was ready to fastboot:

My watch in fastboot
The moment of truth!

Enter Asteroid - My 1st Wayland Device

Here's the sad thing; on my laptop, I still am running the bloated, legacy X11 display server. I had to because I was involved in maintaining an X11 desktop environment. But Asteroid OS is 100% Wayland only. And it works like a charm:

My watch in fastboot
Sweet Watchface - Timely

Even more amazingly, running on that tiny package of hardware is some live multitasking:

Systemd on my servers, laptop and watch???

This is what makes me happiest of all:

/ # systemctl status --no-pager
● bass
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Thu 1970-01-01 01:02:57 UTC; 46 years 11 months ago
   CGroup: /
           ├─user.slice
           │ └─user-1000.slice
           │   └─[email protected]
           │     ├─msyncd.service
           │     │ └─565 /usr/bin/invoker -G -o -s --type=qt5 /usr/bin/msyncd...
           │     ├─booster-qt5.service
           │     │ ├─548 /usr/libexec/mapplauncherd/booster-qt5 --systemd --b...
           │     │ ├─562 /usr/bin/msyncd
           │     │ └─584 booster [qt5]
           │     ├─dbus.service
           │     │ ├─537 /usr/bin/dbus-daemon --session --address=systemd: --...
           │     │ ├─576 /usr/libexec/dconf-service
           │     │ └─587 /usr/bin/profiled
           │     ├─asteroid-launcher.service
           │     │ ├─ 555 /usr/bin/lipstick -plugin evdevtouch:/dev/input/eve...
           │     │ ├─ 999 /usr/bin/invoker --single-instance --type=qtcompone...
           │     │ ├─1008 /usr/bin/invoker --single-instance --type=qtcompone...
           │     │ ├─1022 /usr/bin/invoker --single-instance --type=qtcompone...
           │     │ └─1036 /usr/bin/invoker --single-instance --type=qtcompone...
           │     ├─asteroid-btsyncd.service
           │     │ └─534 /usr/bin/asteroid-btsyncd
           │     ├─booster-generic.service
           │     │ ├─533 /usr/libexec/mapplauncherd/booster-generic --systemd...
           │     │ └─543 booster [generic]
           │     ├─statefs.service
           │     │ └─553 /usr/bin/statefs /run/user/1000/state -f -o allow_ot...
           │     ├─timed-qt5.service
           │     │ └─531 /usr/bin/timed-qt5 --systemd
           │     ├─booster-qtcomponents-qt5.service
           │     │ ├─ 530 /usr/libexec/mapplauncherd/booster-qtcomponents-qt5...
           │     │ ├─ 941 /usr/bin/asteroid-timer
           │     │ ├─1000 /usr/bin/asteroid-calculator
           │     │ ├─1009 /usr/bin/asteroid-weather
           │     │ ├─1023 /usr/bin/asteroid-stopwatch
           │     │ └─1037 booster [qtcomponents-qt5]
           │     └─init.scope
           │       ├─510 /lib/systemd/systemd --user
           │       └─511 (sd-pam)
           ├─system.slice
           │ ├─android-tools-adbd.service
           │ │ ├─1246 /usr/bin/adbd
           │ │ ├─1263 /bin/sh -
           │ │ └─1269 systemctl status --no-pager
           │ ├─bluetooth.service
           │ │ └─550 /usr/libexec/bluetooth/bluetoothd -E
           │ ├─busybox-syslog.service
           │ │ └─475 /sbin/syslogd -n
           │ ├─systemd-logind.service
           │ │ └─472 /lib/systemd/systemd-logind
           │ ├─connman.service
           │ │ └─470 /usr/sbin/connmand -n
           │ ├─dsme.service
           │ │ ├─469 /usr/sbin/dsme -v 4 -p /usr/lib/dsme/startup.so --system...
           │ │ └─471 /usr/sbin/dsme-server -v 4 -p /usr/lib/dsme/startup.so -...
           │ ├─dbus.service
           │ │ └─466 /usr/bin/dbus-daemon --system --address=systemd: --nofor...
           │ ├─busybox-klogd.service
           │ │ └─464 /sbin/klogd -n
           │ ├─statefs-system.service
           │ │ └─460 /usr/bin/statefs /run/state -f --system -o allow_other,d...
           │ ├─usb-moded.service
           │ │ └─449 /usr/sbin/usb_moded --systemd --force-syslog
           │ ├─mce.service
           │ │ └─448 /usr/sbin/mce --systemd
           │ ├─systemd-timesyncd.service
           │ │ └─247 /lib/systemd/systemd-timesyncd
           │ ├─android-init.service
           │ │ ├─238 /system/bin/init
           │ │ ├─248 /system/bin/logd
           │ │ └─252 /system/bin/servicemanager
           │ ├─systemd-udevd.service
           │ │ └─216 /lib/systemd/systemd-udevd
           │ ├─psplash.service
           │ │ └─190 /usr/bin/psplash --angle 0
           │ ├─systemd-journald.service
           │ │ └─185 /lib/systemd/systemd-journald
           │ └─system-serial\x2dgetty.slice
           │   └─[email protected]
           │     └─505 /sbin/agetty -8 -L ttyHSL0 115200 xterm
           └─init.scope
             └─1 /lib/systemd/systemd

It looks like a watch, it smells like a watch, but it runs like a normal computer. Wayland, systemd, polkit, dbus and friends look very friendly to hacking. Even Qt is better than android, but that's debatable.

My next project - run Gtk+ on the watch :)