I was wondering, is there a tool that I could run on Ubuntu Desktop, and be connected to an Ubuntu Touch device through a remote desktop (or remote display) application, such that mouse clicks are also propagated as taps on the device (and also, copy/paste of text)?

Basically, if Ubuntu Touch used X11, then I could have used vinaigre or xvnc4viewer on Ubuntu Desktop as VNC clients, and Vino as VNC server on the device - however, Ubuntu Touch uses Mir, and I cannot really find any information about remote desktop/display via Mir.

So, is there anything like this out there?

1 Answer 1


Well, there is a partial solution - in the sense of you can view the screen, but not control it from the mouse. I noticed it by running phablet-screenshot in debug mode, which reports that it uses a program mirscreencast on the phone.

There is a bit more about it in https://wiki.ubuntu.com/Touch/ScreenRecording, however, the most convenient command line I found on ... Youtube:

Realtime screencasting from Ubuntu Phone - mirscreencast to computer desktop in real time. - YouTube

Starting transmission (on device):

mirscreencast -m /run/mir_socket --stdout --cap-interval 1 -s 270 480 | gzip -c | nc 1234  

Receiving transmission (on desktop PC):

nc -l -p 1234 | gzip -dc | mplayer -demuxer rawvideo -rawvideo w=270:h=480:format=rgba -

Also, there is https://github.com/ycheng/mir-vnc-server - kinda experimental, I managed to get it to compile on 14.04 phone and run, and can connect through a VNC client, but I cannot get a realtime update of screen (only the first frame is shown, and no mouse is updated); here are my notes - unfortunately, not totally complete, but gives an idea:

# in 64-bit Ubuntu 14.04:
# (/path/to/docker is general storage dir)
git clone https://github.com/ycheng/mir-vnc-server.git /path/to/docker/mir-vnc-server_git
sudo docker pull z3ntu/ubuntu-touch-build-env
sudo service docker start
sudo docker run -vit /path/to/docker/:/var/ubuntu_touch z3ntu/ubuntu-touch-build-env /bin/bash

sudo apt-get install gcc-arm-linux-gnueabi binutils-arm-linux-gnueabi
sudo apt-get install g++-arm-linux-gnueabi
sudo apt-get install g++-arm-linux-gnueabihf
sudo apt-get install libvncserver-dev # else dummyvncserver.c:3:21: fatal error: rfb/rfb.h: No such file or directory
sudo ln -s /usr/include/x86_64-linux-gnu/zconf.h /usr/include/  # else /usr/include/zlib.h:34:19: fatal error: zconf.h: No such file or directory
sudo apt-get install libmirclient-dev # else fatal error: mir_toolkit/mir_client_library.h: No such file or directory
sudo apt-get install libgles2-mesa-dev # else fatal error: EGL/egl.h: No such file or directory

# because of ..../arm-linux-gnueabi/bin/ld: cannot find -lvncserver:
apt-get source libvncserver0

apt-get source zlib1g
cd zlib-1.2.8.dfsg/
CC=arm-linux-gnueabi-gcc make
# should get: ./libz.so.1.2.8: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, ...
cp -a *.so* /path/to/docker/libvncserver-0.9.9+dfsg/
cd ..

cd libvncserver-0.9.9+dfsg
automake --add-missing
# ld: cannot find -lgcrypt, -lgnutls, -lws2_32; so:
# in configure, comment out 'LIBS="$LIBS -lws2_32"', and then:
LD_LIBRARY_PATH=${PWD} ./configure --host=arm-linux-gnueabi --without-gcrypt --without-gnutls
cd libvncserver/
# should get: libvncserver/.libs/libvncserver.so.0.0.0: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, ...
cp libvncserver/.libs/* /path/to/docker/mir-vnc-server_git/

cd /path/to/docker/mir-vnc-server_git/
LD_LIBRARY_PATH=${PWD} CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabihf-g++ make

# here got stuck, and went on phone instead:
# http://askubuntu.com/questions/600065/consequences-of-using-apt-get-in-ubuntu-touch
# phablet-config writable-image
# more-less repeated the procedure above, but on the phone - possibly with some changes in Makefile and/or source files (unfortunately, lost)
# final linking command for executable had to be issued manually, it was:
g++ mirvncserver.o -o mirvncserver -L/usr/lib/arm-linux-gnueabihf -lpthread -lmircommon -lmirclient -lmirprotobuf -lEGL -lboost_program_options -lxcb-glx -lGLESv2 -lmirserver -lvncserver

# run like this - in a phone terminal shell:
# -s 270 480: WARNING: Width (270) is not a multiple of 4. VncViewer has problems with that.
./mirvncserver -m /run/mir_socket --cap-interval 2 -s 268 480

# then on desktop - use the IP address of the phone on the local network:
xvnc4viewer 192.168.XXX.YYY

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.