Display settings for display manager

Hello everyone,
I’m new to Garuda and Linux in general. This has been the best experience with Linux so far after attempting to setup my machine with plain Arch and failing time after time. I like being able to setup everything on my own, but it has become overwhelming to navigate through config files for hours just to get a display to show up properly.

Speaking of displays, here’s the deal: I have a fresh Garuda install (Garuda Sway) with only a few tweaks regarding sway and other UI stuff and I’m trying to fix an annoying problem I have with my displays.
I have two displays connected via HDMI (24") and DP (27") respectively, and unfortunately I don’t get to have the DP display as the primary one because the HDMI one seems to be detected slightly faster than the DP one, thus becoming the primary screen.
I managed to fix this with sway (for workspaces and focus on boot), as well with gtklock, but I can’t find how to do the same with the display manager that I believe is greetd (I couldn’t find some sort of list regarding what are the default softwares used in this distro).
I have found some config files regarding greetd under /etc/greetd but none of them seem to contain useful stuff and I can’t find any reference on how to set the display configuration. In fact, when booting, I can see the login manager but the focus is on the wrong display and they end up to be arranged in the wrong way (the left monitor appears to be right to the one marked as primary).
For example, for gtklock I was able to set the main screen with the -M parameter inside the sway config files, like so:

    # Lock screen
    $mod+f1 exec gtklock -M DP-3

I was hoping to find something similar.

Does anyone have any suggestions?

Thanks in advance.


Here is the garuda-inxi output:

System:
  Kernel: 6.15.2-zen1-1-zen arch: x86_64 bits: 64 compiler: gcc v: 15.1.1
    clocksource: tsc avail: hpet,acpi_pm
    parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen
    root=UUID=63623efe-9ac4-4259-bf5d-bfd26358041f rw rootflags=subvol=@
    quiet loglevel=3 ibt=off
  Desktop: Sway v: 0.5.1 with: waybar tools: swayidle avail: gtklock vt: 1
    lm: greetd Distro: Garuda base: Arch Linux
Machine:
  Type: Desktop Mobo: Micro-Star model: X570-A PRO (MS-7C37) v: 3.0
    serial: <superuser required> uuid: <superuser required> UEFI: American
    Megatrends LLC. v: H.N0 date: 04/02/2024
CPU:
  Info: model: AMD Ryzen 5 3600X bits: 64 type: MT MCP arch: Zen 2 gen: 2
    level: v3 note: check built: 2020-22 process: TSMC n7 (7nm)
    family: 0x17 (23) model-id: 0x71 (113) stepping: 0 microcode: 0x8701034
  Topology: cpus: 1x dies: 1 clusters: 1 cores: 6 threads: 12 tpc: 2
    smt: enabled cache: L1: 384 KiB desc: d-6x32 KiB; i-6x32 KiB L2: 3 MiB
    desc: 6x512 KiB L3: 32 MiB desc: 2x16 MiB
  Speed (MHz): avg: 1754 min/max: 558/4412 boost: enabled scaling:
    driver: amd-pstate-epp governor: powersave cores: 1: 1754 2: 1754 3: 1754
    4: 1754 5: 1754 6: 1754 7: 1754 8: 1754 9: 1754 10: 1754 11: 1754 12: 1754
    bogomips: 91195
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm
  Vulnerabilities: <filter>
Graphics:
  Device-1: Advanced Micro Devices [AMD/ATI] Navi 10 [Radeon RX 5600 OEM/5600
    XT / 5700/5700 XT] vendor: XFX Pine driver: amdgpu v: kernel arch: RDNA-1
    code: Navi-1x process: TSMC n7 (7nm) built: 2019-20 pcie: gen: 4
    speed: 16 GT/s lanes: 16 ports: active: DP-3,HDMI-A-1 empty: DP-1,DP-2
    bus-ID: 2f:00.0 chip-ID: 1002:731f class-ID: 0300
  Display: wayland server: Xwayland v: 24.1.6 compositor: Sway v: 0.5.1
    driver: gpu: amdgpu d-rect: 4480x1440 display-ID: 1
  Monitor-1: DP-3 pos: primary,left model: BenQ GW2765 serial: <filter>
    built: 2018 res: mode: 2560x1440 hz: 60 scale: 100% (1) dpi: 109 gamma: 1.2
    size: 597x336mm (23.5x13.23") diag: 685mm (27") ratio: 16:9 modes:
    max: 2560x1440 min: 720x400
  Monitor-2: HDMI-A-1 pos: right model: BenQ GL2450H serial: <filter>
    built: 2014 res: mode: 1920x1080 hz: 60 scale: 100% (1) dpi: 92 gamma: 1.2
    size: 531x298mm (20.91x11.73") diag: 609mm (24") ratio: 16:9 modes:
    max: 1920x1080 min: 720x400
  API: Vulkan v: 1.4.313 layers: 5 device: 0 type: discrete-gpu name: AMD
    Radeon RX 5700 XT (RADV NAVI10) driver: mesa radv v: 25.1.3-arch1.3
    device-ID: 1002:731f surfaces: N/A device: 1 type: cpu name: llvmpipe
    (LLVM 20.1.6 256 bits) driver: mesa llvmpipe v: 25.1.3-arch1.3 (LLVM
    20.1.6) device-ID: 10005:0000 surfaces: N/A
  API: EGL Message: EGL data requires eglinfo. Check --recommends.
  Info: Tools: api: vulkaninfo wl: kanshi, swaymsg, wdisplays x11: xprop
Audio:
  Device-1: Advanced Micro Devices [AMD/ATI] Navi 10 HDMI Audio
    driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16
    bus-ID: 2f:00.1 chip-ID: 1002:ab38 class-ID: 0403
  Device-2: Advanced Micro Devices [AMD] Starship/Matisse HD Audio
    vendor: Micro-Star MSI X570-A PRO driver: snd_hda_intel v: kernel pcie:
    gen: 4 speed: 16 GT/s lanes: 16 bus-ID: 31:00.4 chip-ID: 1022:1487
    class-ID: 0403
  API: ALSA v: k6.15.2-zen1-1-zen status: kernel-api
    tools: alsactl,alsamixer,amixer
  Server-1: sndiod v: N/A status: off tools: aucat,midicat,sndioctl
  Server-2: PipeWire v: 1.4.5 status: active with: 1: pipewire-pulse
    status: active 2: wireplumber status: active 3: pipewire-alsa type: plugin
    4: pw-jack type: plugin tools: pactl,pw-cat,pw-cli,wpctl
Network:
  Device-1: Realtek RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet
    vendor: Micro-Star MSI X570-A PRO driver: r8169 v: kernel pcie: gen: 1
    speed: 2.5 GT/s lanes: 1 port: d000 bus-ID: 27:00.0 chip-ID: 10ec:8168
    class-ID: 0200
  IF: enp39s0 state: down mac: <filter>
  Device-2: Realtek RTL8125 2.5GbE driver: r8169 v: kernel pcie: gen: 2
    speed: 5 GT/s lanes: 1 port: c000 bus-ID: 29:00.0 chip-ID: 10ec:8125
    class-ID: 0200
  IF: enp41s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
  Info: services: NetworkManager,systemd-timesyncd
Drives:
  Local Storage: total: 4.23 TiB used: 12.06 GiB (0.3%)
  SMART Message: Required tool smartctl not installed. Check --recommends
  ID-1: /dev/sda maj-min: 8:0 vendor: Crucial model: CT525MX300SSD1
    size: 489.05 GiB block-size: physical: 512 B logical: 512 B speed: 6.0 Gb/s
    tech: SSD serial: <filter> fw-rev: R060 scheme: GPT
  ID-2: /dev/sdb maj-min: 8:16 vendor: Samsung model: SSD 850 EVO 120GB
    size: 111.79 GiB block-size: physical: 512 B logical: 512 B speed: 6.0 Gb/s
    tech: SSD serial: <filter> fw-rev: 2B6Q scheme: GPT
  ID-3: /dev/sdc maj-min: 8:32 vendor: Western Digital
    model: WD20EZRX-00D8PB0 size: 1.82 TiB block-size: physical: 4096 B
    logical: 512 B speed: 6.0 Gb/s tech: HDD rpm: 5400 serial: <filter>
    fw-rev: 0A80 scheme: MBR
  ID-4: /dev/sdd maj-min: 8:48 vendor: Samsung model: ST2000LM005 HN-M201AAD
    size: 1.82 TiB block-size: physical: 4096 B logical: 512 B type: USB
    rev: 3.0 spd: 5 Gb/s lanes: 1 mode: 3.2 gen-1x1 tech: HDD rpm: 5400
    serial: <filter> fw-rev: 1402 scheme: MBR
  ID-5: /dev/sde maj-min: 8:64 model: USB DISK 2.0 size: 7.21 GiB
    block-size: physical: 512 B logical: 512 B type: USB rev: 2.0 spd: 480 Mb/s
    lanes: 1 mode: 2.0 tech: N/A serial: <filter> fw-rev: PMAP scheme: MBR
Partition:
  ID-1: / raw-size: 111.5 GiB size: 111.5 GiB (100.00%)
    used: 12.06 GiB (10.8%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
  ID-2: /boot/efi raw-size: 300 MiB size: 299.4 MiB (99.80%)
    used: 616 KiB (0.2%) fs: vfat dev: /dev/sdb1 maj-min: 8:17
  ID-3: /home raw-size: 111.5 GiB size: 111.5 GiB (100.00%)
    used: 12.06 GiB (10.8%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
  ID-4: /var/log raw-size: 111.5 GiB size: 111.5 GiB (100.00%)
    used: 12.06 GiB (10.8%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
  ID-5: /var/tmp raw-size: 111.5 GiB size: 111.5 GiB (100.00%)
    used: 12.06 GiB (10.8%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
Swap:
  Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default) zswap: no
  ID-1: swap-1 type: zram size: 15.53 GiB used: 0 KiB (0.0%) priority: 100
    comp: zstd avail: lzo-rle,lzo,lz4,lz4hc,deflate,842 dev: /dev/zram0
Sensors:
  System Temperatures: cpu: 45.2 C mobo: 35.5 C gpu: amdgpu temp: 62.0 C
    mem: 68.0 C
  Fan Speeds (rpm): N/A gpu: amdgpu fan: 103
Info:
  Memory: total: 16 GiB available: 15.53 GiB used: 2.48 GiB (16.0%)
  Processes: 333 Power: uptime: 1h 1m states: freeze,mem,disk suspend: deep
    avail: s2idle wakeups: 0 hibernate: platform avail: shutdown, reboot,
    suspend, test_resume image: 6.19 GiB services: upowerd Init: systemd
    v: 257 default: graphical tool: systemctl
  Packages: pm: pacman pkgs: 1157 libs: 356 tools: pacseek,paru Compilers:
    gcc: 15.1.1 Shell: garuda-inxi default: fish v: 4.0.2 running-in: foot
    inxi: 3.3.38
Garuda (2.7.2-1):
  System install date:     2025-06-13
  Last full system update: 2025-06-13
  Is partially upgraded:   No
  Relevant software:       snapper NetworkManager dracut
  Windows dual boot:       Probably (Run as root to verify)
  Failed units:            

You have the right idea here, but what you want to modify in this case is actually the greeter (not the display manager). The default greeter is nwg-hello.

The config you want to modify is /etc/nwg-hello/nwg-hello.json. These are the variables you may wish to modify to address the issue you mentioned:

  • "monitor_nums": leave as is to see the greeter on all monitors. Set e.g. [0, 2] for it to appear on the 1st and 3rd one.
  • "form_on_monitors": which of above monitors to display the login form on (just the wallpaper on the rest).
  • "delay_secs": some monitors take longer to turn on. In the meantime the greeter may behave oddly on other monitors. If it happens to restart/blink, increase this value. If you only have one monitor and no discrete GPU, you may probably set 0 here.

Adding a delay to the HDMI monitor may resolve the issue, I’m not sure (let me know what happens).

Use form_on_monitors if you want the login form to only appear on the DP display (the HDMI display will still turn on, but will show only the wallpaper), or use monitor_nums if you want to exclude the HDMI display altogether.

I hope that helps, welcome to the community @belfed. :wave:

2 Likes

Hello @BluishHumility, thank you very much for your suggestions.

The HDMI monitor is still being detected as the first one regardless of the greeter configuration, but I still managed to find a workaround:

  1. In the nwg-hello.json file I set the monitor where I want to have the login form (the “secondary” one):
{
...
 "monitor_nums": [],
  "form_on_monitors": [1],
  "delay_secs": 1,
...
}

N.B. Tweaking the delay_secs param didn’t solve the issue

I looked around in the nwg-hello greeter docs and I found out it launches its own sway session to show the UI (this is done by any greeter that is configured to be executed with sway, I think), and that it also uses its own configuration file in /etc/nwg-hello/sway-config, so:

  1. In the /etc/nwg-hello/sway-config file I did the same thing I did in the main sway config file, which is to specify the display settings and the display to bring the focus on:
output DP-3 resolution 2560x1440 position 0,0
output HDMI-A-1 resolution 1920x1080 position 2560,0

exec swaymsg focus output DP-3

It’s a drag to have to resort to this kind of workaround, especially because before the greeter shows up, the screen where the boot menu and logs are shown is the DP one :smile:

This is fine nonetheless, so thanks again for the suggestions.

1 Like

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.