Sailfish/ButterflyTouch

Work in progress. This is mostly inspired from the ExoPC tutorial, with adaptation for this hardware, and has been updated to use the Qt5/Wayland new SDK Alpha.

= Install Sailfish SDK Emulator on ButterflyTouch =

This page has instructions on how to install Sailfish SDK emulator on your Packard Bell Butterfly Touch.

It is a x86 (Intel SU4100 dual core x86_64) based laptop/tablet PC. It has a 11.6" resistive touch screen (1366x768). It uses a Intel GM45 Express Chipset.

USB key setup
VBoxManage internalcommands converttoraw ~/SailfishOS/emulator/sailfishos.vdi sailfish.raw sudo dd if=sailfish.raw of=/dev/sd* bs=4M sync
 * Extract root filesystem from emulator virtualbox image
 * Copy to flash key
 * Mount flash key
 * Edit /boot/extlinux/extlinux.conf to boot from sdb1 and add rootwait

Running on the ButterflyTouch

 * The following has been done with Ethernet cable plugged. Wifi activation could be added later on.
 * Place the USB key in ButteflyTouch
 * Boot, press F12 button to access boot device selection menu and select USB
 * Ctrl/Alt F2 - Login root/(no password)


 * sshd is already launched by default, but the root account needs a password to allow to connect to it [Edit : as user nemo is in the sudoers, it may not be needed, as nemo can do all this].
 * launch command "passwd", and set the password to nemo.

From now on, you can connect remotely to do the following (it allows copy/pasting the command from a browser and not typing by hand).

//width: _transpose ? screen.height : screen.width //height: _transpose ? screen.width : screen.height width: 1366 height: 768
 * Edit /usr/lib/qt5/qml/Sailfish/Silica/ApplicationWindow.qml

The original command don't work anymore, so edit the file manually : vim /etc/gconf/gconf.xml.mandatory/desktop/jolla/components/%gconf.xml and replace the angle "0" by "90".
 * Put the display in portrait mode.

The original command was: su nemo # to switch to nemo user gconftool-2 --set /desktop/jolla/components/screen_rotation_angle --type int 90


 * reboot the system, press F12 to select boot from USB, and then it should boot to sailfish, with the graphical interface showing.

Install to hard disk with double boot
This can be done after trying out the usb key (what I did), or directly without the USB key step (using the raw file of the Virtual machine). The following instruction are written from the usb key.

DISCLAIMER : Take care of what you are doing here, as you can erase a complete partition (maybe more) of your hard drive, or break the bootloader. Save your data first (I know I didn't, but don't do like me ! ;) ) and double check the command you are typing.

In my case, the usb key was /dev/sdb1, and the availlable partition on my hard drive /dev/sda5, change the number to what you have.

Boot the device under your favorite linux distribution (Fedora in my case), and run the command (change sdaX by your partitition number): sudo dd if=/dev/sdb1 of=/dev/sdaX bs=4M Then, for update grub2 configuration to add this to the boot menu: sudo cp /boot/grub2.grub.cfg /boot/grub2.grub.cfg.old # save the old config sudo grub2-mkconfig -o /boot/grub2.grub.cfg

It should display somewhere in the output: Found Mer release 0.2011 (Mer) on /dev/sdaX

Reboot, and select the Mer entry in the boot menu.

Working parts

 * Touchscreen
 * General sailfish interface
 * The silica component demo
 * HDMI output (I plugged it to a 24" screen and got a mirror of the tablet screen)
 * Sound (at least when a pull up menu is triggered)

Video of it running can be seen here : "Sailfish OS with Qt5/Wayland running on Packard Bell Butterfly Touch"

Known issues

 * If screen shut down (after a few seconds on the home screen), the only way to light it again is to type a key (shows command line), then touch the screen (show the graphical interface).

= Interface with QtCreator = QtCreator can be used to compile and send the program to a remote device, not only the emulator.

Change some rights on the device
As the process to deploy the file is not exactly the same than with the emulator, some rights have to be changed, so that the sftp commands don't fail. sudo chmod og+w /usr/bin/ sudo chmod og+w /usr/share sudo chmod og+w /usr/share/applications/ The first is where the binary will be put, the second where a directory will be created to contains the app data, and the last is where the icon shortcut will be placed.

Create a new Device
In QtCreator menu "Options/Devices":
 * "Add"
 * "Generic Linux Device"
 * Connection data page:
 * Name : "Butterfly"
 * IP : "192.168.1.xxx"
 * User name : "nemo"
 * Authentication type : "Password"
 * User password : "nemo"

Create a new Kit
In QtCreator menu "Options/Build & Run", in tab "Kits":
 * Select "MerSDK-sailfishOS-i486-x86"
 * "Clone"
 * select "Clone of MerSDK-sailfishOS-i486-x86" and change :
 * Name : "Butterfly"
 * Device type : "Generic Linux Device"
 * Device : "Butterfly"

Add the kit to the project
If the project is opened, click on the "Projects" icon on the left tab (CTRL+4 shortcut). Click "Add Kit", and select "Butterfly"

Compile/Run
Run the project as usual. Take care the kit "Buttefly" is selected

Debug
Debugging seems to work (I never debugged a QML app yet, so don't know if it is fully functionnal). However, as stated in the SDK known issues (https://sailfishos.org/wiki/SDK_Alpha_Qt5_Known_Issues), to be able to do it, first run this command: sudo zypper in qt5-qtdeclarative-plugin-qmlinspector It will install the missing package that is needed.

Then simply press "F5" or click on the debug button in QtCreator to build/deploy/run with debugging support. You can place breakpoints and see QML/js console messages.

Known issues

 * icon is not shown : replace in the "Other files/HelloWorld.desktop" file the "Icon=" by one icon that exist, for example "icon-launcher-default" (default icon-launcher-gallery don't exist in the emulator)
 * program crash when run from the icon : replace in the "Other files/HelloWorld.desktop" file the "Exec=" line by : "invoker --type=j -s /usr/bin/HelloWorld"
 * cannot deploy as RPM, only by copying binaries (due to having selected a ""Generic Linux Device", and not a Mer Emulator)