博文

目前显示的是 2025的博文

NixOS中修复Wayland下Flameshot缩放异常

Flameshot 是一款功能强大且广受欢迎的开源截图工具,它提供了丰富的编辑功能,如标注、高亮、模糊、添加文本等,让用户在截取屏幕内容后能够直接进行快速编辑。在Linux下可以说是最强的截图工具。 遗憾的是, 在Wayland下,flameshot有一些恼人的问题,当屏幕缩放比例不是 100% 时,Flameshot的截图选取界面会将屏幕再次放大,导致截图区域不能覆盖整个屏幕,屏幕区域被裁切。Github仓库中关于这个问题的open issue: https://github.com/flameshot-org/flameshot/issues/5 问题根源 Wayland下Flameshot使用QT的QGuiAppCurrentScreen来获取屏幕尺寸、放大比率等信息。但Wayland下,由于对QT应用的放大处理比较特殊 ,这个API回报的信息不正确, 导致计算结果异常。 解决方案 在 NixOS 中,我们可以通过修改配置来解决 Flameshot 在 Wayland 下的缩放异常问题。核心思路是利用 Qt 应用程序的环境变量来调整其在 Wayland 下的行为。 根据 GitHub issue 中的讨论,Flameshot 在 Wayland 下的缩放异常主要源于 Qt 应用程序在 Wayland 合成器进行缩放时,无法正确获取或处理屏幕的实际缩放信息。一个有效的解决方案是手动设置 QT_SCALE_FACTOR 环境变量,强制 Qt 应用程序进行反向缩放,以抵消 Wayland 合成器带来的额外缩放。 QT_SCALE_FACTOR  这个环境变量用于控制 Qt 应用程序的整体缩放比例。如果你的系统显示缩放比例是 倍(例如,如果你设置了 150% 缩放,那么 x = 1.5 ),为了让 Flameshot 正常显示,你需要将其设置为 1/ x 。例如,如果你的屏幕缩放是 2 倍(200%),则 QT_SCALE_FACTOR 应该设置为 1/2 = 0.5 。这样,Flameshot 就会将其内部渲染缩小到一半,从而在经过 Wayland 合成器的放大后,最终显示为正确的尺寸。 ...