私はデスクトップ環境として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であると主張していますが、これは確かに正確ではありません。
しかし、問題はマウスポインタがタッチ操作に正しく従わないことです。水平にスワイプするとポインタが垂直に移動し、その逆も同様です。 2つのポインタが互いに垂直な2つの座標系で作業しているのと同じです。 KDEプラズマセッションが実行されると、タッチ操作は正しく機能します。マウスはタッチに完全に従います。
Q1:タッチ座標を正しいポインタ座標に変換するには、sddm / X / xinput(または他の責任者)をどのように取得する必要がありますか?
2番目の問題:外部HDモニタが接続されているSteamデッキを実行すると、sddmが外部画面に正しく表示されますが、内蔵画面の左端の2/3だけがその領域のsddm UIの一部を正しく表示するように見えます。テーマの異なる部分が背景の異なる部分を占めるように見えます。
質問#2:ええと…どうしたの? ! 2番目のモニターがある場合、sddmは最初のモニターで使用可能なスペースの3分の2しか使用できないという考えがありますか?そして、これを解決する方法は何ですか?
答え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°回転させるだけで十分ですが、2つのモニターを接続する場合は、結合された(仮想)モニターではなく内蔵モニターとのみ一致するようにサイズを小さくする必要があります。ディスプレイサイズ。解像度 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