I've been playing with Termux, both on Chromebook (Eve), and my Samsung Galaxy S22 - pretty cool, though hit some issue with recent `bazel` - as newer versions try to access a `/dev` endpoint that's not available.
Quick fix, was to add `~/.bazelrc` this:
common --experimental_collect_system_network_usage=false
and then it works! Though sometimes I need to first `termux-chroot` and then it it handles cases, where some tooling expects `/usr/bin` and not `/mnt/data/com.termux/files/usr/bin`
On measurements it's a bit 2x, 3x slower than Crostini (Termina) on Chromebook, but being available (so far) on all my Android devices is just awesome!
And there exist X11 too!
I wish there would be backdoor for F-Droid in the future, though maybe not as it seems :(
very cool. termux has to be peak for unbridled nerddom, the new linux terminal in android 16 is really a pale shadow of it. you don't get access to anything non-virtual, not even the gpu (atleast, i couldn't get it to work.)
theres so much cool hardware on modern smartphones, with quite solid drivers by virtue of the (relatively stringent) android quality requirements, and its all locked away. video encoders, decoders, 3d accelerators, etc, but none of it is really accessible in a power-user kind of way.
some more thoughts...
the android development kit really is very heavy. compared to `gcc -o main main.cpp && ./main`, it is several orders of magnitude away.
the jetpack stuff and whatnot - the big android app shops probably do actually appreciate that stuff. but i wish the dev env 'scaled to zero' as they say, but in the sense of cognitive overload.
could it be time to move away from java, and shift towards everything being a native binary? we have the tools now to make it secure, and its not like phones get faster 'for free' anymore. it would also vastly simplify the developer experience.
You don't have to use Android. I've been using various GNU/Linux phones for the last 17 years, so being able to do `gcc -o main main.cpp && ./main` on a phone is just natural to me. Back in 2008, as a teenager, I could choose to spent my first earned money to get me either one of the first GNU/Linux phones on the market or the first Android phone, and I feel that as the time goes it only validates my decision.
What is your feedback in regards to battery? Android have been exhausted in development to optimize battery usage but I'm reading linux phones don't really care that much so you end up with a dead phone in less of a day.
Has a power user, what has your experience been on that topic?
I'd switch my phone to linux on a heartbeat because android apps seem compatible enough nowadays to run there too but battery is always the pressing limitation.
I'm using a Librem 5 and its battery life is good enough for me - it lasts pretty much exactly what's needed for me to get through a typical day, so I often get home with the battery almost but not entirely flat. When I know that I'm going to be using it more intensively or need it to last longer, I'll usually just put a spare battery into my backpack, but I rarely actually need to use it when these days you can just charge up in a train or tram.
That's not a universal property of these devices though - N900 that I used previously could easily last a few days.
I've been looking at Linux phones for a while, and now the latest 'sideloading' lockdown from Google has pushed me to seriously consider getting off Android. What phones do you use or recommend for someone who has a little Linux experience?
It is possible to write native code for Android using Native Development Kit. Typical NDK use would be to develop a library that is then called into by java code. But one can make whole app with it, 100% java-free:
> the android development kit really is very heavy. compared to `gcc -o main main.cpp && ./main`, it is several orders of magnitude away.
> the jetpack stuff and whatnot - the big android app shops probably do actually appreciate that stuff. but i wish the dev env 'scaled to zero' as they say, but in the sense of cognitive overload.
I tried to build a small binary that listens for events and launches/wakes an app to do some automation. But apparently there's no way to send Intents or Broadcasts from native code? So I need to boot a JVM in the binary if I want it to communicate with anything else on the system!
Of course, you can always communicate via stdio, but that's useless because everything in Android speaks Intents/Broadcasts. Native code can also do raw Binder calls, but nothing on the system speaks raw Binder.
>But apparently there's no way to send Intents or Broadcasts from native code? So I need to boot a JVM in the binary if I want it to communicate with anything else on the system!
There is "am" i think which can be invoked to do this.
However, Termux API exists, and is a nice package for calling other services. They have the scripts interface, which calls the actual app over a socket. Kinda inefficient, but at least the work is done.
EDIT: Thanks @yjftsjthsd-h and @detaro for your suggestions! I tried Telnet via tmux - it worked. Then I tried telnet directly, and it suddenly worked too. Turns out Arduino’s Telnet implementation is single-user only, and my dev machine’s reconnect loop kept the connection open; the working login just fooled me.
I don't have one set up to test, but dumb suggestion: What if you run it inside tmux on termux? Just thinking that tmux is essentially a second terminal emulator that might do better.
Note also you can use webrepl, which exposes MicroPython's REPL as a web page. It's not a real replacement for termux, but it is still quite useful- I often deploy ESP32s running Micropython around my workspace but they aren't connected to any serial terminal.
I'm trying to repurpose my Pixel 6a that I no longer use, as a Home Assistant Core main driver. I was hoping the author will talk a little bit about that.
I still haven't had the luck to have a fully working Home Assistant running inside (rooted) Termux.
Anyone succeeded to start `hass` and have it running without throwing errors?
If you have root, it is fairly trivial to run full-on arm64 Linux distro in chroot. That should fix most problems with linux software running in android.
There is also Linux Deploy[1] that automates the process of setting up chroot, ssh and even gui desktop (through framebuffer).
I've been playing with Termux, both on Chromebook (Eve), and my Samsung Galaxy S22 - pretty cool, though hit some issue with recent `bazel` - as newer versions try to access a `/dev` endpoint that's not available.
Quick fix, was to add `~/.bazelrc` this:
and then it works! Though sometimes I need to first `termux-chroot` and then it it handles cases, where some tooling expects `/usr/bin` and not `/mnt/data/com.termux/files/usr/bin`On measurements it's a bit 2x, 3x slower than Crostini (Termina) on Chromebook, but being available (so far) on all my Android devices is just awesome!
And there exist X11 too!
I wish there would be backdoor for F-Droid in the future, though maybe not as it seems :(
Cool article. Did anyone else check their screens for damage while reading?
very cool. termux has to be peak for unbridled nerddom, the new linux terminal in android 16 is really a pale shadow of it. you don't get access to anything non-virtual, not even the gpu (atleast, i couldn't get it to work.)
theres so much cool hardware on modern smartphones, with quite solid drivers by virtue of the (relatively stringent) android quality requirements, and its all locked away. video encoders, decoders, 3d accelerators, etc, but none of it is really accessible in a power-user kind of way.
some more thoughts...
the android development kit really is very heavy. compared to `gcc -o main main.cpp && ./main`, it is several orders of magnitude away.
the jetpack stuff and whatnot - the big android app shops probably do actually appreciate that stuff. but i wish the dev env 'scaled to zero' as they say, but in the sense of cognitive overload.
could it be time to move away from java, and shift towards everything being a native binary? we have the tools now to make it secure, and its not like phones get faster 'for free' anymore. it would also vastly simplify the developer experience.
You don't have to use Android. I've been using various GNU/Linux phones for the last 17 years, so being able to do `gcc -o main main.cpp && ./main` on a phone is just natural to me. Back in 2008, as a teenager, I could choose to spent my first earned money to get me either one of the first GNU/Linux phones on the market or the first Android phone, and I feel that as the time goes it only validates my decision.
What is your feedback in regards to battery? Android have been exhausted in development to optimize battery usage but I'm reading linux phones don't really care that much so you end up with a dead phone in less of a day.
Has a power user, what has your experience been on that topic?
I'd switch my phone to linux on a heartbeat because android apps seem compatible enough nowadays to run there too but battery is always the pressing limitation.
My thanks in advance.
I'm using a Librem 5 and its battery life is good enough for me - it lasts pretty much exactly what's needed for me to get through a typical day, so I often get home with the battery almost but not entirely flat. When I know that I'm going to be using it more intensively or need it to last longer, I'll usually just put a spare battery into my backpack, but I rarely actually need to use it when these days you can just charge up in a train or tram.
That's not a universal property of these devices though - N900 that I used previously could easily last a few days.
I've been looking at Linux phones for a while, and now the latest 'sideloading' lockdown from Google has pushed me to seriously consider getting off Android. What phones do you use or recommend for someone who has a little Linux experience?
It is possible to write native code for Android using Native Development Kit. Typical NDK use would be to develop a library that is then called into by java code. But one can make whole app with it, 100% java-free:
https://github.com/cnlohr/rawdrawandroid
> the android development kit really is very heavy. compared to `gcc -o main main.cpp && ./main`, it is several orders of magnitude away.
> the jetpack stuff and whatnot - the big android app shops probably do actually appreciate that stuff. but i wish the dev env 'scaled to zero' as they say, but in the sense of cognitive overload.
I tried to build a small binary that listens for events and launches/wakes an app to do some automation. But apparently there's no way to send Intents or Broadcasts from native code? So I need to boot a JVM in the binary if I want it to communicate with anything else on the system!
Of course, you can always communicate via stdio, but that's useless because everything in Android speaks Intents/Broadcasts. Native code can also do raw Binder calls, but nothing on the system speaks raw Binder.
>But apparently there's no way to send Intents or Broadcasts from native code? So I need to boot a JVM in the binary if I want it to communicate with anything else on the system!
There is "am" i think which can be invoked to do this.
However, Termux API exists, and is a nice package for calling other services. They have the scripts interface, which calls the actual app over a socket. Kinda inefficient, but at least the work is done.
If I telnet into an ESP32 via Termux, it doesn’t recognize \n. I haven’t found a solution yet. It works fine with other Linux consoles.
EDIT: Thanks @yjftsjthsd-h and @detaro for your suggestions! I tried Telnet via tmux - it worked. Then I tried telnet directly, and it suddenly worked too. Turns out Arduino’s Telnet implementation is single-user only, and my dev machine’s reconnect loop kept the connection open; the working login just fooled me.I don't have one set up to test, but dumb suggestion: What if you run it inside tmux on termux? Just thinking that tmux is essentially a second terminal emulator that might do better.
Telnet often uses "\r\0" instead, but it also can be configured with most clients.
If you like this stuff, I highly recommend you look at Samsung Galaxy phones. They come with DeX, which is a linux DE that you can use with a dock.
Technically a Linux DE by virtue of being an Android DE, but most definitely NOT a Linux DE for purposes of a discussion involving Termux.
Note also you can use webrepl, which exposes MicroPython's REPL as a web page. It's not a real replacement for termux, but it is still quite useful- I often deploy ESP32s running Micropython around my workspace but they aren't connected to any serial terminal.
I'm trying to repurpose my Pixel 6a that I no longer use, as a Home Assistant Core main driver. I was hoping the author will talk a little bit about that.
I still haven't had the luck to have a fully working Home Assistant running inside (rooted) Termux.
Anyone succeeded to start `hass` and have it running without throwing errors?
If you have root, it is fairly trivial to run full-on arm64 Linux distro in chroot. That should fix most problems with linux software running in android.
There is also Linux Deploy[1] that automates the process of setting up chroot, ssh and even gui desktop (through framebuffer).
[1] https://github.com/meefik/linuxdeploy