我希望有人能够帮助我,因为我正在失去神经。我正在开发 F37 Silverblue + Wayland / X11。系统有 nVidia Optimus,带有专有的 nVidia 驱动程序(不是 Nouveau)。
最近购买了外部触摸屏显示器来帮助我进行设置。该显示器名义上通过 HDMI 或 USB-C 支持高达 1080p 的分辨率(但我没有支持 USB-C 的视频输出,所以我必须使用 HDMI)。触摸屏输出通过 USB 电缆发送,并通过同一电缆接收电力。
====== 通过 HDMI 强制特定 (60Hz) 刷新率 ======
我注意到这款显示器最持久的问题是,它拒绝将自己设置为 59 或 60 Hz 之外的任何刷新率(尽管它报告说它支持高达 120 Hz - 我可以在 Gnome 设置中选择此设置,但要徒劳无功)。
这对我来说没问题,除非当我尝试镜子笔记本电脑显示屏(也是 1080p)时,显示器关闭并显示未找到输入设备。现在,同样的问题发生在延伸如果我尝试将其设置为 120 / 100 / 50 / 30 / 29 / 等赫兹。
我认为问题在于,当我尝试镜像显示器时,Fedora / Gnome / 任何人都试图将显示器恢复到 120 Hz(因为理论上这就是它最大支持的信号)。这使得它拒绝输入信号并拒绝显示任何内容。或者,Gnome 可能会尝试克隆我的集成笔记本电脑显示器的刷新率,奇怪的是,它设置为 60.02 Hz,因此它高于 60 Hz,因此它也会被拒绝。
不幸的是,在镜像时,我无法设置(60Hz)刷新率——Gnome 设置中没有这样的选项。只有当我使用外接显示器来扩展显示时,我才能做到这一点。
我注意到的另一个奇怪的事情是,如果我降低外部触摸屏显示器的分辨率(例如 1440 x 900),我现在可以克隆显示器并将其用作触摸屏 - 但当然,图像看起来很糟糕。
我该如何诊断这个问题,特别是强制/限制 HDMI 仅以 60 Hz 输出,无论显示器支持什么信号?
====== 触摸屏输出的持久重新映射 ======
我的第二个问题是触摸屏。它始终有效(即使显示器本身没有显示任何内容,也会发出触摸输出),检测多个手指等。问题是它总是以某种方式映射到我的笔记本电脑屏幕。因此,我可以盲目地触摸和拖动出现在笔记本电脑主显示屏上的窗口等,但我在外部触摸屏显示器上看不到它们。并且出现在外部触摸屏显示器上的窗口不受触摸影响(即因为它映射在主显示器上)。
无论我将外部触摸屏显示器放在 Gnome 设置中的哪个位置(笔记本电脑屏幕的左侧、右侧、上方、下方),或者选择它作为主显示器还是辅助显示器,触摸屏输出都会持续映射到笔记本电脑显示器。只有当我关闭笔记本电脑显示器时,图像才会仅显示在外部触摸屏显示器上,然后我才能将其用作触摸设备 - 但随后我有一个显示器未用于任何用途。
当然,如果我降低分辨率,我可以克隆显示器,然后触摸输出对应于屏幕上显示的内容 - 但它看起来很糟糕。
我在某个地方发现 Fedora / Wayland 使用 mutter 发送触摸输入 - 但我找不到任何地方如何像 xinput 那样配置 mutter。
我想问题是:如何一致地将触摸屏重新映射到适当的显示器?
====== X11 ======
如果我在 Xorg 下登录,我无法将任何内容输出到外部触摸屏。没有任何效果,也没有降低分辨率,降低/设置刷新率,没有任何效果。只有触摸屏手指输出有效,可能是因为它是某种单独的设备。
这是以下的输出xrandr
:
[username]@fedora37 ~]$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
1920x1080 60.02*+ 60.01 59.97 59.96 59.93
1680x1050 59.95 59.88
1400x1050 59.98
1600x900 59.99 59.94 59.95 59.82
1280x1024 60.02
1400x900 59.96 59.88
1280x960 60.00
1440x810 60.00 59.97
1368x768 59.88 59.85
1280x800 59.99 59.97 59.81 59.91
1280x720 60.00 59.99 59.86 59.74
1024x768 60.04 60.00
960x720 60.00
928x696 60.05
896x672 60.01
1024x576 59.95 59.96 59.90 59.82
960x600 59.93 60.00
960x540 59.96 59.99 59.63 59.82
800x600 60.00 60.32 56.25
840x525 60.01 59.88
864x486 59.92 59.57
700x525 59.98
800x450 59.95 59.82
640x512 60.02
700x450 59.96 59.88
640x480 60.00 59.94
720x405 59.51 58.99
684x384 59.88 59.85
640x400 59.88 59.98
640x360 59.86 59.83 59.84 59.32
512x384 60.00
512x288 60.00 59.92
480x270 59.63 59.82
400x300 60.32 56.34
432x243 59.92 59.57
320x240 60.05
360x202 59.51 59.13
320x180 59.84 59.32
DP-1-0 disconnected (normal left inverted right x axis y axis)
DP-1-1 disconnected (normal left inverted right x axis y axis)
HDMI-1-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 600mm x 340mm
1920x1080 60.00 + 120.00* 100.00 60.00 59.94 50.00 29.97 25.00 23.98
1440x900 59.89
1400x1050 59.98
1280x1024 75.02 60.02
1280x960 60.00
1280x720 60.00 59.94 50.00
1024x768 75.03 70.07 60.00
800x600 75.00 72.19 60.32 56.25
640x480 75.00 72.81 59.94
1280x1024 (0x50) 108.000MHz +HSync +VSync
h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 63.98KHz
v: height 1024 start 1025 end 1028 total 1066 clock 60.02Hz
1280x960 (0x53) 108.000MHz +HSync +VSync
h: width 1280 start 1376 end 1488 total 1800 skew 0 clock 60.00KHz
v: height 960 start 961 end 964 total 1000 clock 60.00Hz
1024x768 (0x61) 65.000MHz -HSync -VSync
h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36KHz
v: height 768 start 771 end 777 total 806 clock 60.00Hz
800x600 (0x70) 40.000MHz +HSync +VSync
h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz
v: height 600 start 601 end 605 total 628 clock 60.32Hz
800x600 (0x71) 36.000MHz +HSync +VSync
h: width 800 start 824 end 896 total 1024 skew 0 clock 35.16KHz
v: height 600 start 601 end 603 total 625 clock 56.25Hz
640x480 (0x7d) 25.175MHz -HSync -VSync
h: width 640 start 656 end 752 total 800 skew 0 clock 31.47KHz
v: height 480 start 490 end 492 total 525 clock 59.94Hz
我更喜欢通过 Wayland 来解决这些问题,但 X11 是第二好的选择。有没有 GUI 工具可以解决此类问题?我还是个新手。
答案1
想象一下,但我设法解决了它。不幸的是,这只能通过 X11 来解决。
X11下的解决方案:
1. 将nVidia设为主显卡,以避免切换和黑屏/外屏无输入信息:
首先,您需要切换到X11。注销并在登录屏幕中,单击您的用户名后,右下角应该会出现一个小齿轮。单击它并选择GNOME on Xorg
。
然后你需要编辑你的nvidia.conf文件。在 Silverblue 上执行此操作有点困难,因为 root 被锁定。但是您可以通过进入终端并输入 来编辑根文件系统sudo rpm-ostree admin unlock --hotfix
。该--hotfix
标签会“永久”保留您对根文件系统所做的更改,即 rpm-ostree 不会恢复到旧快照,并且不会恢复到 nvidia.conf 的未修改版本。
不要让编辑根文件系统成为一种习惯。避免它,就像你的生命依赖它一样。不可变发行版锁定它是有充分理由的。
然后将 nvidia.conf 从 /usr 复制到 /etc:sudo cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf
找到新复制的文件并进行编辑sudo nano nvidia.conf
。它应该看起来像这样:
#This file is provided by xorg-x11-drv-nvidia
#Do not edit
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "SLI" "Auto"
Option "BaseMosaic" "on"
EndSection
Section "ServerLayout"
Identifier "layout"
Option "AllowNVIDIAGPUScreens"
EndSection
将其添加到每个部分:Option "PrimaryGPU" "yes"
。
所以:
#This file is provided by xorg-x11-drv-nvidia
#Do not edit
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "SLI" "Auto"
Option "BaseMosaic" "on"
Option "PrimaryGPU" "yes"
EndSection
Section "ServerLayout"
Identifier "layout"
Option "AllowNVIDIAGPUScreens"
Option "PrimaryGPU" "yes"
EndSection
保存,退出,然后重新启动。这将迫使X11使用nVidia作为主显卡。您可以通过在终端中输入:来检查这一点glxinfo | egrep "OpenGL vendor|OpenGL renderer"
。如果在 OpenGL 供应商和渲染器下都显示 nVidia,那么您就可以开始了。
2. 强制外部显示器刷新率:
现在您已经强制使用 nVidia 驱动程序,使用外部显示器应该会容易得多。它甚至可能按预期显示和工作。
但如果没有,可能可以通过修复xrandr
。输入(或者首先在工具箱/终端/发行版/使用 dnf / 使用 apt / 使用 rpm-ostree / 等等安装),xrandr
你应该得到你的主计算机/笔记本电脑屏幕以及连接到 HDMI 的外部屏幕。就我而言,它显示为HDMI-0。
要强制分辨率和刷新率,您可以使用 xrandr,如下所示:xrandr --output HDMI-0 --mode 1920x1080 --rate 60
。--mode
处理分辨率,--rate
处理刷新率。请注意,您的屏幕可能支持 59.94 或其他一些奇怪的刷新率。当键入不带任何参数的 xrandr 时,会显示支持的(理论上)。
如果成功,您的外部屏幕现在应该显示桌面并且工作正常。剩下的问题是触摸屏,因为我的触摸屏继续映射到我的笔记本电脑屏幕而不是它本身。
3. 将触摸屏输入重新映射到外部屏幕:
要重新映射触摸屏,我们需要另一个名为 的 X11 实用程序xinput
。输入xinput
终端(或先安装它),您应该会得到一个输入设备列表。其中应该有您的触摸屏设备。类似 ELAN 触摸屏或 Wacom 触摸屏或类似设备。记住右侧的 ID 号。
现在,我们还可以使用xinput
它来重新映射输入。我们通过输入: 来做到这一点xinput map-to-output 10 HDMI-0
。10是我的触摸屏的 ID 号,可能会有所不同。HDMI-0是之前提供的外部屏幕的名称xrandr
。
4.韦兰?
不幸的是,这在 Gnome(Fedora 或其他)上的 Wayland 下是不可撤销的。原因是 Gnome 使用嘀咕(一个 Wayland 合成器),而 mutter 太有限了。它没有用于重新映射的工具,它尝试自行完成所有操作并失败,用户几乎根本无法维修。当有更好的选择(例如 sway、sddm 等)时,我无法选择 mutter。
所以,如果你想在 GNOME 下实现这一点,请坚持使用 X11。
答案2
您的外接触摸屏显示器似乎面临两个问题:第一个问题是显示器拒绝将自身设置为 59 或 60 Hz 之外的任何刷新率,第二个问题是触摸屏输出始终映射到您的显示器。笔记本电脑屏幕。
关于第一个问题,Fedora/Gnome 可能会尝试将显示恢复到 120 Hz,因为这是显示器发出的最大支持频率。您可以尝试通过将以下行添加到文件中来强制 HDMI 仅以 60 Hz 输出/etc/X11/xorg.conf
:
Section "Monitor"
Identifier "HDMI-1-0"
Option "PreferredMode" "1920x1080_60.00"
EndSection
这会强制 HDMI 以 60 Hz 而不是 120 Hz 的频率输出。
关于第二个问题,您可以尝试使用命令将触摸屏重新映射到适当的显示器xinput
。您可以使用该xinput list
命令获取输入设备及其 ID 的列表,然后使用该xinput map-to-output
命令将触摸屏重新映射到适当的显示器。例如,触摸屏设备ID为12,显示器名称为HDMI-1-0,则可以执行以下命令:
xinput map-to-output 12 HDMI-1-0
这应该将触摸屏重新映射到 HDMI-1-0 显示器。您可能需要调整设备 ID 和显示器名称以匹配您的系统配置。
如果您使用 Wayland,您可以尝试使用该wlr-touch
实用程序将触摸屏重新映射到适当的显示器。您可以使用以下命令安装它:
sudo dnf install wlr-touch
安装后,您可以运行以下命令将触摸屏重新映射到适当的显示器:
wlr-touch output HDMI-1-0
同样,您可能需要调整显示器名称以匹配您的系统配置。