A fork of Metacity 3.58.1 (based on Debian's 1:3.58.1-2 package) for GNOME Flashback on X11, built for Ubuntu 24.04.
It adds:
- Tab groups: put several windows, such as your chat apps, into one window with a tab strip on top. A tab is marked when its app wants attention, and it shows how many notifications you haven't read. A group has one entry of its own in the window list.
- Notification archive:
metacity-notification-archiverecords your desktop notifications in a list you can search. It can sit in a group as one more tab. metacity-tab-groups: a window and a command line tool to rename, save and set up groups.- Tab Groups panel applet: a button for each group in the GNOME Flashback panel, with its unread count and a menu of its tabs.
- A group behaves like one window: its tabs share size, position, maximize, minimize and workspace. Only the active tab is shown; the others are hidden the same way as windows on another workspace.
- The tab strip is a small window that Metacity keeps glued to the top of the group.
- The archive watches notifications on the session bus without changing them,
and stores them in SQLite. It works out which window each one belongs to and
sets the
_METACITY_TAB_UNREADX property on that window, and Metacity draws that number as the tab's badge. Focusing the window marks its notifications read.
For Ubuntu 24.04 LTS from PPA:
sudo add-apt-repository ppa:kedazo/ubuntu-hacking
sudo apt update
sudo apt install metacity
sudo apt install metacity-tab-groups-applet # the panel applet, if you want itAs Debian packages (from this directory):
sudo apt build-dep ./
dpkg-buildpackage -b -us -uc
sudo apt install ../metacity_*.deb ../metacity-common_*.deb ../libmetacity3_*.deb \
../metacity-tab-groups-applet_*.debOr from source:
NOCONFIGURE=1 ./autogen.sh
./configure --prefix=/usr && make && sudo make installThen log out and back in.
| Key | Action |
|---|---|
Super+G |
Add the focused window to a group |
Super+Shift+G |
Take it out of its group |
Super+Page_Down / Super+Page_Up |
Next / previous tab |
Super+1 … Super+9 |
Go to tab N |
Super+A |
Go to the next tab that wants attention |
These keys only act on tabs while a grouped window has the focus. Otherwise
Super+Page_Up/Page_Down keep their usual meaning.
With the mouse, on the tab strip:
- Click or scroll to switch tabs.
- Middle-click a tab to close that window.
- Drag a tab to change the order.
- Drag the empty part of the strip to move the group.
- Right-click a tab for that window's menu.
The window menu (Alt+Space) also has Move to Tab Group, New Tab Group,
Always Open in This Tab Group, Rename Tab Group…, Save Tab Group…,
Edit Tab Groups… and Detach from Tab Group.
A group made with Super+G is called "Group 1" and is forgotten when it
closes. Save Tab Group… gives it a name and writes it to groups.ini: its
windows open in it from then on, and its place, size and tab order are
remembered.
To open the archive, run metacity-notification-archive or start
Notification Archive from the app menu.
Tab Groups in the app menu (metacity-tab-groups) opens a window with all
groups: rename them, save them, change their rules, tab order, tab labels and
other settings, and move their tabs. The same from a terminal:
metacity-tab-groups list # open and saved groups, --json for scripts
metacity-tab-groups rename "Group 1" Chats
metacity-tab-groups save Chats # write an open group to groups.ini
metacity-tab-groups pick --add-to Chats # click a window to add its class
metacity-tab-groups check # find mistakes in groups.ini
metacity-tab-groups edit # edit groups.ini, checked before it is usedman metacity-tab-groups has all commands.
A group has one entry of its own in the window list, with its name; it stays
in its place when you switch tabs. Alt+Tab still shows the group's tab.
The Tab Groups applet (package metacity-tab-groups-applet) shows a button
for each group. A click brings the group to the front or minimizes it, the
arrow lists its tabs, and right-clicking renames, saves or closes it. Saved
groups that aren't open offer to start their apps.
After installing it, restart the panel (gnome-panel --replace &, or log out
and in), then Alt+right-click the panel → Add to Panel… → Tab Groups. To
move it, hold Alt and drag it with the middle mouse button.
~/.config/metacity/groups.ini is read again as soon as you save it:
[group Chats]
match = class:Signal; class:Slack; title:*Telegram* # which windows join
order = Signal; Slack # tab order
labels = Signal=Family; Slack=Work # texts of the tabs
close-button = minimize # or close-tab, close-all
extra-tabs = notification-archive # put the archive in this group
show-name = true # the name before the tabs
[tabs]
show-name = false # names on the strips of all groups
taskbar = group # one window list entry per group, or: tab
taskbar-title = name # or name-and-tab
[archive]
max-per-app = 512 # notifications kept per app, 0 = no limit
retention-days = 30 # 0 = keep foreverRenaming a section renames the open group. Double-click a group's name on its strip to rename it.
To find a window's class, run xprop WM_CLASS and click the window.
Groups' size, position, tab order and active tab are remembered in
~/.local/state/metacity/tab-groups.ini. The archive is stored in
~/.local/share/metacity/.
GPL-2.0-or-later, the same as Metacity (see COPYING).
The tab groups, the notification archive, metacity-tab-groups and the panel
applet are Copyright © 2026 David Kedves.
Metacity itself is copyright its original authors (see AUTHORS and
debian/copyright).
