In previous builds, the Lipstick compositor experienced crashing issues when setting the top-level window.
Progress has been made in porting the Maliit on-screen keyboard to Qt6, moving the project forward. As a result, the on-screen keyboard now successfully appears.
Following the resolution of issues with the compositor and on-screen keyboard, development of the user experience can now resume. Furthermore, the qt quick controls in Nemo have been enhanced with keyboard navigation support.
For a period of time, there were issues with the Non-Graphical Feedback Daemon (NGFD), which handles the sound notifications for incoming phone calls or messages. The crashing of NGFD has been addressed in previous fixes, and now the correct configuration file for PinePhone has been provided, resolving the issue.
We were fortunate to showcase the results of our work at FOSDEM, Europe’s largest open-source event. Nemomobile was featured as part of the Linux On Mobile stand, alongside other mobile Linux platforms such as postmarket OS, Sailfish OS, Ubuntu Touch, AsteroidOS, and others. It was a pleasure to reconnect with old friends and engage in discussions about future development. Currently, Nemomobile remains in a very raw state, resembling more of a toy project or sandbox for experimenting with new ideas.
]]>After the holiday break, work on Nemo’s development resumed. Our goal remains upgrading everything to Qt6 and preparing a functional image.
We’ve made updates to the Lipstick compositor, incorporating the latest changes from the SailfishOS tree. The new version has been tagged as 1.2.
Additionally, the glacier-home settings plugin have been modified to utilize the new Qt Quick Controls Nemo. Furthermore, numerous packages have been tagged in Git, ensuring they are ready for building with Qt6.
The first highly experimental images, built with Qt6, can be found here: https://img.nemomobile.net/2025.05/ and https://nemo.mlich.cz/images/Manjaro-ARM-nemomobile-git-pinephone-23.12.img.xz
For those interested in experiencing Nemo on Qt6, a YouTube video has been provided to offer insights into its functionality. You can watch the video:
OpenSuSE based builds are also transitioning to Qt6, with the qt6-based Lipstick available in the Open Build Service.
Nemomobile will be part of the Linux on Mobile stand at FOSDEM.
]]>Despite some imperfections in functionality, we have chosen to integrate the Qt6 branch of Nemo-Packaging into the master branch, given its considerable importance to us. More than 100 packages, including the Lipstick compositor, can now be built with Qt6 support. Notably, approximately half of our end-user apps are operational with this update.
At the same time, Sailfish OS, which maintains the upstream of many packages used in NemoMobile, is merging our pull requests and providing valuable feedback for the rest of them.
Most importantly, the issue of building the Maliit software keyboard with Qt6 was addressed, allowing essential interactions with the UI, such as connecting to WiFi, to be performed without requiring an external keyboard.
The font loading issue in Qt Quick controls has been resolved.
Nemo was successfully run on Jelly Star (Helio G99, Android 12) by TheKit, showcasing compatibility achievements.
P.S. As December approaches, we would like to remind you of the Advent of Code challenge we initiated last year. While new tasks won’t be published daily like last year, the concept remains valid: Fix one of Nemo’s bugs every day, and by Christmas, you will have a fully functional phone.
]]>The Menu now incorporates a more visually appealing user interface, similar to the user experience provided by libhandy. When the application is displayed on a tablet, the menu is situated on the left side, while the content is displayed on the right. On smaller screens, the menu is presented as a separate page.
The latest enhancement in Qt Quick Controls Nemo enables effortless navigation between pages through the use of a back button or a back gesture. This functionality can be further enhanced by implementing an immediate UI response, similar to what Sailfish OS offers.
While Telepathy has traditionally played a significant role in Nemomobile, its future role is currently uncertain, especially in light of compilation challenges with qt6. As of now, we are compiling libcommhistory, voicecall, dialer, contacts, and messages without the reliance on Telepathy. In the latest Git version, we’ve achieved the capability to handle incoming calls and display responses for USSD control codes. The community is exploring alternative approaches as Telepathy’s place in Nemomobile evolves.
The transition to Qt6 is an ongoing effort. A pull request containing a patch for qtdocgallery has been submitted for review, making it possible to build glacier-gallery.
Additionally, a bug within the Qt Quick Components, specifically in the Icon component, was causing issues where shader effects didn’t properly alter the color of the icon. This issue has now been successfully resolved.
]]>The work on porting to Qt6 is progressing at a slow pace. Currently, there are 113 passing packages and 35 failing ones. The lipstick compositor is operational, allowing the creation of basic user interface images. However, the maliit virtual keyboard remains unavailable, making it impossible to enter WiFi passwords in the settings app.
Here is the current to-do list:
error: invalid use of incomplete type ‘class CommHistory::Group
The number of packages in the Open Build Service has grown to 60. It is now possible to run lipstick.
We’re in search of individuals who can help us, just as we’ve always done. Hacktoberfest offers a chance to earn a tangible reward for your contributions. While in other months, our way of saying thanks suffices, October brings an exciting opportunity. If your 3 patches get merged into the repository with the #hacktoberfest tag, Digital Ocean will send you a t-shirt. All that’s required is your registration on the Hacktoberfest page. If this tag is missing, please add a note to your pull request.
]]>The current status is summarized in the Move to Qt6 ticket on GitHub. The PKGBUILDs are built based on the Qt6 branch of the nemo-packaging repository.
In terms of numbers, for Manjaro on x86_64 there are 66 failing packages and 75 passing packages. Pull requests for packages from the mer stack (or SailfishOS stack) are being made, with the patch always attached to the nemo-packaging repository instead of pointing to downstream repositories during the build. Additionally, the packages from the nemomobile-ux repositories are being developed in separate branches and merged into the master branch after review.
Currently, qt-quickcontrols-nemo is functioning correctly. Despite other changes, Nemo Controls have a different name.
Previously, the imports in the code looked like this:
import QtQuick.Controls 1.0
import QtQuick.Controls.Nemo 1.0
import QtQuick.Controls.Styles.Nemo 1.0
And now they have been updated to:
import Nemo.Controls
Some of the glacier apps have already been ported to the new controls, namely calc, filemuncher, web browser, weather, and settings. In the case of the mer stack, the changes are compatible with Qt5. However, the glacier apps are dropping Qt5 support.
Not all functions were tested; the applications can only be started and do not crash immediately. Any discovered bugs will be continuously fixed.
The most significant milestone achieved is that lipstick can now be started, indicating that all builds will be based on Qt6 soon. Our next objective is to address all middleware issues to restore telephony, calendars, hardware and other functionality.
We encounter some common problems, and at times, we are unsure how to resolve them. Below are a few examples:
g++ -c -pipe -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -g -ffile-prefix-map=/nemo-packaging/libofono-qt/src=/usr/src/debug/libofono-qt -Wall -Wextra -mno-direct-extern-access -D_REENTRANT -DQT_NO_DEBUG -DQT_TESTLIB_LIB -DQT_DBUS_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR='"/nemo-packaging/libofono-qt/src/libofono-qt-1d3fa9d7523a07fc117f96c89b5f66bb03e0acd4/tests"' -I. -I../lib -I.. -I/usr/include/qt6 -I/usr/include/qt6/QtTest -I/usr/include/qt6/QtDBus -I/usr/include/qt6/QtCore -I. -I/usr/lib/qt6/mkspecs/linux-g++ -o test_ofononetworkregistration.o test_ofononetworkregistration.cpp
g++ -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -Wl,-rpath,/usr/lib -o test_ofononetworkoperator test_ofononetworkoperator.o -L ../lib -lofono-qt /usr/lib/libQt6Test.so /usr/lib/libQt6DBus.so /usr/lib/libQt6Core.so -lpthread
/usr/sbin/ld: test_ofononetworkoperator.o: in function `void QtPrivate::q_relocate_overlap_n_left_move<OfonoNetworkOperator*, long long>(OfonoNetworkOperator*, long long, OfonoNetworkOperator*)':
/usr/include/qt6/QtCore/qcontainertools_impl.h:176: undefined reference to `OfonoNetworkOperator::operator=(OfonoNetworkOperator const&)'
/usr/sbin/ld: test_ofononetworkoperator.o: in function `void QtPrivate::q_relocate_overlap_n_left_move<std::reverse_iterator<OfonoNetworkOperator*>, long long>(std::reverse_iterator<OfonoNetworkOperator*>, long long, std::reverse_iterator<OfonoNetworkOperator*>)':
/usr/include/qt6/QtCore/qcontainertools_impl.h:176: undefined reference to `OfonoNetworkOperator::operator=(OfonoNetworkOperator const&)'
/usr/sbin/ld: test_ofononetworkoperator.o: in function `QtPrivate::QGenericArrayOps<OfonoNetworkOperator>::Inserter::insertOne(long long, OfonoNetworkOperator&&)':
/usr/include/qt6/QtCore/qarraydataops.h:483: undefined reference to `OfonoNetworkOperator::operator=(OfonoNetworkOperator const&)'
/usr/sbin/ld: /usr/include/qt6/QtCore/qarraydataops.h:486: undefined reference to `OfonoNetworkOperator::operator=(OfonoNetworkOperator const&)'
collect2: error: ld returned 1 exit status
qtdocgallery.pro:1: Cannot find feature qt_parts
/nemo-packaging/libmlocale/src/libmlocale-0.7.6/src/mcharsetdetector.cpp:33:10: fatal error: QTextCodec: No such file or directory
33 | #include <QTextCodec>
| ^~~~~~~~~~~~
compilation terminated.
/usr/sbin/ld: plugin.o: warning: relocation against `_ZN12Notification16staticMetaObjectE' in read-only section `.text._ZZN9QtPrivate16QMetaTypeForTypeIP12NotificationE17getLegacyRegisterEvENUlvE_4_FUNEv[_ZZN9QtPrivate16QMetaTypeForTypeIP12NotificationE17getLegacyRegisterEvENUlvE_4_FUNEv]'
We would greatly appreciate any assistance or guidance you can offer.
]]>The DevConf conference, held in Brno, Czech Republic from 16th to 18th June, featured a talk on NemoMobile. Organized primarily by Red Hat, the conference encompassed a wide range of topics, ranging from Kubernetes and containers to Kernel development. Within the track titled “Edge, Mobile, and Automotive,” there was a dedicated session discussing NemoMobile.
The selection of this topic aimed to attract automotive developers, despite NemoMobile itself not specifically targeting that domain.
As part of the talk, a proof of concept was developed based on the QtDigitalInstrumentCluster project. This involved three essential steps:
While detailed information regarding the first two steps is provided below, work on the third step has not yet commenced.
The primary objective was to demonstrate the utilization of the Nemo software stack in a car. To achieve this, obtaining location data was the first step. Currently, the Nemo pipeline for acquiring location data operates as follows:
[device]
→ /dev/EG25.NMEA
→ gpsd
→ geoclue1
→ qt-positioning
→ application
The GPS device is accessible through the device file system. The gpsd component reads NMEA messages from the serial port
and forwards them to the file system via a socket. Its functionality can be verified using cgps, a command-line interface
that displays position and satellite details. The Qt application can retrieve information from the Qt Positioning API,
which employs providers to obtain location data. By default, the geoclue2 provider is selected, but this can be addressed
by removing the /usr/lib/qt/plugins/position/libqtposition_geoclue2.so
file. This action enables the use of geoclue1
instead. Geoclue1 also offers providers, and their list can be found in /usr/share/geoclue-providers. Among these providers,
one is the gpsd provider, which allows for acquiring position from the GPS device. Another provider, mlsdb, leverages Mozilla
Location Services to obtain position data based on cell tower signal strength. Additionally, there are supplemental services
that facilitate downloading GPS almanac data, which expedites position fixing.
The addition of gpsd as an extra module and the decision to compile with the parameter --with-gpsd=no
, as well as
the non-utilization of geoclue2, have raised questions. While there were specific requirements that led to these choices,
we anticipate being able to migrate to geoclue2 in the near future.
Ideally, a direct connection to the CAN BUS and the use of a robust stack like Qt IVI would be the recommended approach.
However, for the purpose of this demonstration, the OBD2 (specifically ELM 327) was employed, connected via Bluetooth.
The bluetoothctl utility was utilized to pair and establish a trusted connection with the device. The Digital Instrument
Cluster (DIC) expects to be connected via a serial line, which can be established using the command rfcomm bind 0 de:ad:be:ef:00:00
.
Unfortunately, for unknown reasons, the device failed to establish a successful connection, resulting
in the inability of minicom to send commands and receive responses.
The NemoMobile project was showcased at the mobile Linux stand during Friday and Sunday. Visitors had the opportunity to experience NemoMobile firsthand on the PinePhone and compare it with a slightly outdated version of NemoMobile running on the development device Nokia N950. Alongside NemoMobile, the stand also featured demonstrations of Phosh on the Librem 5, PinePhone, and OnePlus 6. The Librem 5 showcased its ability to transform into a computer by connecting it to a screen. The UBPorts project demonstrated its capabilities on the Volla Phone. Last but not least, Maemo leste was presented on the PinePhone.
Other interesting devices were also showcased, such as the Blackberry Q10, Xilinx Zynq based CTU Devboard, and TI Sitara board, despite not running a mobile phone distribution. These devices added to the overall diversity and interest of the exhibition.
The NemoMobile community has been active for at least 10 years, and throughout this time, it has gathered numerous incredible individuals. Despite working on other projects, these amazing people have made significant contributions to the NemoMobile community. Their dedication and hard work are greatly appreciated, and their efforts have been instrumental in shaping the success of NemoMobile. Thank you for your exceptional work and commitment!
Michał has taken the initiative to repackage Nemo for openSuSE. He recognized that the OBS (Open Build Service) and the development environment it provides are comfortable for him, and he believes that this approach will lower the barrier for his contributions. Currently, the repository consists of 20 packages out of a total of 150. You can find the repository at https://build.opensuse.org/project/show/devel:NemoMobile. You are welcome to join this initiative and contribute to the effort. Feel free to participate and support the rebuilding of Nemo for openSuSE.
]]>The Qt6 porting process for Nemomobile has been a major focus of Sergey’s efforts this month. Specifically, Sergey has been diligently working on porting Qt Quick Controls Nemo to Qt6.
Barry showcased a proof of concept on the Xiaomi Redmi 7, successfully demonstrating the compatibility of Nemomobile. Similarly, NfX accomplished a successful boot of Nemo on the Xiaomi Poco.
These remarkable achievements were shared within the Manjaro libhybris telegram group, allowing the community to witness the progress. It’s worth noting that the project utilized the available images from the GitHub CI repository, providing a solid foundation for the development process.
]]>The configuration of the Weather application has been reworked, and the city model is now stored in an sqlite database.
The *.prf file was moved to the correct folder. This file is usually provided by a library and included in the Qt project client application using CONFIG += something, adding definitions to the Qt project such as linking with qt dbus module, etc. Some libraries installed this file in a different folder, causing missing features. This issue arose while rebuilding nemo-qml-plugin-calendar. The fix with *.prf also resolves the problem with including libraries. The addition of -liodata-qt5 here may no longer be necessary, as CONFIG += iodata takes the same information from iodata.prf. Unfortunately, qmake does not produce an error message when the *.prf file is not found.
The part of Qt Quick Controls Nemo that handles device orientation has undergone significant rework, resulting in the removal of a large block of code. This simplification was necessary as these parts must be done on the compositor side.
The LinuxAppSummit conference was held in Brno on April 22-23 and covered many topics such as flatpak, snap, flutter, app testing, accessibility, and more. The conference concluded with a lightning talk on NemoMobile.
]]>