[Share Experiences] 分享让用户可以自己强制指定系统缩放的方法
Tofloor
poster avatar
DebuggerX
deepin
2023-04-24 01:34
Author

我的办公环境使用的双屏,使用方式可能略显“奇葩”:

微信图片_20230423164536.png

工作时主要使用的是主屏4K显示器,副屏是竖放的1080p显示器,只用来放些简单的东西,比如手机的投屏界面。

之前的版本里,我可以先在“只显示4K屏”模式下设置系统缩放为1.5,然后再切换到扩展模式来正常使用,但是最新的20.9更新后,这个方法失效了,即使通过dbus绕过控制中心直接设置系统缩放,重启后也会失效:

[硬件] 双屏显示设置扩展模式后屏幕缩放只能1.25和拖动应用不能自适应

上周比较忙,强忍着用了几天,然后又看到了这个帖子:

[问题求助] 不一样的双屏,适配小的?

昨天休息,晚上抽时间追了下代码,确定是如下逻辑导致的:

https://github.com/linuxdeepin/startdde/blob/5e3fb76061821312b5901822a45347d28a4a436a/display/xorg.go#L101-L109

minScaleFactor := 3.0
for _, monitor := range monitors {
	scaleFactor := calcRecommendedScaleFactor(float64(monitor.width), float64(monitor.height),
		float64(monitor.mmWidth), float64(monitor.mmHeight))
	if minScaleFactor > scaleFactor {
		minScaleFactor = scaleFactor
	}
}
return minScaleFactor

具体来说就是 startdde 启动的时候会检查用户先前设置的系统缩放,如果这个值不是默认值(1.0),最终会判断当前所有的屏幕,用最小的那个屏幕的“推荐缩放”来覆盖系统缩放。显然,我的1080p屏幕的推荐缩放就是1.0,所以一旦重启系统缩放就会失效……

所以我对 startdde做了如下修改:feat: 允许用户通过 force-scale-factor.ini 强制设置全局缩放

当前启动时会根据分辨率最小的屏幕设置全局缩放,这在某些场景下可能并不是用户想要的,比如用户有个高分屏是主屏幕,还有一个低分屏只用来看点简单的信息,当前的模式就会导致用户的主屏也无法正常以全局缩放模式正常使用。 该PR允许用户编辑 ~/.config/deepin/force-scale-factor.ini为如下内容,强制系统的全局缩放:

[ForceScaleFactor]
scale=1.5

更新

最新的内测已经有这些代码了,直接编辑配置文件即可,不需要下面的操作!!!


建议有能力的用户还是自己从代码编译,startdde编译起来还是很简单方便的。

如果确实不方便自己编译修改的,可以试试我修改的版本,但请务必认真阅读下面的每一步,且不能保证在你的机器上没问题,有可能出问题系统就起不来了:

  1. 终端执行 dpkg -l | grep startdde,确保版本号是 5.9.70-1

    image.png

  2. 下载附件的startdde.zip,解压

  3. 在解压出的文件目录中打开终端,执行如下命令:

    chmod a+x ./startdde
    sudo mv /usr/bin/startdde /usr/bin/startdde_bak
    sudo mv ./startdde /usr/bin/
    
  4. 创建 ~/.config/deepin/force-scale-factor.ini文件,修改为如下内容(修改为想要的缩放值):

    [ForceScaleFactor]
    scale=1.5
    
  5. 执行如下命令强制设置一次缩放(修改为想要的缩放值):

    dbus-send --type=method_call --dest=com.deepin.daemon.Display /com/deepin/XSettings com.deepin.XSettings.SetScaleFactor double:1.5
    
  6. 重启机器测试效果。

Reply Favorite View the author
All Replies
云的眼泪
deepin
2023-04-24 01:47
#1

like

Reply View the author
青稚°
Moderator
2023-04-24 04:10
#2

为你点赞。

Reply View the author
hanzn-zzx
deepin
2023-04-24 05:51
#3

like

Reply View the author
呜喵王
deepin
2023-04-24 19:08
#4

like

Reply View the author
阿尼樱奈奈
Moderator
2023-04-24 19:11
#5

👍🏻👍🏻👍🏻

Reply View the author
Amber
deepin
2023-04-24 20:51
#6

大佬nb!

Reply View the author
winee
deepin
2023-04-29 00:20
#7

like

Reply View the author
debug_u
deepin
2023-10-03 14:45
#8

大佬威武,看了这个帖子,双屏终于可以正常用了。

Reply View the author
deepin
2023-10-06 06:48
#9

大佬,有没有办法双屏分开设置?不然这么设置,小分辨率的也缩放的话,看着也很难受😭

Reply View the author
DebuggerX
deepin
2023-10-07 18:17
#10

大佬,有没有办法双屏分开设置?不然这么设置,小分辨率的也缩放的话,看着也很难受😭

X11完全不支持,Wayland能够支持,但就我而言Wayland还不够成熟可用,而且我对它最少未来几年的发展持悲观态度,所以结论是,要么小屏只做预览和监控使用,要么换掉小屏用dpi更高的屏幕


或者你可以试试一些骚操作,先利用xrandr强行让小屏“放大”到更高的渲染分辨率上去,然后再由系统全局缩放,一正一负从而得到相对合适的大小,具体原理和操作可以参考Fcitx5作者写的这篇博客:Linux 的 HiDPI 配置问题

不过我之前这样玩过,体验是画面很糊,性能差,会出现屏幕撕裂和鼠标消失(这个问题通过设置scale为1.999这样的非整数可以改善)的情况,所以也并不是很推荐。

Reply View the author