sddm Steam 플랫폼의 터치 좌표가 잘못되고 두 번째 모니터에 연결할 때 콘텐츠가 깨집니다.

sddm Steam 플랫폼의 터치 좌표가 잘못되고 두 번째 모니터에 연결할 때 콘텐츠가 깨집니다.

나는 데스크톱 환경으로 KDE Plasma를 사용하고 로그인 관리자로 sddm을 사용하여 Steam 플랫폼에서 곧 Bookworm이라고 불리는 Debian 시스템을 설정하려고 합니다. 지금까지 잘 작동했지만 여전히 몇 가지 문제가 있습니다. 예를 들어, 저는 현재 sddm이 내장 터치스크린과 듀얼 모니터 설정 모두에서 잘 작동하도록 설득하려고 노력하고 있습니다.

일반적으로 Steam Deck의 터치스크린 해상도는 800x1280이며 오른쪽 가장자리가 위를 향하고 있는 것으로 보입니다. 나는 추가했다

xrandr --output eDP --rotate right

/usr/share/sddm/scripts/Xsetup에 추가하여 sddm이 예상되는 가로 방향으로 표시되도록 합니다. 지금까지는 아주 좋습니다. xrandr는 터치스크린의 크기가 60mm x 60mm라고 주장하지만 이는 확실히 정확하지 않습니다.

그러나 문제는 마우스 포인터가 터치 동작을 올바르게 따르지 않는다는 것입니다. 수평으로 스와이프하면 포인터가 수직으로 이동하고 그 반대도 마찬가지입니다. 마치 두 포인터가 서로 수직인 두 좌표계에서 작업하는 것과 같습니다. KDE 플라즈마 세션이 실행되면 터치 작업이 제대로 작동합니다. 마우스가 터치를 완벽하게 따라갑니다.

질문 #1: 터치 좌표를 올바른 포인터 좌표로 변환하려면 sddm/X/xinput(또는 다른 책임자)을 어떻게 구해야 합니까?

두 번째 문제: 외부 HD 모니터가 연결된 Steam 데크를 실행하면 sddm이 외부 화면에 제대로 표시되지만 내장 화면의 가장 왼쪽 2/3만 해당 영역의 sddm UI 일부를 올바르게 표시하는 것으로 나타납니다. 테마의 다른 부분이 배경의 다른 부분을 차지하는 것처럼 보입니다.

질문 #2: 음... 무슨 일이죠? ! 두 번째 모니터가 있으면 sddm이 첫 번째 모니터에서 사용 가능한 공간의 2/3만 사용하도록 제한될 수 있다는 아이디어가 있습니까? 그리고 이를 해결하는 방법은 무엇입니까?

답변1

문제 #2가 해결되었습니다. 내장 화면의 회전을 조정하는 것 외에도 --fb전체 화면 크기를 확장하는 옵션도 사용해야 했습니다.

작업 순서 /usr/share/sddm/scripts/Xsetup는 다음과 같습니다.

xrandr --fb 3200x1080 --output eDP --mode 800x1280 --rotate right --right-of DisplayPort-0

2023-02-23 편집: 문제 #2도 해결되었습니다!

문제 #1(터치 좌표를 기준으로 한 포인터 좌표계 회전)이 여전히 존재합니다.

2023-02-23 편집: 문제 #1도 해결되었습니다! 조금의 도움을 받아https://crocidb.com/post/investigating-touchscreen-issue-steam-deck/그리고 선형 대수학을 사용하여 다음과 같은 코드 줄을 생각해 냈습니다 /usr/share/sddm/scripts/Xsetup.sh.

EXTERNAL_SCREEN_STATUS=$( xrandr | grep 'DisplayPort' | awk '{print $2}' )
TOUCHSCREEN_ID=$( xinput | grep 'FTS3528' | head -n 1 | awk '{print $5}' | sed 's/id=//g' | grep [0-9] )

if [ "$EXTERNAL_SCREEN_STATUS" == "connected" ]; then
    xrandr  --fb 3200x1080 \
            --output eDP --mode 800x1280 --rotate right \
            --output DisplayPort-0 --mode 1920x1080 --right-of eDP
    xinput set-prop $TOUCHSCREEN_ID 'Coordinate Transformation Matrix' 0 0.4 0 -0.741 0 0.741 0 0 1
else
    xrandr --output eDP --mode 800x1280 --rotate right
    xinput set-prop $TOUCHSCREEN_ID 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1
fi

외부 디스플레이 연결 여부에 따라 터치 좌표에 다른 변환 행렬을 적용해야 합니다. 외부 모니터가 없을 경우 터치 좌표를 90° 회전시키면 충분하지만, 두 개의 모니터를 연결하는 경우 결합된(가상) 모니터가 아닌 내장 모니터와만 일치하도록 크기를 줄여야 합니다. 디스플레이 크기. 해상도 r_buildIn = 1280x800 및 r_external = 1920x1080인 경우 x 및 y 배율 인수는 다음과 같이 계산됩니다.

s_x = r_buildin,x / (r_buildin,x + r_external,x) = 1280 / (1280 + 1920) = 0.4

s_y = r_buildin,y / (r_buildin,y + r_external,y) = 800 / (800 + 1080) = 0.741

관련 정보