I don't think notifications are going to work the exact way you think without making tweaks here and there. You may very well even have to lower your expectations.
I see, even in MATE, I set it to display 10 but it only shows 5. I can still get to the older ones beyond 5 by deleting individual more-current notifications.
I'm also using MetaCity and I see a different behavior, I can see countless notifications but I see nowhere to set the count kept.
There is also the chance that you are misinterpreting what you are seeing. I see in the MATE settings where certain notifications like NetworkManager are deleted immediately by default. Or the setting below, I believe this is the amount of minutes that need to pass before you will see the same notification again.
org.gnome.settings-daemon.plugins.housekeeping min-notify-period 10
With that said, that setting does not seem to have any effect on vlc or rhythmbox notifications, so again, hard to have expectations. I don't think it would even make sense that setting would affect music applications anyway, there are very few songs over 10 minutes long. So it would be sensible to believe that each application may be able to manipulate notifications in its own way. You should probably start looking into the preferences of the specific applications and their notification settings. (I see editable settings for notifications for vlc.)
I am testing with Rhythmbox, vlc, and NetworkManager on both MATE and Metacity desktops. I am merely stopping and playing the same song, cycling through the music library, and enabling and disabling the network connection via the applet.
Also search through the settings for all the desktops you have installed.
As the user:
gsettings list-recursively | grep notif
It's hard for us to know what you have installed, but this will give you a list of set-able settings associated with notifications for any desktops you have. You may also want to try grepping for specific application names.
I (personally) am hesitant to suggest applications from outside repositories because I really don't keep up with who is who (legit-safe) in that world, but there are outside packages available.
If nothing else works, you may want to look into a way to send notifications to sendmail or syslog...
One thing I was able to do with the dbus monitor was pull out a string of a song that threw a notification from rhythmbox.
As the user:
dbus-monitor --session | grep "Stimulation.mp3"
resulted in:
variant string "Method Man - Stimulation.mp3"
but this was a case of knowing exactly what I was looking for. I don't if you would be able to predict all of the notifications you would normally get.
One thing that may be a little more sensible and had some promising results was:
dbus-monitor --session interface=org.freedesktop.Notifications | grep -A20 "org.freedesktop.Notifications"
There is more output but I limited it to 20 lines, which resulted in:
method call time=1645315302.262755 sender=:1.132 -> destination=org.freedesktop.Notifications serial=1116 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
string "Rhythmbox"
uint32 0
string "rhythmbox"
string "Glamorous Life"
string "by <i>Sheila E</i> from <i>Operation Funk</i>"
array [
string "media-skip-backward"
string "Previous"
string "media-playback-pause"
string "Pause"
string "media-skip-forward"
string "Next"
]
array [
dict entry(
string "action-icons"
variant boolean true
)
dict entry(
string "category"
--
signal time=1645315306.482778 sender=:1.263 -> destination=(null destination) serial=29 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=NotificationClosed
uint32 1
uint32 1
I also sent a notify-send
command, and it caught it. You may be able to create a background script/process that routes these outputs to a file or log that you can view later if it is that important to you. You could filter and probably format it they way you want or manipulate the present format for parsing.
This is not a solid answer but it may give you some guidance. (too much to put in a comment)