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:
😀
Awesome! Please check your inbox and confirm your email.
We'll email you our latest posts plus special past content. Change your settings any time.

Exposing properties with Graphene Django

The other missing guide

Arithmetic with JavaScript Arrays

A Astonishing Adventure

Freeing Disk Space with the PackageKit cache

Automatic updates gone wrong

Keeping Python projects secure on GitLab

Pinning projects to the very latest

Testing GraphQL with Graphene Django

The missing guide

Local Politicians Meet InfoSec - a Wordpress Disaster

The article that I didn't want to have to write

PGP for Every Email

Join us in our PGP journey

SELinux Concepts - but for humans

This is your SELinux dictionary!

A new way of writing Gtk+ applications

Introducing Pyract - my weekend hack

Stop Disabling SELinux: A Real-World guide

Be safe from software vulnerabilities AND run your webserver

Plotinus and the quest for searchable menus

The underdog challenges a 30 year old UI convention

DMARC Secured Your Email Identity, But See How it Ruined Mailing Lists

Why people aren't posting on your mailing list

How they track you: Email Service Provider Edition

A summary of how major email marketers track their emails

Blender for Hackers - 3D modeling is just like using VIM

A very brief introduction to Blender

Edge of the World - What Open-World Games Can Teach Us About Design

Spoiler: It's all about the illusions

When fictional worlds are an accurate representations of IoT security

Ok, a little dramatized. But still truthful.

How I Destroyed my Blog's Performance with CSS Background-Blend-Modes

Just because a browser has a feature doesn't mean you should use it

Help Us Answer: The Email Signup Popup - where is it from?

Who is behind the latest wave of popups?

6 Stunning Email SignUp Form Designs with Free HTML

I've spent way to much time on dribbble researching these!
G'day Mate, join us on IRC for good banter:
#Learnt on Freenode
See you there!