You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 23.10(GNOME/Wayland)下如何按应用程序单独禁用/自定义显示缩放?

Ubuntu 23.10(GNOME/Wayland)下如何按应用程序单独禁用/自定义显示缩放?

我来一步步帮你解决这个高DPI缩放的老难题,尤其是闭源XWayland应用的模糊问题,确实让人头疼。

一、命令行单独调整单个应用的缩放(重点解决XWayland应用)

你的闭源IDE跑在XWayland上,正好可以通过环境变量强制它用整数缩放(避免模糊),或者直接禁用缩放,这是最直接的解决方案:

1. 强制应用用200%整数缩放(清晰但界面偏大)

在终端里用下面的命令启动你的IDE:

GDK_SCALE=2 GDK_DPI_SCALE=1 /path/to/your/ide-executable

原理很简单:GDK_SCALE指定整数缩放因子,GDK_DPI_SCALE设为1时会忽略全局的 fractional 缩放规则,让应用自己按200%渲染,这样Mutter(GNOME的Wayland窗口管理器)不需要再对位图进行二次缩放,自然就清晰了。

2. 禁用缩放(界面偏小但清晰)

如果想让应用完全按100%显示,忽略全局的150%缩放,用这个命令:

GDK_SCALE=1 GDK_DPI_SCALE=1 /path/to/your/ide-executable

应用会按原生分辨率渲染,Mutter不会对它进行额外缩放,文字和UI元素都会非常清晰,只是尺寸会比其他应用小一圈。

注:如果你的IDE是Qt框架写的,把GDK_SCALE换成QT_SCALE_FACTOR即可,比如QT_SCALE_FACTOR=2 /path/to/ide

二、系统“Scale”设置到底在做什么?

你在Settings里设置的150% fractional scaling,本质是Mutter在处理两种不同类型的应用:

  • Wayland原生应用:Mutter会直接告诉应用当前的缩放因子(1.5),应用内部会用这个因子渲染矢量元素(文字、图标),所以不会模糊——这也是大部分应用能正常显示的原因。
  • XWayland应用:因为X11本身不支持 fractional 缩放,Mutter会耍个“小聪明”:先让X应用按200%(向上取整的整数)渲染,然后把这个2倍大小的窗口缩放到150%显示在屏幕上。这就是模糊的根源——位图经过二次缩放后,文字边缘会变得模糊。

三、能不能单独给某个应用设置不同的gsettings文本缩放因子?

可以的,而且不需要修改全局配置,用环境变量就能直接覆盖:

1. 快速方法:用GTK环境变量覆盖

对于GTK应用,直接用GDK_TEXT_SCALE_FACTOR环境变量就能单独设置文本缩放因子,比如让某个应用用1.0的文本缩放(忽略全局的文本缩放设置):

GDK_TEXT_SCALE_FACTOR=1 /path/to/your/app

2. 进阶方法:临时用独立的dconf配置

如果你一定要用gsettings的方式(比如某些非GTK应用),可以创建一个临时的dconf数据库来单独设置:

# 创建临时配置目录
mkdir -p ~/.tmp-dconf
# 初始化dconf数据库
dconf init ~/.tmp-dconf
# 设置文本缩放因子为1.0
dconf write --config ~/.tmp-dconf/org/gnome/desktop/interface/text-scaling-factor 1.0
# 用这个临时配置启动应用
GSETTINGS_BACKEND=dconf GSETTINGS_CONFIG_FILE=~/.tmp-dconf /path/to/your/app
# 清理临时文件
rm -rf ~/.tmp-dconf

不过这个方法比较繁琐,一般用上面的环境变量方法就足够了。

四、极端方案(如果上面的方法都无效)

要是你的闭源IDE特别顽固,不吃环境变量那一套,可以试试这些“偏方”:

  • 单独启动XWayland实例:在终端运行Xwayland :1启动一个独立的XWayland服务器,然后用DISPLAY=:1 /path/to/ide启动应用,之后可以用xrandr在这个实例里单独设置缩放(比如xrandr --output XWAYLAND0 --scale 2x2)。缺点是这个窗口的管理会有点奇怪,可能需要手动调整位置,但至少能解决模糊问题。
  • 临时切换全局缩放:写个脚本临时把全局缩放改成100%或200%,启动应用后再改回来:
#!/bin/bash
# 保存当前缩放因子
current_scale=$(gsettings get org.gnome.desktop.interface scaling-factor)
# 设置为1x缩放
gsettings set org.gnome.desktop.interface scaling-factor 1
# 启动应用
/path/to/your/ide
# 恢复原来的缩放
gsettings set org.gnome.desktop.interface scaling-factor $current_scale

这个方法的缺点是启动应用时,其他所有应用的缩放都会跟着变,体验不太好,但应急用没问题。

备注:内容来源于stack exchange,提问作者all content stolen

火山引擎 最新活动