해상도를 재설정하는 다양한 프로그램이나 모니터를 대기 상태로 만드는 게임과 관련된 다양한 문제로 인해 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
글쎄, 잠시 생각한 후에 마침내 /tmp
로그아웃 시 더미 파일을 삭제하는 WM 기반의 간단한 솔루션을 결정했습니다.
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 서버가 종료되는 즉시 삭제되어야 합니다.)
이것이 절대적으로 최선의 해결책은 아닐 수도 있지만 충분히 훌륭하고 예상대로 작동할 것입니다.