从命令行配置 GNOME/Wayland 显示配置

fla*_*i88 11 display-settings wayland gnome-shell gnome3

是否有可能在 Wayland 会话中从命令行配置 Mutter/GNOME shell 的监视器配置,或者直到现在才实现?

我试图通过 xrandr 命令更改一些内容(但对我来说这很明显,因为 xrandr 中的“x”表明它是 XServer 的工具,因此这无法正常工作)。

此命令无效(使用 Fedora 23 / GNOME 3.18.2)

xrandr --output XWAYLAND0 --off
Run Code Online (Sandbox Code Playgroud)

但是,包含的显示配置的 gnome 设置对话框正在运行。配置文件或命令行工具的提示会很好......

Flo*_*ane 7

正如@don_crissti 在评论中指出的那样,Mutter 文档指定了与 dbus 的接口:

https://gitlab.gnome.org/GNOME/mutter/blob/master/src/org.gnome.Mutter.DisplayConfig.xml

您需要找出您的配置序列号和连接器:

配置序列号是第一个数字

gdbus call \
--session \
--dest=org.gnome.Mutter.DisplayConfig \
--object-path /org/gnome/Mutter/DisplayConfig \
--method org.gnome.Mutter.DisplayConfig.GetResources
Run Code Online (Sandbox Code Playgroud)

在我的情况下uint32 3,所以我使用 3

连接器:它显示在 中ls /sys/class/drm,在我的情况下,通过反复试验,我发现这card0-DP-2是正确的,所以我使用DP-2. 您还可以尝试理解DisplayConfig.GetResources并使用它的输出。

通过设置其他选项,最终命令变成这样:

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', [] )] )]" "[]"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这对我不起作用,即使我以正确的格式传递分辨率(又名“模式 ID”):

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}')
Run Code Online (Sandbox Code Playgroud)

编辑:

我找到了原因,刷新率需要DisplayConfig.GetResources是报告的确切字符串。遗憾的是,它不允许您将想要的设置为刷新率!所以你必须59.810825347900391像这样使用一些任意的字符串:

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}')
Run Code Online (Sandbox Code Playgroud)

总之,这是非常有限的用途。应该有一种添加显示模式的方法,通过生成 CVT 或 GTF 计时,但看起来 DisplayConfig 没有相应的接口:(