1) Download the ARM GNU/Linux cross-compile toolkit from: http://www.codesourcery.com/gnu_toolchains/arm/download.html Install according to the instructions there. 2) Install libvncserver: ./configure --host=arm-none-linux-gnueabi --without-pthread --prefix=/opt/android make sudo make install 3) Build a custom Android kernel using kbde.c, provided in the kernel directory of this project: Unpack linux-2.6.23-android-m3-rc20.tar.gz. cd kernel patch -p1 < ../android-vnc/kernel/linux-2.6.23-android-m3-rc20-kbde.patch adb pull /proc/config.gz . && gunzip config.gz && mv config .config make menuconfig [ ... enable KBDE under Drivers, Input device support, Keyboards ... ] CROSS_COMPILE=/opt/android/arm-2007q3/bin/arm-none-linux-gnueabi- make To boot the kernel: emulator -kernel arch/arm/boot/zImage For further reading, see: http://honeypod.blogspot.com/2007/12/compile-android-kernel-from-source.html 4) Build and install this project: ./configure --host=arm-none-linux-gnueabi --with-libvncserver=/opt/android make (NOTE: You can ignore the warning about gethostbyname being statically linked.) adb push src/fbvncserver /data adb shell /data/fbvncserver 5) Redirect Android ports: telnet localhost 5554 redir add tcp:5900:5901 (NOTE: The fbvncserver by default binds port 5901, not 5900! Android already has a VNC server running on port 5900, but it sucks.) 6) Connect from localhost: xvncviewer -noauto localhost (NOTE: Additional steps are required to connect externally, since Android's port redirection works only for the local interface).