修复 Edge/Chrome 在 GNOME 分数缩放下的窗口位置问题
从上周开始,老莱弄了个“Daily Driver CHALLENGE”的挑战,还弄出了装个 Steam 把桌面卸掉了的笑话,弄得众人都发笑起来 —— 当然,笑的是 Pop!_OS,不是老莱。毕竟能让一个普通用户装个包就自动把桌面卸掉,怎么想都不合理。
于是从11月22日开始,我也学老莱进行了 Linux 挑战,把 Linux(确切地说是 Ubuntu 21.10)作为台式的主力系统使用30天。更多细节暂时按下不表,改日再写文章细细道来。这篇文章是要介绍分数缩放下 GNOME 的一个坑,并且给出解决办法。
分数缩放引发的各种BUG是咱们的老熟人了,不管是Windows还是Linux,你要是但敢开125%或者150%或者225%这种缩放,那就等着被无穷无尽的BUG淹没吧:轻则画面模糊,重则弄崩桌面。这次遇到的问题是“越开越小的窗口”:在 非整数倍缩放的时候。Edge 没办法正确记忆窗口大小。准确地说,他记忆了,然后打开的时候忘了按倍数缩放...结果关了在打开,越打开越小... 看下面的视频你就明白了
一开始我写了个脚本用 wmctrl 在 Edge 打开的时候自动把窗口放大到原来的2倍,但是如果关闭前Edge窗口为最大化状态,再次启动时就没办法放大,因为本来就是最大化。所以换了一个思路,直接修改Edge的配置文件里记录的窗口大小和位置,启动前修改好或者关闭后修改都行。
#!/bin/bash
wininfo=$(cat ~/.config/microsoft-edge/Default/Preferences)
top=$(jq -r .browser.window_placement.top <<< "$wininfo")
bottom=$(jq -r .browser.window_placement.bottom <<< "$wininfo")
left=$(jq -r .browser.window_placement.left <<< "$wininfo")
right=$(jq -r .browser.window_placement.right <<< "$wininfo")
#echo $top,$bottom,$left,$right
if [[ ! $top -le 0 ]]; then
top=$((top*2))
else
top=$((top/2))
fi
if [[ ! $left -le 0 ]]; then
left=$((left*2))
else
left=$((left/2))
fi
cat ~/.config/microsoft-edge/Default/Preferences | jq '.browser.window_placement.top='$top' | .browser.window_placement.left='$left' | .browser.window_placement.right='$((right*2))' | .browser.window_placement.bottom='$((bottom/100*199)) > ~/.config/microsoft-edge/Default/PreferencesGen
mv ~/.config/microsoft-edge/Default/PreferencesGen ~/.config/microsoft-edge/Default/Preferences
想办法让上面的代码在 Edge 关闭后或者启动前运行即可,我是直接改了 /usr/bin/microsoft-edge 这个脚本。希望这个 BUG 能早日被修复。
2021年11月29日更新:Edge升级到96版本之后该BUG已经消失,脚本仅服役了2天就正式退役 23333