1

I hope that someone will be able to help me because I am losing my nerves. I am working on F37 Silverblue + Wayland / X11. System has nVidia Optimus, with proprietary nVidia drivers (not Nouveau).

Have recently bought an external touchscreen monitor to aid my setup. The monitor nominally supports up to 1080p resolutions over HDMI or USB-C (but I don't have a USB-C capable video output, so I have to use HDMI). The touchscreen output is sent over a USB cable, and power is received through the same cable.

====== Force particular (60Hz) refresh rate over HDMI ======

The most persistent issue I have noticed with this monitor is that it refuses to set itself at any refresh rate other than 59 or 60 Hz (although it reports that it supports up to 120 Hz -- I can choose this in Gnome settings, but to no avail).

That would be fine with me except that when I try to mirror the laptop display (also 1080p), the monitor turns off and says no input device found. Now, this same issue happens when extending if I try to set it to 120 / 100 / 50 / 30 / 29 / etc. hertz.

I believe that the issue is that when I try to mirror the display, Fedora / Gnome / whomever is trying to revert back to 120 Hz for the display (because that's what it signals it maximally supports, in theory). This makes it reject the input signal and refuse to show anything. Alternatively, Gnome might be attempting to clone the refresh rate of my integrated laptop monitor, which is, weirdly, set at 60.02 Hz, so it is above 60 Hz, so it also gets rejected.

Unfortunately, while mirroring, I can't set a (60Hz) refresh rate -- there's no such option in Gnome settings. I can only do this if I use the external monitor to extend the display.

Another peculiar thing I noticed is that if I drop down the resolution of the external touchscreen display (say to 1440 x 900), I can now clone the display and use it as a touchscreen -- but of course, the image looks horrible.

How can I go about diagnosing this, and particularly, about forcing / limiting HDMI to only output at 60 Hz regardless of what the monitor signals it supports?

====== Persistent remap of touchscreen output ======

My second issue is with the touchscreen. It always works (sends out touch output even if the monitor itself is not displaying anything), detects multiple fingers and the like. The problem is that it somehow always gets mapped to my laptop screen. So I can touch and drag windows etc. which appear on the main laptop display blindly, but I don't see them on the external touchscreen monitor. And windows that appear on the external touchscreen display are not affected by touch (i.e. because it is mapped on the main display).

Regardless of where I put the external touchscreen monitor in Gnome settings (left, right, above, below the laptop screen), or whether I select it as the primary or secondary monitor, the touchscreen output is persistently mapped to the laptop monitor. Only if I turn off the laptop monitor the image gets displayed solely on the external touchscreen monitor, only then I can use it as a touch device -- but then I have one display unused for anything.

And of course, if I lower the resolution I can clone the display, and then the touch output corresponds to what is displayed on screen -- but it looks horrible.

I found out somewhere that Fedora / Wayland uses mutter to send in touch input -- but I cannot find anywhere how to configure mutter like I would xinput.

I guess the question is: how can I consistently remap the touchscreen to the appropriate monitor?

====== X11 ======

If I login under Xorg I am unable to output ANYTHING to the external touchscreen. Nothing works, nor decreasing resolution, decreasing / setting refresh rates, nothing. Only the touchscreen finger output works, probably because it is a separate device of a sort.

Here's the output from 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 

I prefer to work on these problems through Wayland, but X11 would be the second-best alternative. Is there a GUI tool to work with these kinds of issues? I'm still a newbie.

2 Answers 2

1

Imagine this, but I managed to solve it. This can only be solved through X11, unfortunately.

Solution under X11:

1. Make nVidia your primary graphics card, to avoid switching and blank screen / no input message on your external screen:

First, you need to switch to X11. Log out and in the login screen, after clicking your user name, there should appear a little cog in the lower right corner. Click it and select GNOME on Xorg.

Then you need to edit your nvidia.conf file. Doing this on Silverblue is a bit harder because root is locked. But you can enter editing the root filesystem by going in terminal and typing sudo rpm-ostree admin unlock --hotfix. The --hotfix tag keeps the changes you make to root fs 'permanent' i.e. rpm-ostree doesn't revert back to the old snapshot, and with it to the unmodified version of nvidia.conf.

DO NOT MAKE EDITING YOUR ROOT FS A HABIT. AVOID IT LIKE YOUR LIFE DEPENDS ON IT. THERE IS A GOOD REASON WHY IMMUTABLE DISTROS LOCK IT.

Then copy nvidia.conf from /usr to /etc: sudo cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf

Climb to the newly copied file and edit it sudo nano nvidia.conf. It should look something like this:

#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 

Add this to each of the sections: Option "PrimaryGPU" "yes".

So:

#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 

Save it, exit, and reboot. This will force X11 to use nVidia as the main graphics card. You can check this by typing in terminal: glxinfo | egrep "OpenGL vendor|OpenGL renderer". If it says nVidia under both OpenGL vendor and renderer, you are good to go.

2. Force refresh rate to external monitor:

Now that you've forced the nVidia driver, working with the external display should be a lot easier. It might even show and work as intended.

But if it doesn't there probably is a fix through xrandr. Type (or install first in toolbox / terminal / distrobox / with dnf / with apt / with rpm-ostree / whatever) xrandr and you should get both your primary computer / laptop screen as well as the external one attached to HDMI. In my case it shows as HDMI-0.

To force resolution and refresh rate you can use xrandr like this: xrandr --output HDMI-0 --mode 1920x1080 --rate 60. --mode deals with resolution, --rate deals with refresh rate. Note that your screen might support 59.94 or some other weird refresh rate. The supported ones (in theory) are shown when typing xrandr without any parameters.

If this was successful your external screen should be now showing the desktop and working well. The problem that remains is the touchscreen, because my touchscreen continues to map to my laptop screen instead of itself.

3. Remap touchscreen input to external screen:

To remap the touchscreen we need another X11 utility called xinput. Type xinput in terminal (or install it first) and you should get a list of input devices. Among these there should be your touchscreen device. Something like ELAN touchscreen or Wacom touchscreen or similar. Remember its ID number on the right.

Now, we can use xinput to also remap the input. We do this by typing: xinput map-to-output 10 HDMI-0. 10 is the ID number of my touchscreen, it might differ. HDMI-0 is the name of the external screen provided previously by xrandr.

4. Wayland?

Unfortunately, this is undoable under Wayland on Gnome (Fedora or otherwise). The reason is that Gnome uses mutter (a Wayland compositor), and mutter is too limited. It has no tools for remapping, it tries to do everything by itself and fails, it is not user-serviceable almost at all. Choosing mutter when there are better alternatives such as sway, sddm and the rest, is beyond me.

So, if you want to achieve this under GNOME stick to X11.

1
  • Yes, you might be right about that. I will edit it. Commented Apr 11, 2023 at 16:46
0

It seems like you are facing two issues with your external touchscreen monitor: the first issue is that the monitor refuses to set itself at any refresh rate other than 59 or 60 Hz, and the second issue is that the touchscreen output is persistently mapped to your laptop screen.

Regarding the first issue, it is possible that Fedora/Gnome is trying to revert back to 120 Hz for the display because that's what the monitor signals it maximally supports. You can try forcing HDMI to only output at 60 Hz by adding the following lines to your /etc/X11/xorg.conf file:

Section "Monitor" Identifier "HDMI-1-0" Option "PreferredMode" "1920x1080_60.00" EndSection 

This should force HDMI to output at 60 Hz instead of 120 Hz.

Regarding the second issue, you can try remapping the touchscreen to the appropriate monitor using the xinput command. You can use the xinput list command to get a list of input devices and their IDs, and then use the xinput map-to-output command to remap the touchscreen to the appropriate monitor. For example, if the touchscreen device ID is 12 and the monitor name is HDMI-1-0, you can run the following command:

xinput map-to-output 12 HDMI-1-0 

This should remap the touchscreen to the HDMI-1-0 monitor. You may need to adjust the device ID and monitor name to match your system configuration.

If you are using Wayland, you can try using the wlr-touch utility to remap the touchscreen to the appropriate monitor. You can install it using the following command:

sudo dnf install wlr-touch 

Once installed, you can run the following command to remap the touchscreen to the appropriate monitor:

wlr-touch output HDMI-1-0 

Again, you may need to adjust the monitor name to match your system configuration.

1
  • Hi, thanks for your answer. I cannot find such wlr-touch utility, did you perhaps think of something else? Commented Apr 8, 2023 at 0:13

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.