sddm Steam 平台上的触摸坐标错误以及连接第二台显示器时出现乱码内容

sddm Steam 平台上的触摸坐标错误以及连接第二台显示器时出现乱码内容

我正在尝试在 Steam 平台上设置一个 Debian 即将被称为 Bookworm(在撰写本文时又称为“测试”)系统,使用 KDE Plasma 作为桌面环境,使用 sddm 作为登录名经理。到目前为止工作得很好,但仍然存在一些问题。例如,我目前正在尝试说服 sddm 在内置触摸屏和双显示器设置中都能很好地发挥作用。

一般来说:蒸汽甲板的触摸屏似乎具有800x1280的分辨率,并且其右边缘朝上。我添加了

xrandr --output eDP --rotate right

到 /usr/share/sddm/scripts/Xsetup 以使 sddm 以预期的横向显示。到目前为止,一切都还不错——尽管 xrandr 声称触摸屏的尺寸为 60 毫米 x 60 毫米,但这绝对是不正确的。

然而,问题是鼠标指针无法正确跟随触摸移动。当水平滑动时,指针垂直移动,反之亦然——就像两者在彼此垂直的两个坐标系中工作一样。一旦 KDE Plasma 会话运行,触摸操作就可以正常工作——鼠标完美地跟随触摸。

问题#1:如何使 sddm / X / xinput (或其他可能负责的人)将触摸坐标转换为正确的指针坐标?

第二个问题:在连接了外部高清显示器的情况下启动 Steam 甲板时,sddm 在外部屏幕上显示良好,但只有最左边的三分之二的内置屏幕似乎正确显示了 sddm UI 的一部分;该区域的其余部分似乎被主题背景的其他部分占据。

问题#2:嗯……这是怎么回事?!任何想法如何第二个显示器的存在可以使 sddm 限制自己只使用第一个显示器上可用空间的三分之二 - 以及如何解决这个问题?

答案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_builtIn = 1280x800 且 r_external = 1920x1080 时,x 和 y 缩放因子计算如下

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

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

相关内容