Wednesday, March 8, 2017
Communicating Linux Chroot to Android
Communicating Linux Chroot to Android
The technique of installing a full Linux distro on your Android phone has been around for a long time. Ive used it in the past, but for a while didnt have a phone with a physical keyboard, which made it less useful. Now that I have CM7.1 on my G2 Ive installed it again. Im actually using an updated prepackaged version of Ubuntu, which has been fantastic.
However, generally speaking you can run the command line stuff and have it manipulate stuff on the filesystem, but the stuff you run in Linux dont interact with Android. Poking around the other day I noticed that SL4A, the Android scripting system has a server mode. Normally the scripts run by SL4A communicate with a generic RPC service which hooks the interpreters back into the Android system. Theres also a mode to just startup the RPC service and bind it to the loopback port or a public interface. And it talks JSON!
So, theoretically, I should be able to startup a SL4A server, run scripts in the Linux environment, and they can send messages to the outside Android system. I needed to test it out of course. If you have SL4A installed you select View from the top level menu, then Interpreters, and then Start Server from the menu there, and select Private from the context menu that pops up. There should now be a SL4A entry in the dropdown notification area, if you tap on that you can see the running server and itll tell you the port. Or, you could just get it from the command line, since thats where were going next.
Login via ADB or terminal, or however you prefer. Swap over to Linux, or mount up the unionfs stuff if youre doing it Sauriks way. And then you can use anything that can connect to a TCP socket and emit some JSON to send messages. I used netcat for the simplest example:
echo {id:1,method:makeToast,params:["The Great HooDoo ..."]} | nc 127.0.0.1 38804
And tada! The message shows up on my device:
Really hacky thing to do right now, but its interesting in that it would potentially let that stuff running as Linux commands to interact with the rest of the system. Even just being able to deliver local notifications so that you know to check back on something running in terminal to see updates is pretty cool.
Available link for download
Labels:
android,
chroot,
communicating,
linux,
to