(Problem) Monitor stuck on 640x480 resolution. Acer XB270HU

Hello,

Recently I got the Acer XB270HU and I have run into some trouble setting the correct resolution for this monitor.

So far, I have pinned down the issue to incorrect EDID information from the monitor (this monitor uses G-SYNC), I have AMD hardware so it is not exactly compatible, you can see what hardware i have in Hardware

Hardware
System:
  Kernel: 6.5.7-arch1-1 arch: x86_64 bits: 64 compiler: gcc v: 13.2.1
    Desktop: Hyprland dm: SDDM Distro: Arch Linux
Machine:
  Type: Desktop Mobo: Gigabyte model: B550 AORUS ELITE AX V2 v: x.x
    serial: <superuser required> UEFI: American Megatrends LLC. v: F16d
    date: 07/20/2022
CPU:
  Info: 6-core model: AMD Ryzen 5 5600G with Radeon Graphics bits: 64
    type: MT MCP arch: Zen 3 rev: 0 cache: L1: 384 KiB L2: 3 MiB L3: 16 MiB
  Speed (MHz): avg: 2682 high: 3545 min/max: 400/4464 cores: 1: 3154 2: 2992
    3: 2993 4: 3053 5: 3231 6: 400 7: 3386 8: 2994 9: 2997 10: 3039 11: 3545
    12: 400 bogomips: 93472
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
Graphics:
  Device-1: AMD Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT]
    vendor: XFX driver: amdgpu v: kernel arch: RDNA-2 pcie: speed: 16 GT/s
    lanes: 16 ports: active: DP-1,HDMI-A-1 empty: DP-2,DP-3 bus-ID: 03:00.0
    chip-ID: 1002:73df
  Device-2: Logitech C922 Pro Stream Webcam driver: snd-usb-audio,uvcvideo
    type: USB rev: 2.0 speed: 480 Mb/s lanes: 1 bus-ID: 3-1:2 chip-ID: 046d:085c
  Display: wayland server: X.Org v: 23.2.1 with: Xwayland v: 23.2.1
    compositor: Hyprland driver: X: loaded: amdgpu unloaded: modesetting,vesa
    alternate: fbdev dri: radeonsi gpu: amdgpu display-ID: :1 screens: 1
  Screen-1: 0 s-res: 2240x1080 s-dpi: 96
  Monitor-1: DP-1 pos: primary,left res: 320x240 size: N/A
  Monitor-2: HDMI-A-1 pos: right model: LG (GoldStar) FULL HD res: 1920x1080
    dpi: 102 diag: 551mm (21.7")
  API: EGL v: 1.5 platforms: device: 0 drv: radeonsi device: 1 drv: swrast
    surfaceless: drv: radeonsi wayland: drv: radeonsi x11: drv: radeonsi
    inactive: gbm
  API: OpenGL v: 4.6 compat-v: 4.5 vendor: amd mesa v: 23.2.1-arch1.2
    glx-v: 1.4 direct-render: yes renderer: AMD Radeon RX 6750 XT (navi22 LLVM
    16.0.6 DRM 3.54 6.5.7-arch1-1) device-ID: 1002:73df
Audio:
  Device-1: AMD Navi 21/23 HDMI/DP Audio driver: snd_hda_intel v: kernel pcie:
    speed: 16 GT/s lanes: 16 bus-ID: 03:00.1 chip-ID: 1002:ab28
  Device-2: AMD Renoir Radeon High Definition Audio driver: snd_hda_intel
    v: kernel pcie: speed: 8 GT/s lanes: 16 bus-ID: 09:00.1 chip-ID: 1002:1637
  Device-3: AMD Family 17h/19h HD Audio vendor: Gigabyte
    driver: snd_hda_intel v: kernel pcie: speed: 8 GT/s lanes: 16
    bus-ID: 09:00.6 chip-ID: 1022:15e3
  Device-4: Logitech C922 Pro Stream Webcam driver: snd-usb-audio,uvcvideo
    type: USB rev: 2.0 speed: 480 Mb/s lanes: 1 bus-ID: 3-1:2 chip-ID: 046d:085c
  Device-5: AOKEO LCS_USB_Audio driver: snd-usb-audio type: USB rev: 2.0
    speed: 12 Mb/s lanes: 1 bus-ID: 5-1:2 chip-ID: 2e3c:4444
  API: ALSA v: k6.5.7-arch1-1 status: kernel-api
  Server-1: sndiod v: N/A status: off
  Server-2: JACK v: 1.9.22 status: off
  Server-3: PipeWire v: 0.3.82 status: active with: 1: pipewire-pulse
    status: active 2: wireplumber status: active 3: pipewire-alsa type: plugin
Network:
  Device-1: Realtek RTL8125 2.5GbE vendor: Gigabyte driver: r8169 v: kernel
    pcie: speed: 5 GT/s lanes: 1 port: e000 bus-ID: 06:00.0 chip-ID: 10ec:8125
  IF: enp6s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
  Device-2: MEDIATEK MT7921K Wi-Fi 6E 80MHz driver: mt7921e v: kernel pcie:
    speed: 5 GT/s lanes: 1 bus-ID: 07:00.0 chip-ID: 14c3:0608
  IF: wlp7s0 state: down mac: <filter>
  IF-ID-1: virbr0 state: down mac: <filter>
Bluetooth:
  Device-1: MediaTek Wireless_Device driver: btusb v: 0.8 type: USB rev: 2.1
    speed: 480 Mb/s lanes: 1 bus-ID: 1-5:2 chip-ID: 0e8d:0608
  Report: btmgmt ID: hci0 rfk-id: 0 state: up address: <filter> bt-v: 5.2
    lmp-v: 11
Drives:
  Local Storage: total: 1.82 TiB used: 1.07 TiB (58.8%)
  ID-1: /dev/nvme0n1 vendor: Samsung model: SSD 970 EVO Plus 1TB
    size: 931.51 GiB speed: 31.6 Gb/s lanes: 4 serial: <filter> temp: 32.9 C
  ID-2: /dev/sda vendor: Seagate model: ST1000DM003-1ER162 size: 931.51 GiB
    speed: 6.0 Gb/s serial: <filter>
Partition:
  ID-1: / size: 915.32 GiB used: 732.24 GiB (80.0%) fs: ext4 dev: /dev/dm-0
    mapped: cryptroot
  ID-2: /boot size: 499 MiB used: 146.5 MiB (29.4%) fs: vfat
    dev: /dev/nvme0n1p1
Swap:
  ID-1: swap-1 type: file size: 10 GiB used: 0 KiB (0.0%) priority: -2
    file: /swapfile
Sensors:
  System Temperatures: cpu: 37.2 C mobo: 30.0 C gpu: amdgpu temp: 37.0 C
    mem: 34.0 C
  Fan Speeds (rpm): N/A gpu: amdgpu fan: 0
Info:
  Processes: 320 Uptime: 1m Memory: total: 16 GiB available: 15.47 GiB
  used: 3.23 GiB (20.9%) Init: systemd v: 254 default: graphical Compilers:
  gcc: 13.2.1 clang: 16.0.6 Packages: pm: pacman pkgs: 1363 Shell: Bash
  v: 5.1.16 running-in: kitty inxi: 3.3.30

I’m running Hyprland and when I run hyprctl monitors I get the next output:

hyprctl monitors
Monitor DP-1 (ID 0):
	640x480@59.94000 at 0x0
	description: (null) (null) (DP-1)
	make: 
	model: 
	serial: 
	active workspace: 1 (1)
	special workspace: 0 ()
	reserved: 0 30 0 0
	scale: 2.00
	transform: 0
	focused: no
	dpmsStatus: 1
	vrr: 0
	activelyTearing: false

Monitor HDMI-A-1 (ID 1):
	1920x1080@74.97300 at 320x0
	description: LG Electronics LG FULL HD 0x01010101 (HDMI-A-1)
	make: LG Electronics
	model: LG FULL HD
	serial: 0x01010101
	active workspace: 5 (5)
	special workspace: 0 ()
	reserved: 0 30 0 0
	scale: 1.00
	transform: 0
	focused: yes
	dpmsStatus: 1
	vrr: 0
	activelyTearing: false

I found this GitHub page that seems to solve the issue for a different distro using a script, I have no bash knowledge, so I haven’t been able to replicate it in an arch based system.

I also found this post on Reddit, that seems to have the same problem and the op says he solved the issue, however I haven’t been successful. When I do the same thing in grub, the monitor does not get recognized, and all I have is a black screen. (I have use the EDID information from the GitHub page, I can’t get edid from my monitor)

I’m stuck on how to fix this issue because:

  1. I can’t get edid from the monitor.
  2. I don’t know what my mistakes are.

If anyone knows a workaround, I’ll gladly appreciate it.

What is your setup in regards to attached monitors / cabling / used ports?

The way it looks, you have only the XB270HU monitor attached via HDMI-A-1 of the graphics card, and there is nothing connected to the DisplayPort of the card. Is this correct?

If so, Hyprland seems to see a ghost monitor at DP-1, and tries to use it with wrong or nonexistent information. Insert video=DP-1:d into the kernel boot line in GRUB (should be possible with systemd-boot as well) and reboot.

The EDID information from HDMI-A-1 seems to be read just fine to me.

You can always use find /sys/devices -iname '*edid*' to find the address, let’s say it’s /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid, and then use cat /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid | edid-decode to see the output of your monitor.

I have a dual monitor setup, the HDMI-A-1 is the one that works just fine, the problem is the Display Port one, here is a picture of my setup:

As you can see, the problem is the Display Port monitor that doesn’t allow a diferent resolution that the one it brings 640x480.

The monitor XB270HU is connected at DP-1 in the graphic card. The monitor at HDMI-A-1 works perfect and is connected to the only HDMI at the graphic card.

I used this find /sys/devices -iname '*edid*' and it showed me this:

Result
/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-HDMI-A-1/edid
/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-DP-2/edid
/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-DP-3/edid
/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-DP-1/edid

Because the monitor is connected to the DP-1 I used the next command cat /sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/0000:02:00.0/0000:03:00.0/drm/card1/card1-DP-1/edid | edid-decode and the result is EDID of ‘stdin’ was empty.

It’s like the monitor is not sending EDID information to the machine. SO far, no luck solving this. Thanks for your time.

Just to rule out that it is a problem with the DE, did you check with XFCE on the live medium if the issue also appears there?

I also have I3WM and I have the same problem, I will check it with a live ISO and will let you know.

Edit: I have tried with a live ISO and the issue still persists.

This explanation makes the issue clearer, so it’s really the XB270HU not handing out the EDID signal.

Maybe the following works:

  • Go to https://edid.tv/edid/752/ and download the EDID file for your monitor.

  • Put it into /lib/firmware/edid/.

  • Use it with the kernel boot argument drm_kms_helper.edid_firmware=DP-1:edid/XB270HU_4294967295.edid

  • or alternatively try the boot argument drm.edid_firmware=DP-1:edid/XB270HU_4294967295.edid

Please update us on the results.

So far i haven’t been able to fix this, this is what I have done:

  1. Downloaded the EDID file from https://edid.tv/edid/752/
  2. I put the file in /lib/firmware/edid/
  3. Opened the boot file to put the kernel parameters sudo nvim /etc/default/grub
  4. Wrote the next thing in the boot file: GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet drm.edid_firmware=DP-1:edid/XB270HU_4294967295.edid"
  5. Save and quit nvim and wrote in the terminal sudo grub-mkconfig -o /boot/grub/grub.cfg
  6. Reboot the system

I have also tried with the alternative and in both times the resolution stayed the same.

In a third and fourth attempt, I changed the .edid of the file to .bin and also in the kernel parameters, in this both occasions the monitor stayed black and when I checked the monitors with hyprctl monitors or xrandr -q, it only shows the HDMI one.

Finally, I used the parameter video=DP-1:e from the solution that seems to work from here, still no luck in fixing this

Sounds like you need to rename to .bin to have an effect, but it’s not working right or incompatible. Shame. If I would be you, I’d try to swap cables around to see if it’s an option to have monitor #1 over HDMI and monitor #2 over DP, but that’s just fishing in the dark and a last attempt.

Apart from this, I am out of options.

Maybe it helps if you can catch a black rooster and sacrifice it to the monitor gods at midnight under a full moon?