[Linux][Wayland][GNOME/Mutter] Workaround for Native Pen/Touch Support coordinates misaligned with multiple displays

オープン
#5,592 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
42/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
活発
技術スタック
cpp, linux

調査の方向性

まず、説明されている XDG Portal Grab セットアップを使用して、GNOME/Mutter と複数のディスプレイを備えた Linux Wayland 上でネイティブなタッチスクリーン入力を再現します。文書化されている GSettings コマンドで Sunshine のタッチスクリーンを出力に割り当てる前後の座標の挙動を比較します。システム固有の手動ワークアラウンドを必要とせず、タッチ座標がストリーミングされたディスプレイと一致すれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Is there an existing issue for this?
  • I have searched the existing issues
Is your issue described in the documentation?
  • I have read the documentation
Is your issue present in the latest beta/pre-release?

This issue is present in the latest pre-release

Describe the Bug

By default on GNOME/Mutter running Wayland, native touchscreen input from Moonlight can be spatially misaligned when multiple displays are connected.

The issue is not specific to Mutter virtual monitors. I encountered it while streaming to a Mutter virtual monitor and XDG Portal Grab, I had previously experienced the same touchscreen misalignment with a physical display created using a dummy HDMI/DP adapter and KMS capture.

Expected Behavior

Touch input should be mapped to the display being streamed, with the touch coordinates corresponding to the same physical/logical positions shown by Moonlight.

With multiple displays connected, touch input should not be offset or interpreted relative to another display.

Additional Context

here is a confirmed workaround on GNOME/Mutter that fixes the touchscreen alignment.

Mutter has a per-device touchscreen output setting that can explicitly associate a touchscreen with a specific display.

For example, on my system:

gsettings set \
  'org.gnome.desktop.peripherals.touchscreen:/org/gnome/desktop/peripherals/touchscreens/1209:0004/' \
  output "['MetaVendor', 'MetaVirtualMonitor', '0x00']"

After assigning the Sunshine touchscreen to the correct output, native touch coordinates from Moonlight are correctly aligned with that display.

The device ID and output tuple are system-specific. The values above correspond to my setup; physical displays will have their own output identity. For example, my Mutter virtual monitor exposes:

['MetaVendor', 'MetaVirtualMonitor', '0x00']

The important part is the explicit association between the Sunshine touchscreen and the output being streamed.

This also indicates that the issue is not inherently caused by virtual displays. I have reproduced the same touchscreen misalignment with a physical display created through a dummy HDMI/DP adapter and KMS capture. The common factor is having multiple outputs while using absolute/native touchscreen input.

The touchscreen itself appears to provide usable absolute coordinates; explicitly changing the Mutter output association changes the coordinate mapping and fixes the problem.

I am not suggesting that Sunshine necessarily needs to implement this exact GSettings mechanism. The purpose of this report is to document the confirmed GNOME/Mutter workaround and provide a concrete lead for determining where the appropriate long-term fix belongs.

There are also reports of similar multi-display touchscreen issues under other Wayland compositors, including KDE Plasma/KWin, but I have not independently verified an equivalent fix there, so I am not making a claim about the KDE implementation.

The main confirmed finding here is:

On GNOME/Mutter Wayland, explicitly mapping the Sunshine touchscreen device to the intended output fixes native touchscreen misalignment with multiple displays.

Host Operating System

Linux

Operating System Version

Arch Linux

Architecture

other, n/a

Package

Linux - flathub/flatpak

GPU Type

n/a

GPU Model

n/a

GPU Driver/Mesa Version

n/a

Capture Method

XDG Portal Grab (FreeBSD/Linux)

Apps

Log output

Online logs

No response

主要言語
C++
スター
43k
フォーク
2.4k
平均マージ
1日 15時間
マージ済み PR(30日)
105

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

LizardByte/Sunshine のほかの issue

LizardByte/Sunshine の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。