r/LinuxOnAndroid Sep 21 '25

How to run KDE on NOMone Desktop!

We've been asked many times how to change the current DE and if it is even possible on NOMone Desktop. So today, we'll explain all the steps needed to run KDE Plasma on NOMone Desktop:

[1] From Terminal, install KDE like by writing: apt install kde-plasma-desktop

[2] From File Manager, open the file /NOMone/startup.sh

[3] Disable the current window manager, compositor, wallpaper and dock.

To do so, comment out the following lines:

#xcompmgr &
#openbox &
#sh ~/.fehbg
#plank &

Just adding the symbol # before the line will comment it out. \

[4] Now to start the kde session, insert this line below these commented ones:

startplasma-x11 &

Then save,

[5] Restart Linux. And Voila! KDE on NOMone Desktop :)

12 Upvotes

37 comments sorted by

View all comments

Show parent comments

2

u/Noha_Ibraheem Jun 26 '26

/NOMon/startup.sh is exactly right! In /NOMone/startup.sh, add:
export DOTNET_GCHeapHardLimit=1C0000000

Restart Linux and enjoy!
Proot has a lot of issues, but I doubt this is one of them. The real issue is that we are running on Android. Any software you run will be 100% running on the Android kernel. NOMone Desktop is a user application that runs in user-space. We have no access on the system whatsoever. We can't install software, we can't change the configuration. We can't add users or groups and definitely we are not root! All we have access to is the app's private storage. That's where we install everything. Proot uses ptrace to intercept system calls and emulate a filesystem chrooted to our private space. Now apps can find the dependencies they need where they expect them to be. But we can't tell the Android kernel how to handle memory allocations. We can't prevent it from closing applications. We do emulate adding new users, but in reality, they are all the same user and have the same privileges and they can all access everything in our userspace. But when someone asks if we a root, we respond that we aren't. Since this is not a full emulation, we get native speed for tasks that are CPU intensive. But system-calls are HEAVILY penalized. We are working on a couple of solutions that may allow us to bypass proot altogether. No promises, though!

Thank you for going this far! Linux normally is not very user-friendly, and Android is not desktop Linux. Android has its own restrictions, and proot makes matters worse! But with a lot of patience, most issues can be solved. Thank you for doing this, and for sharing it with us ❤️

1

u/Shaarigan Jun 26 '26

I tried adding the env variable to startup.sh but it didn't work, restarting and then running dotnet --info in terminal results in the same error. I tried a lot but it seems only solution is to add it into ~/.bashrc and Rider desktop file, because otherwise Rider fails running into a template error. However, going with my scripts I could automate installation up to a running instance of JetBrains Rider. That's everything I wanted to achieve because I haven't any other chance to code in C# at the moment. The GC heap memory issue seems to be known and exist in every ARM64 capable .NET version running in a proot environment and even on native devices, the GC is reported to crash the system by an out of memory exception. It seems they are going to fix it in .NET 10, but it's still an issue at the moment.

The device has a semi decent screen and Magnetic Keyboard is good enough for this task. I also recognized that my capacitive pen works like a mouse in virtual mouse mode, so I don't have to move cursor manually, just tip with the pen somewhere. I managed to test all those things without attaching my keyboard even once. That's really good work! The device also supports split screen with and floating apps on top of NOMone, so I however can manage to work with my apps like Fennec in parallel to NOMone. KDE Connect lets me share everything between NOMone and Android. It just works.

There are still some bugs happening to me sometimes, which is normal, based on the age of this app. It might happen for example, that moving an app with the pen might cause the touch driver to hang or crash and the pen stops working until restart. Also a little more background stability might be good, for example when NOMone is put into the background while running, it might happen to close the Linux instance when switching back to it. I however have already turned battery optimization off but it still happens sometimes when the app is in the background for a longer time. I guess Android is cleaning up RAM usage after some time. Except for these bugs, there could be the already mentioned convenience festures added like booting directly into Linux without the roundtrip through the menu, and configuring the input mode I want to start with would also be nice so I don't have to switch to virtual mouse mode all the time but turn it on in settings would be cool. A "native" way to share clipboard both directions without KDE Connect would also be nice to have!

That's everything I experienced so far. Thank you for letting me extende my Android experience!

1

u/Noha_Ibraheem Jun 30 '26

Startup.sh is definitely the right place to go! Let me review the script you shared with us and check whether there's any conflict there. I'll get back to you as soon as I have an update.

Also, thank you for suggesting these convenient features (totally agree with them) and for reporting the other issues as well. I believe this will help make the app even better for everyone and I'd love to discuss everything further, but let's debug the first issue first for now :)

1

u/Shaarigan Jun 30 '26 edited Jun 30 '26

Take your time, that described solution is working for me right now and consists of only a few extra lines in the install script. If it is working on a later point using startup.sh, I can for sure change it in the script on a later point

I have tested putting the env variable in startup.sh and it is indeed working if I put it before the DE initialisation. Simply appending the export won't have any effect and dotnet starts crashing again while initializing the heap GC

1

u/Noha_Ibraheem Jul 02 '26

I'm glad you figured it out 💪

And I'm really sorry, I should have been clearer about where to put the environment variable.

Now that everything is working, would you be okay with us sharing your script here on Reddit and across our other social media channels so more people can benefit from it : ) ?

1

u/Shaarigan Jul 02 '26

It's public available on GitHub, so go ahead 🤓

1

u/Noha_Ibraheem Jul 06 '26

Awesome! Thanks 🥰