Blog
Want more like this?
Subscribe!

My WATCH runs GNU/Linux And It Is Amazing

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?

Spec iPhone 1 LG Watch Urbane
Thickness (mm) 11.6 10.9
Water Resistance no IP67 certified
CPU Core Count single core quad core
CPU Clock Speed 412 HMz ARM 11 1.2 GHz Cortex A7
RAM 128 MB 512 MB
Battery 1400 mAh 410 mAh
Screen Resolution 320x480 320x320
Storage 4/8/16 GB 4 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:

● 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
           │   └─user@1000.service
           │     ├─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
           │   └─serial-getty@ttyHSL0.service
           │     └─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 :)

Get More Great Content

The intersection of marketing, design and machine learning, delivered straight to your inbox:
We'll email you our latest posts plus special past content. Change your settings any time.