[Atrix 4G Android Development] agentdr8:
While this may not be something that most people may want to do, it's something that I wanted to figure out here at work since I have a tri-monitor setup and wanted to use my existing keyboard & mouse on my Atrix's webtop without having to get the HD dock and use a physical KVM. Another obstacle to overcome was the fact that my linux workstation (main machine) is on a separate, wired network from my Atrix, which is connected via a 3G/4G MiFi device. You'll want to make sure you're rooted in both android OS and the webtop OS. You'll also need lxterminal working in the webtop.

So you'll need to get a couple of Jaunty packages compiled for arm:

x11vnc

libvncserver0

Once downloaded, you'll need to get them onto the /osh partition for installation. I do this via adb:

adb push x11vncfiles/ /sdcard/tmp/

adb shell

su

mkdir /osh/tmp

cd /sdcard/tmp

cp *.deb /osh/tmp

sudo -H -u adas bash (switch you to adas user in webtop)

sudo /bin/bash (switches you to root in webtop; you may need to use sulogin)

chroot /osh

cd /tmp

dpkg -i *.deb

exit

Now on to testing...

If you are like me and need to be able to get to the webtop but it isn't on the same network that your desktop/laptop machine is on, you can use the USB cable and adb forward to handle the connectivity. A positive side-effect of this limitation is that x11vnc only needs to listen on the lo (localhost) interface, which helps keep that connection more secure.

LOCAL USB CONNECTION

In lxterminal in the webtop, run the following (as adas) for testing:

export DISPLAY=:0.0

x11vnc -noncache -nolookup -localhost

On your desktop/laptop, run the following:

adb forward tcp:5900 tcp:5900

Using a vnc viewing application (vncviewer, tightvnc, etc), connect to localhost:5900

If all worked out, you should see a remote view of your webtop

REMOTE WIFI CONNECTION

If your Atrix and desktop/laptop are on the same network (or can reach each other via routing), you can do the following steps to test:

In lxterminal in the webtop, run the following (as adas) for testing:

export DISPLAY=:0.0

ifconfig (notate the IP address for eth0)

x11vnc -noncache -nolookup -listen ip_addr_from_prev_step

On your desktop/laptop, run the following:

Using a vnc viewing application (vncviewer, tightvnc, etc), connect to ip_addr_of_atrix:5900

If all worked out, you should see a remote view of your webtop

AUTOMATING THE PROCESS

In order for the x11vnc process to spawn automatically, we need to add it to the lxsession autostart file. This file is read when lxsession starts up and in turn fires off whatever scripts are listed in there. The file is located at:

/etc/xdg/lxsession/LXDE/autostart

By default, the only thing listed in that file is start-oshwt-1.sh, which is a script located at /usr/local/bin. So to get x11vnc working, we add an additional entry into that file:

(as root in webtop): echo start-x11vnc.sh >> /etc/xdg/lxsession/LXDE/autostart

Then we need to create that script in /usr/local/bin:

vi /usr/local/bin/start-x11vnc.sh

#!/bin/sh

export DISPLAY=:0.0

cd ~
nohup /usr/bin/x11vnc -usepw -forever -nossl -logappend /home/adas/.vnc/x11vnc.log -noncache -nolookup -localhost -nofb -bg

(If you're using it on the same network, replace -localhost with -listen ip_addr like the example above)

Save that file, and make it executable:

chmod +x /usr/local/bin/start-x11vnc.sh

Also, we need to modify Tomoyo to allow it to run that script. Edit /etc/tomoyo/domain_policy.conf and around line 1440:

<kernel> /osh/usr/bin/lxsession

use_profile 3

Change the 3 to a 2.

Add the following lines to that section:

allow_execute /osh/usr/bin/x11vnc
allow_execute /osh/usr/local/bin/start-x11vnc.sh

FINAL TOUCHES

I wanted to be able to just move my mouse cursor to the right edge of my desktop machine and have it magiaclly jump to the atrix monitor. To do this, I use a piece of software called x2vnc. If you're using Windows, there's also a package called Win2VNC that will accomplish the same thing. With either software, you run the client (in my case, it's x2vnc) and tell it which direction your vnc server is located at. So to the right of my linux desktop would be east, so I run x2vnc like so:

x2vnc -east localhost:5900

And this connects me to the x11vnc instance running on the atrix. By moving my mouse to the right edge of my main screen, the cursor now appears on the webtop, and I'm able to mouse around and type using my desktop's keyboard.

USING X2X INSTEAD OF X2VNC/WIN2VNC

For anyone that would rather not install any additional packages, and are already running a local X server (XFree/Xorg/Cygwin) you can use x2x to directly connect to the X server running on the Atrix. In order to do this, you'd need to modify /etc/init.d/startXServer.sh and remove the -nolisten tcp from the startx lines and reboot. Then X will listen on port 6000 (for the first display) and that can be used via adb forward on your host machine. The keyboard entry still doesn't work in the Mobile View for some reason...still investigating this. But the mouse seems to function a lot better over native X; selecting text and dragging windows works fine, as does copy & paste.

The top section still applies (you'll need double-root), but the changes are rather minimal:

adb shell
su
sudo -H -u adas bash
sudo /bin/bash
vi /etc/init.d/startXServer.sh

At the bottom of this script you'll find the lines:

sudo -u adas -i /usr/bin/startx -- -nolisten tcp -layout HDMI vt2 &
else
sudo -u adas -i /usr/bin/startx /usr/local/bin/xnull -- -nolisten tcp -layout HDMI vt2 &

Remove the -nolisten tcp from both of those lines. Save that file.

You'll also need a method of giving your localhost access via xhost. This has to run under the user context that has the primary display (adas). Since I went to this method after the x11vnc method, I already have the /usr/local/bin/start-x11vnc.sh script setup. I modified this to not run x11vnc but to instead disable access controls for X connections:

cat /usr/local/bin/start-x11vnc.sh
#!/bin/sh export DISPLAY=:0.0
xhost +

With those set, reboot your phone. When ready, relaunch the webtop and either fire up x2x directly or via forwarding over adb like so:

adb forward tcp:6001 tcp:6000

x2x -east -to localhost:1 &

You should now be able to mouse around on your webtop. Typing in terminal, browser, etc works, but Mobile View is still not working. I think I have it narrowed down to that app (aiw) not responding to XKEYBOARD events. I'll know more once I get my usb hub working and can plug in a keyboard.