The Mer Wiki now uses your Mer user account and password (create account on

Wayland Nemo VM Image

From Mer Wiki
Jump to: navigation, search



Hello guys :) It's faenil here,

I've been looking into making a Qt4-free, Wayland based i486 VM Nemomobile image... so that we can start porting core Nemo apps to Qt5 and, when all apps are ported to Qt5 harmattan components, start looking into QtQuickControls for Nemo's upcoming Glacier UI :)

Big thanks to Stskeeps and everyone who helped me in this project so far :)

Current status

---------- KNOWN ISSUES of Nemo VM here ----------

After few days of hacking, we have a Nemo Wayland image ready! \o/

It's very basic, it boots to a QML Wayland compositor and uses the work-in-progress Qt5 version of the current Nemo homescreen ;) It should be enough to proceed to the next step: porting core Nemo apps to Qt5/QtQuick2!

You can find the status of current Nemo apps ports on the Qt5 ports page!

We need help porting apps! Most of the apps are already using Harmattan QML components (, so the porting work shouldn't take a lot of time ;)

Please join us and give a hand! :)

  • YOU CAN HELP!! :)
  • YOU CAN HELP!! :)
  • YOU CAN HELP!! :) To know how, head to Qt5 ports page

If you want to help, please do not hesitate to come to #nemomobile (freenode IRC) and talk to me :) (nickname: faenil)

Setup Nemo Wayland VM

First of all, you need to create an image that you can use for your VM:

  • A working Mer SDK setup is required. If you have not installed Mer SDK yet, read Mer Platform SDK guide until the "Basic Tasks" section (excluded).
  • Start the SDK, and run (inside the SDK):
echo | sudo tee -a /etc/hosts

and then

sudo zypper ar mer-tools


sudo zypper install syslinux-extlinux
sudo zypper in -t pattern Mer-SB2-i486

sudo mic create raw --record-pkgs=name --pkgmgr=zypp --arch=i486 KS_FILE_NAME.ks --tokenmap=MER_RELEASE:latest,NEMO_RELEASE:latest,SSU_RELEASE_TYPE:rnd,FLAVOUR:devel

This will create a "mic-output" folder and it will write the image (a .raw file) inside that folder.

  • Run this command outside the SDK to convert the .raw to a .VDI VirtualBox disk image:
 VBoxManage convertfromraw ./mic-output/nemo-i486-vm-wayland-sda.raw  ./nemoWayland.vdi --format VDI

NOTE: YOU DON'T NEED THE "Finalizing the installation" step. Also, you don't have any .iso to set, instead go to

Settings->Storage->Sata Controller->Empty and then "Choose a virtual hard disk file" and select the .VDI you created earlier

NOTE: don't start the VM yet!

  • Now use this command to set the resolution (you can change the resolution, but have to keep 32 bits):
VBoxManage setextradata "NAME_OF_THE_VM" CustomVideoMode1 "480x854x32"

  • Now start the VM, and check that it boots. Currently, after the VM has finished booting you'll have a screen with black background and "Fingerterm" string on top left. That's the launcher, tapping on Fingerterm will open the terminal emulator, which currently only works in landscape, so it's a bit useless, but there's an almost ready QtQuick2 port of fingerterm, so you will have a working terminal very soon ;)
  • If you want to contribute to Nemo, you also need a working SB2 target, read the next section to know how to create and setup the needed stuff :)

Setup Wayland VM SB2 target

Once you have a working Nemo Wayland VM, you have to set up an SB2 target which is used to build packages from sourcecode. USE THIS .KS to create the SB2 target! To know how to do that, follow "Make your own target" and "Target setup" guides here [1], WITH A FEW EXCEPTIONS:

1) You can skip the mer-kickstarter commands (because you already have the .ks file)

2) When you get to the image creation command, use this instead (RUN THIS INSIDE MERSDK):

sudo mic create fs --record-pkgs=name -o /parentroot/srv/mer/targets/ --pkgmgr=zypp --arch=i486 KS_FILE_NAME.ks --tokenmap=MER_RELEASE:latest,NEMO_RELEASE:latest,SSU_RELEASE_TYPE:rnd,FLAVOUR:devel

3) and when you get to the sb2-init command in the tutorial, use this one instead:

sb2-init -L --sysroot=/ -C --sysroot=/ -m sdk-build -n -N TARGET_NAME /opt/cross/bin/i486-meego-linux-gnu-gcc


echo -n "i486-meego-linux" > etc/rpm/platform

then keep following the tutorial, and you'll end up with a working SB2 target setup in Mer SDK ;)

Qt4/Qt5 middleware matrix

Here you can see which Qt4 middleware has been replaced in the Wayland in Nemo, and what replaced it.

Qt4 package Qt5 package
commhistory-daemon nemo:devel has Qt5 (same name)
connman-qt connman-qt5
connman-qt-declarative connman-qt5-declarative
contactsd nemo:devel has Qt5 (same name)
contextkit Aard: "stays for now, we'll slowly replace the contextkit providers by native statefs plugins"
contextkit-plugin-cellular Same as contextkit
contextkit-plugin-connman Same as contextkit
contextkit-plugin-mce Same as contextkit
contextkit-plugin-upower Same as contextkit
kcalcore kcalcore-qt5 (mer:qt:devel)
libaccounts-qt libaccounts-qt5 (mer:qt:devel)
libcommhistory libcommhistory-qt5
libcommhistory-declarative libcommhistory-qt5-declarative
libcommhistory-tools libcommhistory-qt5-tools
libcontentaction libcontentaction-qt5
libdbus-qeventloop (part of libresourceqt)
libdeclarative-connectivity Qt5-qtdeclarative-*
libdeclarative-gallery Qt5-*
libdeclarative-location Qt5-*
libdeclarative-multimedia Qt5-*
libdeclarative-organizer Qt5-*
libdeclarative-systeminfo Qt5-*
libiodata libiodata-qt5
libmeegotouch GET RID OF IT?
libmeegotouch-l10n-en GET RID OF IT?
libmlocale libmlocale-qt5
libngf-qt libngf-qt5
libofono-qt libqofono-qt5
libqmfclient1 libqmfclient1-qt5
libqmfmessageserver1 libqmfmessageserver1-qt5
libqtconnectivity1 Qt5-*
libqtcontacts1 Qt5-*
libqtcore4 Qt5-*
libqtdbus4 Qt5-*
libqtdeclarative4 Qt5-*
libqtdeclarative4-folderlistmodel Qt5-*
libqtdesigner4 Qt5-*
libqtgallery1 Qt5-*
libqtgui4 Qt5-*
libqtlocation1 Qt5-*
libqtmultimediakit1 Qt5-*
libqtnetwork4 Qt5-*
libqtopengl4 Qt5-*
libqtorganizer1 Qt5-*
libqtscript4 Qt5-*
libqtsensors1 Qt5-*
libqtserviceframework1 Qt5-*
libqtsparql Qt5-*
libqtsparql-tracker Qt5-*
libqtsparql-tracker-direct Qt5-*
libqtsql4 Qt5-*
libqtsql4-sqlite Qt5-*
libqtsvg4 Qt5-*
libqtsysteminfo1 Qt5-*
libqttest4 Qt5-*
libqtversit1 Qt5-*
libqtversitorganizer1 Qt5-*
libqtwebkit4 Qt5-*
libqtwebkit-qmlwebkitplugin Qt5-*
libqtxml4 Qt5-*
libqtxmlpatterns4 Qt5-*
libresourceqt libresourceqt-qt5
libsignon-glib required for the telepathy-accounts bridge
libsignon-qt libsignon-qt5
lipstick lipstick-qt5
lipstick-colorful-home lipstick-colorful-home-qt5
lipstick-tools lipstick-qt5-tools
maliit-qt4 maliit-framework-*
mapplauncherd-booster-qtcomponents mapplauncherd-booster-qtcomponents-qt5
mapplauncherd-qt mapplauncherd-qt5
meegotouch-compositor GET RID OF IT?
meegotouch-compositor-gestures GET RID OF IT?
meegotouch-demos GET RID OF IT?
meegotouch-demos-l10n GET RID OF IT?
meegotouch-systemui GET RID OF IT?
meegotouch-theme GET RID OF IT?
mkcal mkcal-qt5
mlite mlite-qt5
mthemedaemon GET RID OF IT?
nemo-qml-plugin-accounts nemo-qml-plugin-accounts-qt5
nemo-qml-plugin-configuration nemo-qml-plugin-configuration-qt5
nemo-qml-plugin-contacts nemo-qml-plugin-contacts-qt5
nemo-qml-plugin-contacts-tools nemo-qml-plugin-contacts-qt5-tools
nemo-qml-plugin-contextkit nemo-qml-plugin-contextkit-qt5
nemo-qml-plugin-dbus nemo-qml-plugin-dbus-qt5
nemo-qml-plugin-email nemo-qml-plugin-email-qt5
nemo-qml-plugin-folderlistmodel PORTED BUT NEED Qt5 PACKAGING
nemo-qml-plugin-messages-internal nemo-qml-plugin-messages-internal-qt5
nemo-qml-plugin-signon nemo-qml-plugin-signon-qt5
nemo-qml-plugin-systemsettings NO Qt5 PORT YET
nemo-qml-plugin-thumbnailer nemo-qml-plugin-thumbnailer-qt5
nemo-qml-plugin-time nemo-qml-plugin-time-qt5
PackageKit-qt PackageKit-Qt5
qca GET RID OF IT? Only used by meepasswords
qca-ossl GET RID OF IT? Only used by meepasswords
qjson GET RID OF IT? (should be included in Qt5?)
qmsystem qmsystem-qt5
qt-components qt-components-qt5
sensorfw sensorfw-qt5
sensorfw-configs same sensorfw-qt5 package?
signon big package providing signon-daemon and libsignon, ported to qt5
statefs-contextkit-provider compatibility layer, exposing statefs via contextkit API
statefs-contextkit-subscriber-qt4 bridge to load qt4 contextkit providers into statefs, and provide them to qt5 applications via statefs interface
telepathy-accounts-signon telepathy-accounts bridge
telepathy-qt4 telepathy-qt5
timed timed-qt5
tracker Stays. NO Qt5 PORT AT THE MOMENT
tracker-utils Stays. NO Qt5 PORT AT THE MOMENT
voicecall voicecall-qt5
voicecall-ui-reference GET RID OF IT?
Personal tools