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).