Diving into Plasma Bigscreen

ยท 1597 words ยท 8 minute read

I have been a long time Plasma Mobile contributor, but I have always had a keen interest in having Linux on my TV! I have noticed that in the past few months, the Plasma Bigscreen project has had some interest from people wanting to contribute, but there have not been any active KDE developers working on the project. Since I have some time off school (having just graduated university), I decided to take a swing at improving the project for a week.

Background ๐Ÿ”—

Plasma Bigscreen is a Plasma-based shell (desktop environment) for TVs and other large displays. It is designed to be used with arrow navigation using remotes or controllers.

I have not been involved with the project in the past so its history is a bit murky to me. From what I know, it was originally developed with Mycroft in mind, which was a open source virtual assistant. They had even developed hardware for it, but unfortunately, the company shut down in recent years. The work by the developers at that time appears to have been sponsored by Blue Systems.

Plasma Bigscreen itself emerged around 2020 and was designed as a “Plasma shell”, in a similar way to Plasma Desktop and Plasma Mobile. Back when development was active, it provided a TV friendly launcher to launch Linux apps, and even had its own “mini-apps”, known as Mycroft Skills. These could be downloaded from the KDE Store. A TV-friendly web browser and media player were also developed for the project. The project itself was released in the Plasma 5 release cycle, but got dropped with Plasma 6 in 2024 because it was not ported in time for the megarelease.

About a year ago, the project was ported to Plasma 6 (and Qt 6), but has not yet received a release since being removed from the Plasma release schedule.

Stepping in ๐Ÿ”—

A few months ago, my friend Seshan started doing some work and opened a few merge requests against the Plasma Bigscreen shell repository. I noticed that there had basically been no activity on the repository since the initial Qt6/Plasma6 port, and the matrix channel had no active developers. I sensed an opportunity…

Housekeeping ๐Ÿ”—

I started with some housekeeping work with the repository. I added a README, and a REUSE license checker to the CI. I then ported the QML library to be a declarative plugin, and removed a bunch of abandoned code folders that were not used anywhere in the codebase.

Merge requests:

UI ๐Ÿ”—

At this point prior to my work, the shell UI looked like this:

I was digging around some old Breeze Ocean mockups and stumbled across some Bigscreen mockups by Manuel. It seems the original Bigscreen UI did try to follow it, but did not quite get there. I felt inspired to fully complete implementing them.

Homescreen ๐Ÿ”—

I first worked on the homescreen UI. I flattened the layout to reduce visual complexity, removing panel backgrounds and shadows where possible, while adding tooltips for the indicators. I then added an “expanded clock” view for when the user is at the top of application categories (based on the mockups), which shrinks when the user goes down the view. I ported the application lists to use ListView and delegate caching rather than having all elements having their coordinates positioned manually to improve performance. The background now also blurs when it is not the main focus of the UI.

I also added a search view based on KRunner. This allows users to search for the applications they need without needing to manually scroll through the entire application list.

Merge requests:

Settings ๐Ÿ”—

I redesigned the system settings view to have a sidebar with categories, with a simple two-pane look.

The settings modules (KCMs) had a lot of hardcoded UI elements and layouts. I decided to make a small component library to build TV focused UIs (that still look Breeze like), and ported all of the settings modules to it. I moved away from horizontal layouts to vertical layouts for content, and put a heavier emphasis on sidebars for interacting with individual delegates. I think it looks pretty nice:

I ported settings modules to my controls library, and also fixed some issues:

  • Display KCM (rewritten with libkscreen backend, as it was otherwise completely broken)
  • Sound KCM (ported to new UI)
  • KDE Connect KCM (ported to new UI, fixed some state issues)
  • Bigscreen KCM (ported to new UI, fix shortcuts, fixed timezone selection)
  • Wi-Fi KCM (ported to new UI)

Merge requests:

Startup feedback ๐Ÿ”—

The UI feedback for starting an application was broken, so I decided to overhaul it to be something similar to what we have on mobile:

Merge request:

Envmanager ๐Ÿ”—

I wrote envmanager as a program in Plasma Mobile that manages shell specific configuration we need in services such as KWin. This avoids the need for distros to ship custom configs to set certain settings that the shell needs. I recently changed Plasma Mobile to use config overlays in order to achieve this, with more details can be found in my other blog post.

Merge requests:

Trying it out ๐Ÿ”—

In order to try it out (on a TV for realsies, not just on my workstation), I used a Raspberry Pi 5. I flashed postmarketOS onto it, and then manually compiled and installed the Plasma Bigscreen shell.

Note: If you are trying to build and install on postmarketOS yourself, be sure install the dependencies and pass the build flags in this manifest, as they are required: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/blob/ee4de8c6702a113914d6ed899c88cb9411e75427/packages/plasma-bigscreen/APKBUILD#L57

As a user you can otherwise install plasma-bigscreen from the nightly repo, or use the AUR package on Arch (though I haven’t tried it).

It’s dangling off the HDMI cable, I know

Applications ๐Ÿ”—

In its heyday, Plasma Bigscreen relied on “Mycroft Skills” to provide some media applications such as YouTube and SoundCloud. We do not have that anymore, so I tried out some other Linux applications.

These are some of the ones I tried from Flathub:

  • Kodi - Works well with arrow navigation, allows you to manage a local digital library of content
  • VacuumTube - Provides the YouTube TV web UI wrapped in an application, works well with arrow navigation
  • Jellyfin - I don’t have a Jellyfin server; it launches fine but I don’t think it supports arrow navigation
  • SuperTux - Fun game!
  • SuperTuxKart - It ran somewhat poorly on the Pi, but playing it with a controller was quite nice!

Of course, we also have KDE applications designed for TV:

Controller support ๐Ÿ”—

There is a repository called plasma-remotecontrollers, which contains a daemon that is able to take both game controllers (ex. Xbox) and TV remotes (over CEC on HDMI) and map them to keyboard arrow keys. It also has a settings module to configure the shortcuts.

I was able to successfully test having an Xbox controller connected (with the daemon online), and having it map the arrow buttons to arrow keys on the system. I wasn’t able to however test the CEC support, which would allow buttons on TV remotes (over HDMI) map to arrow keys.

Other contributors ๐Ÿ”—

Seshan and User8395 have also been contributing to the project here and there in the past few weeks, here are some highlights:

Unresolved issues ๐Ÿ”—

There is still a lot to work on in the project.

Input ๐Ÿ”—

There isn’t a virtual keyboard to input text with that supports arrow navigation. This is something planned for Plasma Keyboard however, please stay tuned!

The plasma-remotecontrollers’s (TV remote/game controller support) settings module is also not yet properly ported and tested on Bigscreen.

So… it is probably best to still use a bluetooth keyboard and mouse for now, or an air remote.

Application design ๐Ÿ”—

We do not have any framework to design TV-based UIs in KDE. Aura browser and Plank both use Qt Quick Controls and Kirigami, but have a lot of hardcoding and custom controls in order to be usable on a TV. I do have a few TV focused components for building settings modules, but that is a very narrow set of controls.

Goals ๐Ÿ”—

What are the usecases we want to achieve with a TV focused desktop environment? Do we need to also pursue making frontends for various media services? There isn’t a clear direction for the project at the moment, beyond making it a working desktop environment. In the past, this project was heavily focused on Mycroft but that no longer exists.

Getting it released again ๐Ÿ”—

Distributions dropped their respective plasma-bigscreen packages when Plasma 6 rolled out, as it is no longer part of the Plasma release. We need to have the project return to the Plasma release cycle, hopefully starting with Plasma 6.5.

Overall ๐Ÿ”—

I am fairly happy with the work that I was able to produce for Bigscreen last month. I have since returned to working on Plasma Mobile (due to having limited time as a volunteer contributor), but I can still step in and help review merge requests and guide new contributors to the project.

Feel free to join us in the Bigscreen Matrix group #plasma-bigscreen:kde.org!

kde