修复Linux下Flameshot在4k/5k屏幕下无法正常截图的问题
修正Linux高分屏非整数倍缩放时无法正常使用flameshot截图/黑屏等问题。说到头还是QT DPI awareness的锅。
Flameshot的高分辨率屏幕bug
使用Flameshot期间发现了最新版(v0.10.1 - 4e406ec)在Linux环境下安装了以后没办法正常截图。表现为一旦点截图,屏幕全黑——是直接black screen,屏幕信号消失。狂按ESC后恢复。
恢复以后再次点截图到是不黑屏了,但是可截图区域只有实际屏幕大小的1.5倍(此处猜测和QT程序在非整数倍缩放有关),而我此刻缩放比例恰恰是设置在了150%
确认Bug
Opensource最大的好处就是源码随便看,这个截图程序本来就不大,我看了一下发现大部分和截图操作有关的逻辑都是Qt写的:
flameshot/screengrabber.cpp at master · flameshot-org/flameshot
Powerful yet simple to use screenshot software :desktop_computer: :camera_flash: - flameshot/screengrabber.cpp at master · flameshot-org/flameshot
同时我看到open ticket当中也有人反馈类似的问题:
Fails when fractional scaling <> 100% · Issue #564 · flameshot-org/flameshot
Ubuntu 19.04 supports fractional scaling on Wayland and Xorg. When using a factor that is not the default (like 150%, for instance on a HiDPI display), and trying to capture a screenshot with flame...
2019年有人提出这个bug开始,这个问题一直都没有被修复。
修复Flameshot的尝试
先尝试了设置系统缩放=100%和200%,4K/5K屏幕下Flameshot均能正常使用。基本说明猜测八九不离十是没错的了。
这个问题的根本原因是Qt对非整数倍缩放支持一直都有问题,Qt 5.6后来加入了DPI awareness去解决这个问题。但是因为各种原因很多软件并没有开启支持:
QT_AUTO_SCREEN_SCALE_FACTOR
[boolean] enables automatic scaling, based on the monitor's pixel density. This won't change the size of point-sized fonts, since point is a physical measurement unit. Multiple screens may get different scale factors.
– Source: https://doc.qt.io/qt-5/highdpi.html
而根据作者的信息我们可以清楚的知道flameshot所用的Qt肯定是>= 5.6的,也就是肯定是支持DPI awareness的。

所以只要:
# 带QT_AUTO_SCREEN_SCALE_FACTOR=1启动
env QT_AUTO_SCREEN_SCALE_FACTOR=1 flameshot
# 测试是否可以正常使用
# 如果一切正常+别的软件没问题问题,可以考虑加到系统.profile文件中
echo "export QT_AUTO_SCREEN_SCALE_FACTOR=1" >> ~/.profile
重启,问题解决。
文中的截图就是Gnome 40+150%缩放截的,所有功能全部正常。就是稍微有点卡。