I have been toying around with idea of having real Linux stack (X11 and friends) on Nook Color. While this seems like a silly thing to do, it does allow me to use x2x and transfer keyboard and mouse from my laptop to tablet which is handy. If also allows me to run X11 applications on tablet screen using DISPLAY=nook.lan:0. I was fortunate enough to find blog post how to run Linux framebuffer X server on Android but I wanted to use touchscreen so I decided to write my own xorg.conf (this brings back memories...).
To get full-blown Debian-based distribution on your Android take a look at BotBrew Basil. It's Emdebian based distribution which will setup mount points and various other stuff so you don't have to do that manually. Since it's Debian based, you are not limited to Emdebian packages -- you can (and will have to) add normal sid:
(BotBrew)root@localhost:/# cat /etc/apt/sources.list.d/sid.list deb [arch=armel] http://ftp.debian.org/debian sid main contrib non-freeIf you want to know more about Emdebian hop over to DebConf 12: Integrating Emdebian into Debian [video].
With all this prepared, we are ready to shut down Android stack:
adb shell setprop ctl.stop media adb shell setprop ctl.stop zygote adb shell setprop ctl.stop surfaceflinger adb shell setprop ctl.stop drmNext step is installation of required packages:
dpavlin@t61p:~$ adb shell root@android:/ # TERM=xterm chroot /data/botbrew-basil/ /bin/bash --login (BotBrew)root@localhost:/# apt-get install xserver-xorg-video-fbdev xserver-xorg-input-evdev \ xserver-xorg-input-multitouch x11-xserver-utils xinit \ matchbox matchbox-keyboard xtermI decided to use matchbox, mostly becuase it's only window manager which comes with on-screen keyboard which is useful on touch screen device.
After installation you will need to setup X symlink and create .xinitrc:
root@android:/ # ln -s /usr/bin/Xorg /usr/bin/X root@android:/ # cat ~/.xinitrc ( sleep 1 ; matchbox-keyboard -o portrait ) & xhost 192.168.1.61 matchbox-sessionFinally, you need to create xorg.conf:
Section "ServerLayout" Identifier "Layout0" Screen "Screen0" InputDevice "cyttsp-i2c" "CorePointer" InputDevice "gpio-keys" "CoreKeyboard" InputDevice "twl4030-keypad" "CoreKeyboard" EndSection Section "InputDevice" Identifier "gpio-keys" Driver "evdev" Option "Device" "/dev/input/event0" # code 102 (KEY_HOME) # code 116 (KEY_POWER) EndSection Section "InputDevice" Identifier "twl4030-keypad" Driver "evdev" Option "Device" "/dev/input/event1" # code 114 (KEY_VOLUMEDOWN) # code 115 (KEY_VOLUMEUP) EndSection Section "InputDevice" Identifier "cyttsp-i2c" Driver "multitouch" Option "Device" "/dev/input/event2" # mouse should move as fast as finger and not faster Option "AccelerationScheme" "none" # evdev has it, multitouch doesn't so it behaves like touchpad # Option "IgnoreRelativeAxes" "True" EndSection Section "Device" Identifier "Card0" Driver "fbdev" Option "fbdev" "/dev/graphics/fb0" # rotate screen to be in sync with touchpad orientation Option "Rotate" "CCW" # CW=90 UD=180 CCW=270 EndSection Section "Screen" Identifier "Screen0" Device "Card0" EndSectionThis will map all hardware keys and use mutitouch driver for screen. To make it work, I used evtest package which allows you to see events from input devices so you will know which device produce keyboard events and which produce multitouch events. To be honest, this solution isn't prefect, because screen behaves like touchpad, so you can't just point to screen and expect your cursor to just to that position.
Following video shows X server in action.
This is simple unaccelerated frame buffer. This makes performance less then desirable. There are a few implementations of OMAP xorg server:
- xf86-video-omapfb uses DSS kernel support which seems to be part of CM kernel, so this might be good next thing to try out
- xf86-video-omap is newer implementation, but this requires 3.3 kernel and is not yet stable.