[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

更新

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

有朋友反馈v23正式版这样改会严重错误,所以不要再尝试这个方法了,有需求请@开发,正式开发这个功能!


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

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

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

  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
青稚
deepin
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
LINUX小白菜
deepin
2024-09-02 16:42
#11

截图_选择区域_20240902164613.png
截图_选择区域_20240902164147.png

Reply View the author
LINUX小白菜
deepin
2024-09-02 16:48
#12

麻烦楼主大神解救一下,不但没有缩放成功,反而没办法调整了,现在屏幕上的字体和比例无法调了。

Reply View the author
DebuggerX
deepin
2024-09-03 09:23
#13
LINUX小白菜

麻烦楼主大神解救一下,不但没有缩放成功,反而没办法调整了,现在屏幕上的字体和比例无法调了。

现在已经不用替换了啊,替换的反而是过时的版本,赶紧恢复吧😂

sudo mv /usr/bin/startdde_bak /usr/bin/startdde
rm ~/.config/deepin/force-scale-factor.ini

有人说现在这样修改已经不行了,可能是和某些更新的代码冲突了,所以就别尝试这个路子了吧……

Reply View the author
LINUX小白菜
deepin
2024-09-03 09:42
#14
DebuggerX

现在已经不用替换了啊,替换的反而是过时的版本,赶紧恢复吧😂

sudo mv /usr/bin/startdde_bak /usr/bin/startdde
rm ~/.config/deepin/force-scale-factor.ini

有人说现在这样修改已经不行了,可能是和某些更新的代码冲突了,所以就别尝试这个路子了吧……

非常感谢大神👍

Reply View the author