The ODROID-U2 is an ARM development board with a quad-core Exynos CPU and 2GB of RAM that I’ve been using since early 2013 to do software development of various kinds. Despite its powerful GPU, I run it headless and access it (much more conveniently, it must be said) via VNC.

I run an ultra-minimalist, extra-light desktop environment on it using openbox, fbpanel, pcmanfm and lxterminal– it’s the exact same environment that I use inside my Vagrant boxes, and it has served me well over the years.

The machine is fast enough to run NetBeans, Chromium and my usual toolset, and I take advantage of a little-known feature in the vnc4server package to resize the desktop according to what client device I’m using (ranging from 1024x768 from an iPad mini or phone to full-blown 1920x1080 from a desktop PC).

Resizing the display

You need to launch vnc4server with multiple --geometry options, like so:

vncserver -depth 16 --geometry 1024x768 --geometry 1280x720 --geometry 1280x800 --geometry 1600x1200 --geometry 1920x1080 --geometry 2048x1536

…or put those resolutions in your .vnc/config:

-randr 1024x768,1280x720,1280x800,1280x1024,1600x1200,1920x1080,2048x1536

Those resolutions correspond to the various “thin clients” I use to get stuff done on it: my iPad mini, an Android device, a MacBook Pro, a retina iPad (where I use 1600x1200 quite often), and a regular desktop PC. Whenever I switch clients, I use xrandr to switch resolutions to match the physical display (all the VNC clients I use seem to support this these days):

$ xrandr
 SZ:    Pixels          Physical       Refresh
 0   1024 x 768    ( 260mm x 195mm )   60  
*1   1280 x 800    ( 325mm x 203mm )   60  
 2   1600 x 1200   ( 406mm x 305mm )   60  
 3   1280 x 720    ( 325mm x 183mm )   60  
 4   1920 x 1080   ( 488mm x 274mm )  *60  
 5   2048 x 1536   ( 520mm x 390mm )   60  
Current rotation - normal
Current reflection - none
Rotations possible - normal 
Reflections possible - none
$ xrandr -s 4

I’ve recently reinstalled mine to run Ubuntu 14.04 off an 8GB EMMC with an 8GB Class 10 MicroSD Card for extra storage off /opt:

# cat /etc/fstab
UUID="1E66-94B1" /media/boot vfat defaults 0 0
/dev/mmcblk1p3  none    swap 0 0
UUID=074e71d6-ddce-47d5-b3e4-949ef0029619       /opt    ext4    defaults        0 0

One of the essential tweaks I do to any Linux system I have to deal with on a regular basis is to install the Infinality font rendering packages, which do away with all the nastiness usually associated with what passes for typography in X11:

Install base packages

apt-get -y update
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
apt-get -y dist-upgrade
apt-get -y install htop tmux vim rsync python-dev python-setuptools libev-dev 
apt-get -y install sqlite3 imagemagick bzip2 ttf-mscorefonts-installer
sudo fc-cache -f -v
sudo easy_install virtualenv

Set up Infinality for better font rendering

if [ ! -d /etc/fonts/infinality ]; then
    sudo apt-get install -y build-essential devscripts git-core debhelper
    sudo apt-get install -y docbook-to-man libx11-dev x11proto-core-dev quilt
    cd ~/Development
    git clone https://github.com/rcarmo/debian-infinality.git
    cd debian-infinality/freetype-infinality/
    cd ../fontconfig-infinality/
    cd ..
    sudo dpkg -i freetype-infinality/*.deb fontconfig-infinality/*.deb
    cd /etc/fonts/infinality
    sudo ./infctl.sh setstyle osx

See Also: