由于各种程序重置我的分辨率或游戏使我的显示器处于待机状态的各种问题,我有一个使用 xrandr 来配置我的显示器的会话脚本...
目前,此脚本只能将每个显示器的分辨率从 1280x1024 缩放到 1600x1280,但是像这样将较低的分辨率缩放到较高的分辨率会降低整体显示质量,因此我想将其设置为实际模式...
然而问题是这个脚本被多次调用(当全屏游戏或自认为比你更了解的程序破坏 xorg 时),并且我只能测试每个显示器的模式...
这意味着在最坏的情况下,xrandr --newmode
每个监视器每次运行都会被重复调用。
有没有办法可以检查该模式是否已在 xrandr 中定义,以便我可以检查该模式是否可以应用于每个监视器?
modeline = <modeline>
outputmode = ${modeline[0]}
if [[ <!mode_exists> ]]; then
xrandr --newmode $modeline
fi
while IFS= read -r line; do
...
# this part just for context and is already doable
if [[ <!outputmode_exists> ]]; then
xrandr --addmode $output $outputmode
fi
done <<< $(xrandr -d $DISPLAY | tail -n +2)
xrandr -fb <screensize> \
--output <output1> --mode $outputmode ... --primary --preferred \
--output <output2> --mode $outputmode ... \
...
--newmode
我如何检查模式是否存在,这样如果模式已经定义,我就不需要调用?
答案1
好吧,经过一段时间的思考,我最终决定采用一个基于我的 WM 的简单解决方案,在/tmp
注销时删除一个虚拟文件:
modeline = <modeline>
outputmode = ${modeline[0]}
if [ ! -f "/tmp/.xrandr$DISPLAY" ]; then
touch "/tmp/.xrandr$DISPLAY"
xrandr --newmode $modeline
xrandr --addmode $outputmode
fi
xrandr -fb <screensize> \
--output <output1> --mode $outputmode ... --primary --preferred \
--output <output2> --mode $outputmode ... \
...
现在,每当我运行脚本时,只要该文件存在,它就不会添加新模式。
(只要特定的 X 服务器终止,就应该删除它)
这可能不是绝对的最佳解决方案,但它足够好,应该可以按预期工作。