Star date: 2014.137
Parts of this guide include rooting your device, flashing custom kernels, and changing config files that require root access. Any of these things could break your device and/or void the warranty. I ACCEPT RESPONSIBILITY FOR NOTHING. If you want to actually follow my process then do so at your own risk. Also note that in order to get some things to work I had to disable some security features that are there to protect you (ie: secure password storage was disabled and SELinux mode is changed to permissive).
Lately I've been looking for a laptop with the following attributes:
Pretty much the only factor I don't care about is raw computing power. These requirements disqualify almost every laptop in existence so I had to think outside the box a little bit and then I realized that there was one device that does meet the critera: the 12.2" Samsung Galaxy Note Pro. If you add on the Logitech PRO keyboard case then the cost comes to about $830 and you get a computer with a 2560x1600 screen, no fans, 12 hour battery life, first party linux driver support, full sized keyboard, and all the good stuff that comes with Android. What you do not get out of the box is software for getting real work done like you would on a desktop OS. The rest of this article is about solving that problem.
The goal is to get Ubuntu running alongside Android without any virtual machines or dual booting (not that I would be able to dual boot even if I wanted to). I definitely do NOT want to run X server inside Android because it is super slow (on Android I mean) and not very tablet friendly. I'm just going for a rock solid command line environment. If I exclusively use pure Android apps and Ubuntu console apps then I will have no need for a pesky mouse. My console tools of choice are tmux, vim, and tig (among others of course). If you do want to run X then there's nothing stopping you. You'll just need to get a VNC viewer app (it's mentioned in the guide that comes with Complete Linux Installer).
You can't mount a loop device and chroot into it without root access, so that's the first thing you'll want to do. Chainfire posted a version of CF AutoRoot that works on the SM-P900 and SM-P905 on xda-developers and you can get it here. I tried many versions of Odin when doing this and the only one that worked was 3.07 for some reason. It also didn't work the first time and I had to do some combination of cache wipes and reboots before it finally worked.
Sadly, getting root access to your device does not actually let you do anything you want. This is because newer
Android devices have strict SELinux policies set to "enforcing" mode. You will not be able to run the linux
installer unless it is in "permissive" mode. There are apps in the app store that toggle SELinux modes (or you
can use the setenforce terminal command) but on this device Samsung has disabled that functionality. If you try
executing setenforce 0
in a terminal it just does nothing. The only way to fix this is to get a custom kernel.
There doesn't seem to be a ton of custom development going on for this device and I wasn't able to find any
permissive kernels so I had to compile my own. My strategy was to make the absolute minimum changes to configuration
for the sake of stability. All I wound up doing was changing a parameter in the SELinux Makefile that toggles
whether or not it will force SELinux to Enforcing mode. This means that by default it is still enforcing, but it
at least allows you to change it to permissive.
If you're using the North American version of the SM-P900 (wifi version) then you can download the kernel that I already compiled here. If you are using a different hardware version then you'll have to compile the kernel yourself. I wrote this article describing my process which would likely work for other versions of the device (or possibly entirely different Samsung devices). The tar file I linked can be flashed with Odin (I used version 3.07). The article mentioned above also has a section at the bottom that describes how to actually flash it using Odin if you haven't done that before.
The only problem with this kernel is that it seems to have some screwy effects on wifi. I found that on reboot
it would not reconnect automatically, it was very slow to establish a connection, and if I tried to switch from
one wifi network to another it would just stop working entirely. It seems that this is not actually a wifi driver
issue (thank god) but actually some problem related to secure storage of wifi credentials. If you simply open up
/system/build.prop
and change ro.securestorage.support
from true
to false
and then reboot it seems to work
normally. I know that some Samsung devices have issues with external storage on custom kernels but I have not tested
that at all. On my device /system
is mounted in readonly mode so I had to remount it first:
su
mount -o remount,rw /system
vi /system/build.prop # <-- or whatever is your preferred method of editing text files
Next time you reboot /system
will be back to readonly mode.
There are two problems using the keyboard case:
It turns out this has nothing to do with the Logitech PRO keyboard, it's actually a problem with the Samsung virtual keyboard. If you just download the default google keyboard from Google Play and make it your default then the issue goes away. This was a little surprising to learn because I assumed that the virtual keyboard software is not doing anything when you use a physical keyboard. Apparently that is not the case.
This was pretty easy using this very helpful guide by Isaac Su. It was meant for the Asus Transformer TF-101 but almost exactly the same process works the Note Pro. I wasn't exactly sure which of the many config files needed to be changed, so I just used a command to change them all:
# If not already done then get root access and disable selinux
su
setenforce 0
# remount file system as read/write
mount -o remount,rw /system
# replace CAPS_LOCK with ESCAPE
find /system/usr/keylayout/* -type f -exec sed -i 's/CAPS_LOCK/ESCAPE/g' {} \;
Now reboot the device and the keylayout should change (/system
will also revert to read-only which is a good thing).
There are other methods, but I prefer to just get Complete Linux Installer from Google Play. When you start it up you can go to instructions and it has a bunch of images you can download. I used the ubuntu 13.10 core image and then resized it to 10GB using this tutorial. I don't really like Terminal Emulator which is what Complete Linux Installer will automatically use when you click launch, so instead I open a local (ie: non-SSH) session with the app JuiceSSH and run the following commands:
su
setenforce 0
sh /data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh /sdcard/ubuntu.img
Make sure to replace ubuntu.img
with the actual name of your image file. If all goes well you'll be prompted for
a few settings and then you're in! Alternatively, if you want an easier way to start it up you can just click the
launch button in Complete Linux Installer and then SSH to localhost with JuiceSSH or whatever is you're preferred
terminal client.