问题背景
公司软件需要从window 适配国产操作系统,目前使用wine方案。在我们软件有个切换屏幕模式的功能,需要支持用户在我们软件内,切换复制模式/扩展模式。
在linux 下 uos/deepin 等系统。如果要从复制模式设置为扩展模式使用命令行时,需要指定屏幕在系统中设置的左右位置。才能从复制模式切换为扩展模式。
解决方案
使用dbus-send
命令行进行复制/扩展模式切换。不需要指定左右屏幕。完全使用系统【显示设置】的功能。如下图:
切换屏幕模式命令行
dbus-send --print-reply --dest=com.deepin.daemon.Display /com/deepin/daemon/Display com.deepin.daemon.Display.SwitchMode byte:模式值 string:'屏幕名称'
示例1:仅在HDMI-A-0屏幕显示
dbus-send --print-reply --dest=com.deepin.daemon.Display /com/deepin/daemon/Display com.deepin.daemon.Display.SwitchMode byte:3 string:‘HDMI-A-0’
示例2:切换复制模式
dbus-send --print-reply --dest=com.deepin.daemon.Display /com/deepin/daemon/Display com.deepin.daemon.Display.SwitchMode byte:1 string:‘’
示例3:切换扩展模式
dbus-send --print-reply --dest=com.deepin.daemon.Display /com/deepin/daemon/Display com.deepin.daemon.Display.SwitchMode byte:2 string:‘’
参数说明
参数1:切换模式
byte: 1(复制模式)2(扩展模式)3:(指定屏幕显示)
参数2:屏幕名称
string: 在byte类型为3时,会使用此值。
注意:参数1(byte)设置为:1,2时不会使用到屏幕名称
调整屏幕亮度
dbus-send --print-reply --dest=com.deepin.daemon.Display /com/deepin/daemon/Display com.deepin.daemon.Display.SetBrightness string:'屏幕名称' double:亮度值
示例:把eDP屏幕亮度设置为80%
dbus-send --print-reply --dest=com.deepin.daemon.Display /com/deepin/daemon/Display com.deepin.daemon.Display.SetBrightness string:‘eDP’ double:0.8
隐藏任务栏
dbus-send --print-reply --type=method_call --dest=com.deepin.dde.daemon.Dock /com/deepin/dde/daemon/Dock org.freedesktop.DBus.Properties.Set string:'com.deepin.dde.daemon.Dock' string:'HideMode' variant:int32:1
显示任务栏
dbus-send --print-reply --type=method_call --dest=com.deepin.dde.daemon.Dock /com/deepin/dde/daemon/Dock org.freedesktop.DBus.Properties.Set string:'com.deepin.dde.daemon.Dock' string:'HideMode' variant:int32:0