The Mutter docs specify the interface with dbus as @don_crissti has pointed out in comments:
https://gitlab.gnome.org/GNOME/mutter/blob/master/src/org.gnome.Mutter.DisplayConfig.xml
You need to find out your configuration serial and your connector:
configuration serial is the first number shown in
gdbus call \
--session \
--dest=org.gnome.Mutter.DisplayConfig \
--object-path /org/gnome/Mutter/DisplayConfig \
--method org.gnome.Mutter.DisplayConfig.GetResources
in my case that is uint32 3
, so I use 3
connector: it shows in ls /sys/class/drm
, in my case by trial and error I found that card0-DP-2
was the correct one so I use DP-2
. You can also try to make sense of the output of DisplayConfig.GetResources
and use that.
By setting the other options, the final command becomes like this:
gdbus call \
--session \
--dest=org.gnome.Mutter.DisplayConfig \
--object-path /org/gnome/Mutter/DisplayConfig \
--method org.gnome.Mutter.DisplayConfig.ApplyMonitorsConfig \
3 1 "[(0, 0, 1, 0, true, [('eDP-1', '1920x1080@60.0', [] )] )]" "[]"
Unfortunately, that does not work for me, even though I am passing the resolution (aka. "mode id") in the right format:
Error: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: Invalid mode '1920x1080@60.0' specified
(According to introspection data, you need to pass 'uua(iiduba(ssa{sv}))a{sv}')
EDIT:
I found why, the refresh rate needs to be THE EXACT STRING that DisplayConfig.GetResources
is reporting. It does not let you set what you want as refresh rate sadly! So you have to use some arbitrary string like 59.810825347900391
like so:
gdbus call \
--session \
--dest=org.gnome.Mutter.DisplayConfig \
--object-path /org/gnome/Mutter/DisplayConfig \
--method org.gnome.Mutter.DisplayConfig.ApplyMonitorsConfig \
3 1 "[(0, 0, 1, 0, true, [('eDP-1', '1920x1080@59.810825347900391', [] )] )]" "[]"
In conclusion, this is of very limited use. There should be a way of adding display modes, by generating CVT or GTF timings, but it looks like DisplayConfig does not have an interface for that :(
Best Answer
Apparently it's been removed from
Tweaks
but not fromdconf
which is why you're still able to do it via terminal... Typical GNOME stuff.Anyway, as of
gnome 3.26
, there's a newdconf
key underorg.gnome.mutter
calledexperimental-features
which is of typeas
(array of strings - it accepts multiple string values) and one particular value enables HiDpi support onWayland
(including fractional values):So per the above, fire up
dconf-editor
and add'scale-monitor-framebuffer'
to the list of experimental features underorg.gnome.mutter
:For those who prefer the terminal, follow the instructions here (sure, replacing the values in that example:
'screen-cast', 'remote-desktop'
with'scale-monitor-framebuffer'
).Restart your session and you should then be able to set the scaling factor from the control center
Settings > Devices > Displays > Scale: