Development Setup: Ubuntu MATE 19.04 + Ayatana Indicators

This is a quick HowTo that shows how to setup a Ubuntu MATE 19.04 development setup in which Ubuntu System Indicators [1] get replaced by Ayatana System Indicators [1].

The current development strategy is to use nightly DEB packages provided by the Arctica Project and Ayatana Indicators upstream on top of Ubuntu MATE 19.04 and see what details still require work.

Preparing Ubuntu MATE 19.04 development setup

First step is to download a Ubuntu MATE 18.10 (aka cosmic) ISO image and install Ubuntu MATE 18.10 into a test environment (e.g. a virtual machine).

Then edit /etc/apt/sources.list and replace all occurrences of cosmic by disco.

Then update all lists of available packages and upgrade the system to the current development state of Ubuntu MATE 19.04:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade

It may be required that you run several upgrade and dist-upgrade iterations, because it may occur that not all packages upgrade cleanly (this is normal during development cycles).

Adding Nightly Builds of the Arctica Project's DEB Package Archive

Add a new file /etc/apt/sources.list.d/ayatana-indicators.list and put this content into it:

deb disco main
deb disco main

The Release files of the Ubuntu Nightly Builds Archive has been signed by GnuPG Key 0xA8680F5598DE3101:

pub   rsa4096 2015-09-14 [SC] [expires: 2019-08-25]
      7A49 CD37 EBAE 2501 B9B4  F7EA A868 0F55 98DE 3101
uid           [ unknown] ArcticaProject PkgMaster <>
sub   rsa4096 2015-09-14 [E] [expires: 2019-08-25]

You can import this key into your APT keyring by this command line:

$ sudo wget -qO - | sudo apt-key add -

Important: As we always want to prefer packages from even if a newer version of that package is in Ubuntu, we need to pin packages from that APT repository:

Package: *
Pin: release o=ArcticaProject
Pin-Priority: 1001

Place the above config snippet into /etc/apt/preferences.d/arctica.

When done, update your package lists once more:

$ sudo apt update

Replacing Slick Greeter by Arctica Greeter

You can simply exchange Slick Greeter as used in Ubuntu MATE 18.10 by Arctica Greeter:

$ sudo apt install arctica-greeter
$ sudo apt remove --purge slick-greeter

From a text console (TTY 1-6), restart LightDM to make the switch-over complete:

$ sudo invoke-rc.d lightdm restart

Todos for Arctica Greeter:

  • Add an Arctica Greeter theme for Ubuntu
  • Work on date & time system indicator
  • Work on sound indicator
  • Work on keyboard indicator or replace by fcitx
  • Better understand when Arctica Greeter kicks in as lock screen
  • Beautify Arctica Greeter's default theme
  • Improve remote logon support (e.g. session type chooser)

Switching over to Ayatana-Indicator-aware MATE Indicator Applet

At first, install mate-indicator-applet from Arctica Project's Ubuntu Extras archive area.

$ sudo apt install mate-indicator-applet

Then remove all Ubuntu Indicators packages from the system:

$ sudo dpkg --purge `dpkg -l "indicator-*" | grep indicator | awk '{print $2}'`

Installing Ayatana System Indicators

Then install system indicators from Ayatana Indicators project by executing:

$ sudo apt install ayatana-indicator-<name>

Known to work well

  • ayatana-indicator-application
  • ayatana-indicator-session
  • ayatana-indicator-power
  • ayatana-indicator-notifications

Known to work sort of

  • ayatana-indicator-printers (needs more testing)
  • ayatana-indicator-systemtray (needs quite some coding)
  • ayatana-indicator-datetime (calendar widget not shown)

Still FTBFS'ing

  • ayatana-indicator-sound (packaging problem, needs some work)
  • ayatana-indicator-keyboard (not yet fully ported)
  • ayatana-indicator-display (undecided, if we should ship this)

Installing AppIndicator based Applications

The ayatana-indicator-application system indicator acts as a SNI (StatusNotifier DBus Interface) provider and applications supporting the AppIndicator based SNI DBus API can send their systray icon and menu to it.

This means, that you can run all sorts of variants of SNI capable applications on top of the application indicator. They can be linked against the new libayatana-appindicator, the older libappindicator or any other library or module providing SNI API support.

Some AppIndicator based applications that are nice to test:

  • Package: variety
  • Package: gtk-redshift
  • Package: nm-applet

To avoid a clash of SNI DBus providers, make sure that you have the package indicator-application removed from the system.