Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

scuffed cursor with transformed secondary display #7412

Open
rbutera opened this issue Aug 19, 2024 · 38 comments
Open

scuffed cursor with transformed secondary display #7412

rbutera opened this issue Aug 19, 2024 · 38 comments
Labels
bug Something isn't working

Comments

@rbutera
Copy link

rbutera commented Aug 19, 2024

Regression?

No

System Info and Version

System/Version info
Hyprland, built from branch  at commit 9a09eac79b85c846e3a865a9078a3f8ff65a9259  (props: bump version to 0.42.0).
Date: Wed Aug 7 19:17:10 2024
Tag: v0.42.0, commits: 5069

flags: (if any)


System Information:
System name: Linux
Node name: lancelot
Release: 6.10.5-2-cachyos
Version: #1 SMP PREEMPT_DYNAMIC Wed, 14 Aug 2024 16:17:15 +0000


GPU information: 
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] [1002:73bf] (rev c1) (prog-if 00 [VGA controller])


os-release: NAME="CachyOS Linux"
PRETTY_NAME="CachyOS"
ID=cachyos
ID_LIKE=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://cachyos.org/"
DOCUMENTATION_URL="https://wiki.cachyos.org/"
SUPPORT_URL="https://forum.cachyos.org/"
BUG_REPORT_URL="https://github.com/cachyos"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=cachyos


plugins:

======Config-Start======


Config File: /home/rai/.config/hypr/hyprland.conf: Read Succeeded
#  _   _                  _                 _  
# | | | |_   _ _ __  _ __| | __ _ _ __   __| | 
# | |_| | | | | '_ \| '__| |/ _` | '_ \ / _` | 
# |  _  | |_| | |_) | |  | | (_| | | | | (_| | 
# |_| |_|\__, | .__/|_|  |_|\__,_|_| |_|\__,_| 
#        |___/|_|                              
#  
# ----------------------------------------------------- 

# ----------------------------------------------------- 
# Monitor
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/monitor.conf

# ----------------------------------------------------- 
# Autostart
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/autostart.conf

# ----------------------------------------------------- 
# Cursor
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/cursor.conf

# ----------------------------------------------------- 
# Environment
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/environment.conf

# ----------------------------------------------------- 
# Keyboard
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/keyboard.conf

# ----------------------------------------------------- 
# Load pywal color file
# ----------------------------------------------------- 
source = ~/.cache/wal/colors-hyprland.conf

# ----------------------------------------------------- 
# Load configuration files
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/window.conf
source = ~/.config/hypr/conf/decoration.conf
source = ~/.config/hypr/conf/layout.conf
source = ~/.config/hypr/conf/misc.conf
source = ~/.config/hypr/conf/keybinding.conf
source = ~/.config/hypr/conf/windowrule.conf

# ----------------------------------------------------- 
# Animation
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/animation.conf

# ----------------------------------------------------- 
# Custom
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/custom.conf

# ----------------------------------------------------- 
# ML4W Configuration
# ----------------------------------------------------- 
source = ~/.config/hypr/conf/ml4w.conf

# ----------------------------------------------------- 
# Environment for xdg-desktop-portal-hyprland
# ----------------------------------------------------- 
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP


Config File: /home/rai/.config/hypr/conf/monitor.conf: Read Succeeded
source = ~/.config/hypr/conf/monitors/rai.conf


Config File: /home/rai/.config/hypr/conf/monitors/rai.conf: Read Succeeded
# monitor=DP-1,2560x1440@240,0x0,1
# monitor=HDMI-A-1,2560x2880@60,-2560x0,1
# monitor=DP-2,3840x2160@60,0x-1440,1,transform,2

monitor=DP-1,preferred,auto,1
monitor=HDMI-A-1,preferred,auto-left,1
monitor=DP-2,preferred,auto-up,1,transform,2


Config File: /home/rai/.config/hypr/conf/autostart.conf: Read Succeeded
# ----------------------------------------------------- 
# Autostart
# ----------------------------------------------------- 

# Setup XDG for screen sharing
exec-once = ~/.config/hypr/scripts/xdg.sh

# Start Polkit
# Test Polkit pkexec --user username alacritty
exec-once=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1

# Load Dunst Notification Manager
exec-once = dunst

# Load GTK settings
exec-once = ~/.config/hypr/scripts/gtk.sh

# Using hypridle to start hyprlock
exec-once = hypridle

# Load cliphist history
exec-once = wl-paste --watch cliphist store

# Autostart ML4W App
exec-once = ~/.config/hypr/scripts/ml4w-welcome-autostart.sh

# Start ewww daemon
exec-once = ags &

# Initialize waypaper
# exec-once = waypaper --restore
exec-once = hyprpaper

# Launch Waybar
exec-once = ~/.config/waybar/launch.sh

# Start autostart cleanup
exec-once = ~/.config/hypr/scripts/cleanup.sh

# Load configuration from ML4W Hyprland Settings App
exec = ~/.config/ml4w-hyprland-settings/hyprctl.sh


Config File: /home/rai/.config/hypr/conf/cursor.conf: Read Succeeded
exec-once = hyprctl setcursor Catppuccin-Mocha-Dark-Cursors 18


Config File: /home/rai/.config/hypr/conf/environment.conf: Read Succeeded
source = ~/.config/hypr/conf/environments/default.conf


Config File: /home/rai/.config/hypr/conf/environments/default.conf: Read Succeeded
# ----------------------------------------------------- 
# Environment Variables
# name: "Default"
# ----------------------------------------------------- 

# Default Settings in ml4w.conf


Config File: /home/rai/.config/hypr/conf/keyboard.conf: Read Succeeded
# ----------------------------------------------------- 
# Keyboard Layout
# https://wiki.hyprland.org/Configuring/Variables/#input
# -----------------------------------------------------
input {
    kb_layout = gb
    kb_variant = 
    kb_model =
    kb_options =
    numlock_by_default = true
    mouse_refocus = false
    
    # For United States
    # kb_layout = us
    # kb_variant = intl
    # kb_model = pc105
    # kb_options =

    follow_mouse = 1
    touchpad {
        # for desktop
        natural_scroll = false
        
        # for laptop
        # natural_scroll = yes
        # middle_button_emulation = true
        # clickfinger_behavior = false     
        scroll_factor = 1.0  # Touchpad scroll factor
    }
    sensitivity = 0 # Pointer speed: -1.0 - 1.0, 0 means no modification.
}

gestures {
    workspace_swipe = true
}

Config File: /home/rai/.cache/wal/colors-hyprland.conf: Read Succeeded
$background = rgb(0a0d19)
$foreground = rgb(eae2e7)
$color0 = rgb(0a0d19)
$color1 = rgb(4D8EC8)
$color2 = rgb(65A3D7)
$color3 = rgb(DBB2B4)
$color4 = rgb(9EACDE)
$color5 = rgb(D4B8DD)
$color6 = rgb(A7CDF3)
$color7 = rgb(eae2e7)
$color8 = rgb(a39ea1)
$color9 = rgb(4D8EC8)
$color10 = rgb(65A3D7)
$color11 = rgb(DBB2B4)
$color12 = rgb(9EACDE)
$color13 = rgb(D4B8DD)
$color14 = rgb(A7CDF3)
$color15 = rgb(eae2e7)

Config File: /home/rai/.config/hypr/conf/window.conf: Read Succeeded
source = ~/.config/hypr/conf/windows/default.conf


Config File: /home/rai/.config/hypr/conf/windows/default.conf: Read Succeeded
# ----------------------------------------------------- 
# General window layout and colors
# name: "Default"
# ----------------------------------------------------- 

general {
    gaps_in = 10
    gaps_out = 14
    border_size = 3
    col.active_border = $color11
    col.inactive_border = rgba(ffffffff)
    layout = dwindle
    resize_on_border = true
}


Config File: /home/rai/.config/hypr/conf/decoration.conf: Read Succeeded
source = ~/.config/hypr/conf/decorations/default.conf

Config File: /home/rai/.config/hypr/conf/decorations/default.conf: Read Succeeded
# ----------------------------------------------------- 
# General window decoration
# name: "Default"
# ----------------------------------------------------- 

decoration {
    rounding = 10
    blur {
        enabled = true
        size = 6
        passes = 2
        new_optimizations = on
        ignore_opacity = true
        xray = true
        # blurls = waybar
    }
    active_opacity = 1.0
    inactive_opacity = 0.8
    fullscreen_opacity = 1.0

    drop_shadow = true
    shadow_range = 30
    shadow_render_power = 3
    col.shadow = 0x66000000
}


Config File: /home/rai/.config/hypr/conf/layout.conf: Read Succeeded
source = ~/.config/hypr/conf/layouts/default.conf

Config File: /home/rai/.config/hypr/conf/layouts/default.conf: Read Succeeded
# ----------------------------------------------------- 
# Layouts
# ----------------------------------------------------- 

dwindle {
    pseudotile = true
    preserve_split = true
}

master {
    # Commented out due to compatibility reasons
    # new_status = master
}

gestures {
    workspace_swipe = false
}

Config File: /home/rai/.config/hypr/conf/misc.conf: Read Succeeded
# ----------------------------------------------------- 
# Misc settings
# ----------------------------------------------------- 

misc {
    disable_hyprland_logo = true
    disable_splash_rendering = true
}


Config File: /home/rai/.config/hypr/conf/keybinding.conf: Read Succeeded
source = ~/.config/hypr/conf/keybindings/default.conf

Config File: /home/rai/.config/hypr/conf/keybindings/default.conf: Read Succeeded
# ----------------------------------------------------- 
# Key bindings
# name: "Default"
# ----------------------------------------------------- 

# SUPER KEY
$mainMod = SUPER
$HYPRSCRIPTS = ~/.config/hypr/scripts
$SCRIPTS = ~/.config/ml4w/scripts

# Applications
bind = $mainMod, RETURN, exec, ~/.config/ml4w/settings/terminal.sh # Open the terminal
bind = $mainMod, B, exec, ~/.config/ml4w/settings/browser.sh # Open the browser
bind = $mainMod, E, exec, ~/.config/ml4w/settings/filemanager.sh # Open the filemanager
bind = $mainMod CTRL, E, exec, ~/.config/ml4w/settings/emojipicker.sh # Open the emoji picker
bind = $mainMod CTRL, C, exec, ~/.config/ml4w/settings/calculator.sh # Open the calculator

# Windows
bind = $mainMod, Q, killactive # Kill active window
bind = $mainMod, F, fullscreen # Set active window to fullscreen
bind = $mainMod, T, togglefloating # Toggle active windows into floating mode
bind = $mainMod SHIFT, T, exec, $HYPRSCRIPTS/toggleallfloat.sh # Toggle all windows into floating mode
bind = $mainMod, J, togglesplit # Toggle split
bind = $mainMod, left, movefocus, l # Move focus left
bind = $mainMod, right, movefocus, r # Move focus right
bind = $mainMod, up, movefocus, u # Move focus up
bind = $mainMod, down, movefocus, d # Move focus down
bindm = $mainMod, mouse:272, movewindow # Move window with the mouse
bindm = $mainMod, mouse:273, resizewindow # Resize window with the mouse
bind = $mainMod SHIFT, right, resizeactive, 100 0 # Increase window width with keyboard
bind = $mainMod SHIFT, left, resizeactive, -100 0 # Reduce window width with keyboard
bind = $mainMod SHIFT, down, resizeactive, 0 100 # Increase window height with keyboard
bind = $mainMod SHIFT, up, resizeactive, 0 -100 # Reduce window height with keyboard
bind = $mainMod, G, togglegroup # Toggle window group

# Actions
bind = $mainMod SHIFT, A, exec, $HYPRSCRIPTS/toggle-animations.sh # Toggle animations
bind = $mainMod, PRINT, exec, $HYPRSCRIPTS/screenshot.sh # Take a screenshot
bind = $mainMod SHIFT, S, exec, $HYPRSCRIPTS/screenshot.sh # Take a screenshot
bind = $mainMod CTRL, Q, exec, wlogout # Start wlogout
bind = $mainMod SHIFT, W, exec, waypaper --random # Change the wallpaper
bind = $mainMod CTRL, W, exec, waypaper # Open wallpaper selector
bind = $mainMod ALT, W, exec, $HYPRSCRIPTS/wallpaper-automation.sh # Start random wallpaper script
bind = $mainMod CTRL, RETURN, exec, rofi -show drun -replace -i # Open application launcher
bind = $mainMod CTRL, K, exec, $HYPRSCRIPTS/keybindings.sh # Show keybindings
bind = $mainMod SHIFT, B, exec, ~/.config/waybar/launch.sh # Reload waybar
bind = $mainMod CTRL, B, exec, ~/.config/waybar/toggle.sh # Toggle waybar
bind = $mainMod SHIFT, R, exec, $HYPRSCRIPTS/loadconfig.sh # Reload hyprland config
bind = $mainMod, V, exec, $SCRIPTS/cliphist.sh # Open clipboard manager
bind = $mainMod CTRL, T, exec, ~/.config/waybar/themeswitcher.sh # Open waybar theme switcher
bind = $mainMod CTRL, S, exec, ~/.config/ml4w/apps/ML4W_Dotfiles_Settings-x86_64.AppImage # Open ML4W Dotfiles Settings app
bind = $mainMod SHIFT, H, exec, $HYPRSCRIPTS/hyprshade.sh # Toggle screenshader
bind = $mainMod ALT, G, exec, $HYPRSCRIPTS/gamemode.sh # Toggle game mode

# Workspaces
bind = $mainMod, 1, workspace, 1 # Open workspace 1
bind = $mainMod, 2, workspace, 2 # Open workspace 2
bind = $mainMod, 3, workspace, 3 # Open workspace 3
bind = $mainMod, 4, workspace, 4 # Open workspace 4
bind = $mainMod, 5, workspace, 5 # Open workspace 5
bind = $mainMod, 6, workspace, 6 # Open workspace 6
bind = $mainMod, 7, workspace, 7 # Open workspace 7
bind = $mainMod, 8, workspace, 8 # Open workspace 8
bind = $mainMod, 9, workspace, 9 # Open workspace 9
bind = $mainMod, 0, workspace, 10 # Open workspace 10

bind = $mainMod SHIFT, 1, movetoworkspace, 1 # Move active window to workspace 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2 # Move active window to workspace 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3 # Move active window to workspace 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4 # Move active window to workspace 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5 # Move active window to workspace 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6 # Move active window to workspace 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7 # Move active window to workspace 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8 # Move active window to workspace 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9 # Move active window to workspace 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10 # Move active window to workspace 10

bind = $mainMod, Tab, workspace, m+1 # Open next workspace
bind = $mainMod SHIFT, Tab, workspace, m-1 # Open previous workspace

bind = $mainMod CTRL, 1, exec, $HYPRSCRIPTS/moveTo.sh 1 # Move all windows to workspace 1
bind = $mainMod CTRL, 2, exec, $HYPRSCRIPTS/moveTo.sh 2 # Move all windows to workspace 2
bind = $mainMod CTRL, 3, exec, $HYPRSCRIPTS/moveTo.sh 3 # Move all windows to workspace 3
bind = $mainMod CTRL, 4, exec, $HYPRSCRIPTS/moveTo.sh 4 # Move all windows to workspace 4
bind = $mainMod CTRL, 5, exec, $HYPRSCRIPTS/moveTo.sh 5 # Move all windows to workspace 5
bind = $mainMod CTRL, 6, exec, $HYPRSCRIPTS/moveTo.sh 6 # Move all windows to workspace 6
bind = $mainMod CTRL, 7, exec, $HYPRSCRIPTS/moveTo.sh 7 # Move all windows to workspace 7
bind = $mainMod CTRL, 8, exec, $HYPRSCRIPTS/moveTo.sh 8 # Move all windows to workspace 8
bind = $mainMod CTRL, 9, exec, $HYPRSCRIPTS/moveTo.sh 9 # Move all windows to workspace 9
bind = $mainMod CTRL, 0, exec, $HYPRSCRIPTS/moveTo.sh 10 # Move all windows to workspace 10

bind = $mainMod, mouse_down, workspace, e+1 # Open next workspace
bind = $mainMod, mouse_up, workspace, e-1 # Open previous workspace
bind = $mainMod CTRL, down, workspace, empty # Open the next empty workspace

# Passthrough SUPER KEY to Virtual Machine
bind = $mainMod, P, submap, passthru # Passthrough SUPER key to virtual machine
submap = passthru
bind = SUPER, Escape, submap, reset # Get SUPER key back from virtual machine
submap = reset

# Fn keys
bind = , XF86MonBrightnessUp, exec, brightnessctl -q s +10% # Increase brightness by 10%
bind = , XF86MonBrightnessDown, exec, brightnessctl -q s 10%- # Reduce brightness by 10%
bind = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% # Increase volume by 5%
bind = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% # Reduce volume by 5%
bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle # Toggle mute
bind = , XF86AudioPlay, exec, playerctl play-pause # Audio play pause
bind = , XF86AudioPause, exec, playerctl pause # Audio pause
bind = , XF86AudioNext, exec, playerctl next # Audio next
bind = , XF86AudioPrev, exec, playerctl previous # Audio previous
bind = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle # Toggle microphone
bind = , XF86Calculator, exec, ~/.config/ml4w/settings/calculator.sh # Open calculator
bind = , XF86Lock, exec, hyprlock # Open screenlock
bind = , XF86Tools, exec, alacritty --class dotfiles-floating -e ~/.config/ml4w/apps/ML4W_Dotfiles_Settings-x86_64.AppImage # Open ML4W Dotfiles Settings app

bind = , code:238, exec, brightnessctl -d smc::kbd_backlight s +10
bind = , code:237, exec, brightnessctl -d smc::kbd_backlight s 10- 

Config File: /home/rai/.config/hypr/conf/windowrule.conf: Read Succeeded
source = ~/.config/hypr/conf/windowrules/default.conf

Config File: /home/rai/.config/hypr/conf/windowrules/default.conf: Read Succeeded
# ----------------------------------------------------- 
# Window rules
# ----------------------------------------------------- 

windowrule = tile,^(Microsoft-edge)$
windowrule = tile,^(Brave-browser)$
windowrule = tile,^(Chromium)$
windowrule = float,^(pavucontrol)$
windowrule = float,^(blueman-manager)$
windowrule = float,^(nm-connection-editor)$
windowrule = float,^(qalculate-gtk)$

# Browser Picture in Picture
windowrulev2 = float, title:^(Picture-in-Picture)$
windowrulev2 = pin, title:^(Picture-in-Picture)$
windowrulev2 = move 69.5% 4%, title:^(Picture-in-Picture)$


Config File: /home/rai/.config/hypr/conf/animation.conf: Read Succeeded
source = ~/.config/hypr/conf/animations/animations-high.conf


Config File: /home/rai/.config/hypr/conf/animations/animations-high.conf: Read Succeeded
# ----------------------------------------------------- 
# Animations
# name: "High"
# ----------------------------------------------------- 
animations {
    enabled = true
    bezier = wind, 0.05, 0.9, 0.1, 1.05
    bezier = winIn, 0.1, 1.1, 0.1, 1.1
    bezier = winOut, 0.3, -0.3, 0, 1
    bezier = liner, 1, 1, 1, 1
    animation = windows, 1, 6, wind, slide
    animation = windowsIn, 1, 6, winIn, slide
    animation = windowsOut, 1, 5, winOut, slide
    animation = windowsMove, 1, 5, wind, slide
    animation = border, 1, 1, liner
    animation = borderangle, 1, 30, liner, loop
    animation = fade, 1, 10, default
    animation = workspaces, 1, 5, wind
}


Config File: /home/rai/.config/hypr/conf/custom.conf: Read Succeeded
# Add your additional Hyprland configurations here
# 
# This is an additional key binding 
# bind = $mainMod CTRL, up, workspace, empty
# 
# Example for xwayland
# xwayland {
#   force_zero_scaling = true
# }

# qt5ct environment variable
# env = QT_QPA_PLATFORMTHEME,qt5ct

# SDL version
env = SDL_VIDEODRIVER,wayland
# env = SDL_VIDEODRIVER,x11


Config File: /home/rai/.config/hypr/conf/ml4w.conf: Read Succeeded
# ----------------------------------------------------- 
# ML4W configurations
# ----------------------------------------------------- 
# Pavucontrol floating
windowrulev2 = float,class:(.*org.pulseaudio.pavucontrol.*)
windowrulev2 = size 700 600,class:(.*org.pulseaudio.pavucontrol.*)
windowrulev2 = center,class:(.*org.pulseaudio.pavucontrol.*)
windowrulev2 = pin,class:(.*org.pulseaudio.pavucontrol.*)

# OpenAI ChatGPT floating
windowrulev2 = float,title:(ChatGPT.*)
windowrulev2 = float,title:(.*chat.openai.com.*)
windowrulev2 = size 500 50%,title:(.*chat.openai.com.*)
windowrulev2 = move 20 70,title:(.*chat.openai.com.*)

# ML4W Welcome App floating
windowrulev2 = float,class:(.*waypaper.*)
windowrulev2 = size 800 700,class:(.*waypaper.*)
windowrulev2 = center,class:(.*waypaper.*)
windowrulev2 = pin,class:(.*waypaper.*)

# ML4W Welcome App floating
windowrulev2 = float,class:(com.ml4w.welcome)
windowrulev2 = size 700 600,class:(com.ml4w.welcome)
windowrulev2 = center,class:(com.ml4w.welcome)
windowrulev2 = pin,class:(com.ml4w.welcome)

windowrulev2 = float,class:(ml4w-welcome.py)
windowrulev2 = size 400 500,class:(ml4w-welcome.py)
windowrulev2 = center,class:(ml4w-welcome.py)
windowrulev2 = pin,class:(ml4w-welcome.py)

# ML4W Settings App floating
windowrulev2 = float,class:(com.ml4w.dotfilessettings)
windowrulev2 = size 700 600,class:(com.ml4w.dotfilessettings)
windowrulev2 = move 10% 20%,class:(com.ml4w.dotfilessettings)
windowrulev2 = pin,class:(com.ml4w.dotfilessettings)

windowrulev2 = float,class:(ml4w-dotfiles-settings.py)
windowrulev2 = size 400 500,class:(ml4w-dotfiles-settings.py)
windowrulev2 = move 10% 20%,class:(ml4w-dotfiles-settings.py)
windowrulev2 = pin,class:(ml4w-dotfiles-settings.py)

# ML4W Hyprland App floating
windowrulev2 = float,class:(com.ml4w.hyprland.settings)
windowrulev2 = size 700 600,class:(com.ml4w.hyprland.settings)
windowrulev2 = center,class:(com.ml4w.hyprland.settings)
windowrulev2 = pin,class:(com.ml4w.hyprland.settings)

windowrulev2 = float,class:(ml4w-hyprland-settings.py)
windowrulev2 = size 700 600,class:(ml4w-hyprland-settings.py)
windowrulev2 = center,class:(ml4w-hyprland-settings.py)
windowrulev2 = pin,class:(ml4w-hyprland-settings.py)

# System Mission Center
windowrulev2 = float, class:(io.missioncenter.MissionCenter)
windowrulev2 = pin, class:(io.missioncenter.MissionCenter)
windowrulev2 = center, class:(io.missioncenter.MissionCenter)
windowrulev2 = size 900 600, class:(io.missioncenter.MissionCenter)

# System Mission Center Preference Window
windowrulev2 = float, class:(missioncenter), title:^(Preferences)$
windowrulev2 = pin, class:(missioncenter), title:^(Preferences)$
windowrulev2 = center, class:(missioncenter), title:^(Preferences)$

# Gnome Calculator
windowrulev2 = float,class:(org.gnome.Calculator)
windowrulev2 = size 700 600,class:(org.gnome.Calculator)
windowrulev2 = center,class:(org.gnome.Calculator)

# Emoji Picker Smile
windowrulev2 = float,class:(it.mijorus.smile)
windowrulev2 = pin, class:(it.mijorus.smile)
windowrulev2 = move 100%-w-40 90,class:(it.mijorus.smile)

# Hyprland Share Picker
windowrulev2 = float, class:(hyprland-share-picker)
windowrulev2 = pin, class:(hyprland-share-picker)
windowrulev2 = center, title:class:(hyprland-share-picker)
windowrulev2 = size 600 400,class:(hyprland-share-picker)

# General floating
windowrulev2 = float,class:(dotfiles-floating)
windowrulev2 = size 1000 700,class:(dotfiles-floating)
windowrulev2 = center,class:(dotfiles-floating)
windowrulev2 = pin, class:(dotfiles-floating)

# XDG Desktop Portal
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland

# QT
env = QT_QPA_PLATFORM,wayland;xcb
env = QT_QPA_PLATFORMTHEME,qt6ct
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_AUTO_SCREEN_SCALE_FACTOR,1

# GDK
env = GDK_SCALE,1

# Toolkit Backend
env = GDK_BACKEND,wayland,x11,*
env = CLUTTER_BACKEND,wayland

# Mozilla
env = MOZ_ENABLE_WAYLAND,1

# Set the cursor size for xcursor
env = XCURSOR_SIZE,17

# Disable appimage launcher by default
env = APPIMAGELAUNCHER_DISABLE,1

# Ozone
env = OZONE_PLATFORM,wayland
env = ELECTRON_OZONE_PLATFORM_HINT,wayland

env = WLR_NO_HARDWARE_CURSORS,0

debug {
  overlay = false
}

======Config-End========

Description

  • Cursors on untransformed monitors are perfectly fine, but on a transformed monitor the cursor moves even if another monitor is the one with focus
  • Cursor boundary / canvas seems to be set to match the primary monitor. For example, if my primary monitor is 2560x1440 and my transformed monitor is 3140x2160 then I am unable to click on any UI element that is outside the 2560x1440 top left corner of the transformed monitor.
  • If I remove the transform then all works as expected (but my screen is upside down so this solution is kinda useless for me)

How to reproduce

have two monitors with different resolutions
transform one of them to be upside down
move cursor
???
profit

Crash reports, logs, images, videos

I have a video on youtube that demonstrates the issue:

Youtube Video of Hyprland Cursor Issue
https://www.youtube.com/watch?v=t_Gvd_6j1uc

@rbutera rbutera added the bug Something isn't working label Aug 19, 2024
@vaxerski
Copy link
Member

post hyprctl monitors

likely that logic coordinates overlap

I should make a warning pop up in those cases

@rbutera
Copy link
Author

rbutera commented Aug 19, 2024

@vaxerski

post hyprctl monitors

likely that logic coordinates overlap

I should make a warning pop up in those cases

> hyprctl monitors              
Monitor DP-1 (ID 0):
	[email protected] at 0x0
	description: Samsung Electric Company LC32G7xT H4ZR100979
	make: Samsung Electric Company
	model: LC32G7xT
	serial: H4ZR100979
	active workspace: 1 (1)
	special workspace: 0 ()
	reserved: 0 43 0 0
	scale: 1.00
	transform: 0
	focused: yes
	dpmsStatus: 1
	vrr: 0
	activelyTearing: false
	disabled: false
	currentFormat: XRGB8888
	availableModes: [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] 

Monitor DP-2 (ID 1):
	[email protected] at 0x-2160
	description: Samsung Electric Company U28E590 HTPK610641
	make: Samsung Electric Company
	model: U28E590
	serial: HTPK610641
	active workspace: 2 (2)
	special workspace: 0 ()
	reserved: 0 43 0 0
	scale: 1.00
	transform: 2
	focused: no
	dpmsStatus: 1
	vrr: 0
	activelyTearing: false
	disabled: false
	currentFormat: XRGB8888
	availableModes: [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] 

Monitor HDMI-A-1 (ID 2):
	[email protected] at -2560x0
	description: LG Electronics LG SDQHD 211NTHM6B881
	make: LG Electronics
	model: LG SDQHD
	serial: 211NTHM6B881
	active workspace: 3 (3)
	special workspace: 0 ()
	reserved: 0 43 0 0
	scale: 1.00
	transform: 0
	focused: no
	dpmsStatus: 1
	vrr: 0
	activelyTearing: false
	disabled: false
	currentFormat: XRGB8888
	availableModes: [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] 

Thank you for a quick reply. Unfortunately, I don't think the coordinates are overlapping - the bug doesn't happen if I unset the transform of that display. Unless the logic coordinates overlap due to the transform?

I was using this monitor configuration before and even then it had the same issue:

monitor=DP-1,2560x1440@240,0x0,1
monitor=HDMI-A-1,2560x2880@60,-2560x0,1
monitor=DP-2,3840x2160@60,0x-1440,1,transform,2

if I remove transform,2 the cursors behave as expected, except now my top monitor is upside down 😢

@vaxerski
Copy link
Member

odd indeed, have you tried not using negative offsets?

@rbutera
Copy link
Author

rbutera commented Aug 19, 2024

with this i still have the issue:

monitor=DP-1,preferred,3840x2160,1
monitor=HDMI-A-1,preferred,-3840x2160,1
monitor=DP-2,preferred,0x0,1,transform,2

@rbutera
Copy link
Author

rbutera commented Aug 19, 2024

even with this i still have an issue. it's like DP-2's cursor logic is tied to DP-1 as soon as I apply a transform

monitor=DP-1,preferred,auto,1
monitor=HDMI-A-1,preferred,auto,1
monitor=DP-2,preferred,auto,1,transform,2

@vaxerski
Copy link
Member

really odd... for the sake of testing, what if you put one at 0x0 another at 5000x5000 and the third at 10000x10000

@rbutera
Copy link
Author

rbutera commented Aug 19, 2024

doesn't work. well, it kinda fixes one problem. the two monitors no longer share cursor movement, but monitor DP-2 still thinks it's 2560x1440 for cursor (but is displaying windows that fill the whole 3840x2160)

i know nothing about the inner workings of hyprland but i'm guessing the transform logic applies the transform to the display canvas and then applies the transform to the cursor matrix (or whatever it's called) and there's a bug in the code that makes it select the cursor matrix of the primary monitor instead of the monitor that's being transformed.

@rbutera
Copy link
Author

rbutera commented Aug 19, 2024

at this point I wish I could just mount the monitor the right way up, but unfortunately Samsung was really silly and put the vesa mount on the top edge of that monitor rather than in the middle, so it's not physically possible

@rbutera
Copy link
Author

rbutera commented Aug 21, 2024

OK so this bug is new in version 42. I installed version 41 to test and I have no such bug with my cursor. I hope this can be fixed in a future update

@vaxerski
Copy link
Member

can you bisect then

@rbutera
Copy link
Author

rbutera commented Aug 24, 2024

@vaxerski Thank you for the suggestion to bisect. However, I've discovered some additional information that changes the situation:

  1. The bug doesn't occur in version 0.41.x.
  2. In version 0.42, the bug doesn't appear when using the 'legacy renderer' option.
  3. The new renderer was introduced in version 0.42 as a complete feature.

Given these points, it seems the bug is specifically related to the new renderer implementation. Since the new renderer was added all at once, a bisect between 0.41 and 0.42 won't be effective in pinpointing the exact cause of the bug.

Perhaps I could test any experimental fixes or tweaks to the new renderer code if you have suspicions about what might be causing the issue?

I'm happy to assist further in any way that would be most useful for debugging this issue.

@vaxerski
Copy link
Member

can you just bisect with git to find the exact commit https://wiki.hyprland.org/Crashes-and-Bugs/#bisecting-an-issue

@rbutera
Copy link
Author

rbutera commented Aug 25, 2024

OK interesting development, turns out legacy renderer has the issue as well. I will bisect and find the problem

@rbutera
Copy link
Author

rbutera commented Aug 27, 2024

can you just bisect with git to find the exact commit wiki.hyprland.org/Crashes-and-Bugs#bisecting-an-issue

@vaxerski ok I found the first bad commit:

[f642fb9] core: Fix crash on opening chromium (#6932)

@rbutera
Copy link
Author

rbutera commented Aug 27, 2024

here's my bisect log if that helps at all

git bisect start
# status: waiting for both good and bad commits
# good: [918d8340afd652b011b937d29d5eea0be08467f5] flake.lock: update
git bisect good 918d8340afd652b011b937d29d5eea0be08467f5
# status: waiting for bad commit, 1 good commit known
# bad: [9a09eac79b85c846e3a865a9078a3f8ff65a9259] props: bump version to 0.42.0
git bisect bad 9a09eac79b85c846e3a865a9078a3f8ff65a9259
# bad: [a0be3de0e89f42b98d00bf0d87ad10af843d58d6] keybinds: handle monitor change in moveWindowIntoGroup (#7030)
git bisect bad a0be3de0e89f42b98d00bf0d87ad10af843d58d6
# good: [8e15f91c2417c8f05d69a93f1294185ccc5f8f3e] input: Emulate discrete scrolling from v120 events (#6881)
git bisect good 8e15f91c2417c8f05d69a93f1294185ccc5f8f3e
# bad: [d03fa94c2ca1a642959e31adc4fcc2447a3cc623] core: avoid locking 2 wayland sockets (#6971)
git bisect bad d03fa94c2ca1a642959e31adc4fcc2447a3cc623
# bad: [928d1dd38a6e4a791d4a4374a4a3bf02311adbb2] CMake, Meson, Nix: replace props.json with VERSION
git bisect bad 928d1dd38a6e4a791d4a4374a4a3bf02311adbb2
# bad: [cf373d315e9fb060576ed407bd5ee2dfb8a6d2e2] touch: add touch swipe invert config (#6940)
git bisect bad cf373d315e9fb060576ed407bd5ee2dfb8a6d2e2
# good: [9b0993cc49b7285a2724a87fdb72bfc90cc75cc5] [gha] build man pages
git bisect good 9b0993cc49b7285a2724a87fdb72bfc90cc75cc5
# bad: [016da234d0e852de3ef20eb2e89ac58d2a85f6e7] Core: Move to aquamarine (#6608)
git bisect bad 016da234d0e852de3ef20eb2e89ac58d2a85f6e7

@rbutera
Copy link
Author

rbutera commented Aug 27, 2024

that doesn't really make sense though because I believe that the line changed in that commit was reverted in a later commit... so I'm running bisect again

@rbutera
Copy link
Author

rbutera commented Aug 27, 2024

I just ran bisect again and it pointed to the exact same commit

@vaxerski
Copy link
Member

dafoq

@rbutera
Copy link
Author

rbutera commented Aug 29, 2024

yeah dafoq! any ideas how we could resolve this? i'm using 0.41.0 for now and it's working great but I am loving hyprland and don't want to be left behind.

@rbutera
Copy link
Author

rbutera commented Aug 29, 2024

it's possible that the real bad commit is 016da23?

@vaxerski
Copy link
Member

could be, no clue tho

@rbutera
Copy link
Author

rbutera commented Sep 2, 2024

Problematic Commit

@vaxerski I can confirm that the issue is present in 016da23 and not in the preceding f642fb97.

I think that this suggests that it's a bug related to either Aquamarine or how Aquamarine interfaces with Hyprland.

Do you have any idea how we could fix this?

I thought if I used legacy renderer in compilation I could use wlroots instead of Aquamarine. Am I mistaken?

Edit: Experiments

I decided to conduct some experiments on 0.42.0, which might help pinpoint the issue.

Experiment 1: Scaling

I thought that the cursor boundaries were matching the primary monitor so I thought a workaround could either be to set the scaling of the buggy monitor to 1.5x to match 2560x1440.

Unfortunately, even scaled at 1.5x, the cursor boundary is much smaller than the visible screen canvas.

Experiment 2: Resolution

I tried configuring the monitor to be 2560x1440 so that both monitors were the same resolution. Unfortunately the cursor boundaries are still smaller than the visible screen area.

Experiment 3: Single-Monitor Only

I tried disabling the other two monitors, (using monitor=DP-1,disabled) in my Hyprland.conf and left only the buggy monitor enabled. Unfortunately this did not fix the issue.

Experiment 4: Different Transform

I tried a different transform: this time I tried rotating the monitor 90 degrees in my Hyprland.conf. Unfortunately this did not fix the issue. Interestingly, the full vertical resolution of the monitor was available, only the width had a smaller cursor canvas.

Experiment 5: Disabled Transform

I tried removing the transform. With transform disabled, the cursor behaves as expected.

Hypothesis

I think the issue lies where Aquamarine handles its transforms.

@vaxerski
Copy link
Member

vaxerski commented Sep 2, 2024

I really doubt it's a problem in aq, I'd bet on some transform oopsie in hl that happened in the transition

@rbutera
Copy link
Author

rbutera commented Sep 3, 2024

Ahh, I tried having a look through the commit to find the relevant code for the transform but I'm a bit lost

@rbutera
Copy link
Author

rbutera commented Sep 9, 2024

I really doubt it's a problem in aq, I'd bet on some transform oopsie in hl that happened in the transition

Hi @vaxerski i know you've probably got a million issues to be thinking about right now but I was wondering if you had any more thoughts about this issue? I am eager to help in any way I can

@vaxerski
Copy link
Member

vaxerski commented Sep 9, 2024

no clue, this is just weird

@Zer0-One
Copy link

Zer0-One commented Sep 11, 2024

I'm seeing the same issue with a 2-display setup. I can confirm that the problem started when I moved from 0.41 to 0.42, when aquamarine was first pulled in as a dependency.

I have one vertical display, and one horizontal display to the right of it. An interesting bit of behavior is that when I move the mouse left, to the vertical display, the "bugged" mouse on the right display snaps to the top left corner. And then when an event occurs that changes the cursor (e.g from pointer to hand), the mouse then snaps down on the right display to match the Y coordinate on the left display. The position does not change until the cursor changes.

@drammelt
Copy link

I have this issue on Hyprland 0.43 using amdgpu driver. I did not have this issue on 0.42 with nvidia prop driver. Exact same config used for both. Will investigate the code when I have time.

@drammelt
Copy link

Confirmed 016da23 is first bad commit. Chonky one so this will be fun...

@drammelt
Copy link

Found something related to the issue...

The reason why nvidia was fine was because it was using software cursor. So I tried using "env WLR_NO_HARDWARE_CURSORS=1 Hyprland" which only partially disables hardware cursors. The function CPointerManager::updateCursorBackend() still consider the cursor to be hardware.

if (state->softwareLocks > 0 || *PNOHW || !attemptHardwareCursor(state)) {

Returns false and so the cursor->hardwareFailed is set to false. So now the cursor is a software cursor but is handled as a hardware one.

So forcing cursor->hardwareFailed = true fixes the original warping issue, obviously because it is using a full software cursor. However there are still other issues where the checks are obviously wrong. Moving the mouse back and forward between the 2 monitors results in the cursor randomly being drawn as a hardware cursor.

@vaxerski
Copy link
Member

well yeah, something in the hw cursor xforms is wrong imo

@drammelt
Copy link

Not sure if the variable is only for NVIDIA or something. But the wiki says WLR_NO_HARDWARE_CURSORS is deprecated, when it appears to be removed (for amdgpu at least).

Setting

cursor {
    no_hardware_cursors = true
}

Works as expected and resolves the warping issue. I will look more into the actual HW cursor side later.

It does seem strange though, that the cursor when set to -1337, -420 warps to 0, 0 instead. And it is also very strange that the actual warp is caused by mousing over window decorations/entering exiting new windows. I did test and it never actually considers that the cursor has re-entered the glitching monitor. So there has to be a case where a check is updating all mice positions regardless of bounds.

well yeah, something in the hw cursor xforms is wrong imo

Is there not someway to just hide the mouse on the second monitor other than warping it off screen? No idea if that would just be a band aid for this kind of issue though.

@vaxerski
Copy link
Member

band-aid cuz the coords would be wrong still no?

@drammelt
Copy link

band-aid cuz the coords would be wrong still no?

Yes, I am not really sure if it would matter or not as I haven't looked into how clicks/focus and such would be affected on the glitched/non focused monitor. If clicks/focus are ignored on the non focused monitor then it wouldn't matter since when the mouse re-entered the monitor its position would be updated anyway. And if refocused via keyboard the mouse would just be warped.

The mouse can only slide along the closest edge to the currently focused monitor (so only x or y are updated on the glitched cursor not both), so I would guess it might only have some affect if a floating window was at the edge, or no margins were set? Or maybe with some random 3/4 monitor layouts where you could arrange them in a crazy wind mill formation or something.

@drammelt
Copy link

drammelt commented Sep 15, 2024

OK, figured out what is going on.

bool CPointerManager::attemptHardwareCursor(SP<CPointerManager::SMonitorPointerState> state) {
auto output = state->monitor->output;
if (!(output->getBackend()->capabilities() & Aquamarine::IBackendImplementation::eBackendCapabilities::AQ_BACKEND_CAPABILITY_POINTER))
return false;
const auto CURSORPOS = getCursorPosForMonitor(state->monitor.lock());
state->monitor->output->moveCursor(CURSORPOS);
auto texture = getCurrentCursorTexture();
if (!texture) {
Debug::log(TRACE, "[pointer] no texture for hw cursor -> hiding");
setHWCursorBuffer(state, nullptr);
return true;
}
auto buffer = renderHWCursorBuffer(state, texture);

This function is called whenever the mouse transisitions/moves over a decoration etc. That sets the mouse position for all pointers, but there is only a single pointer position so all pointers end up getting moved.

Vector2D pointerPos = {0, 0};

Then it checks the cursor image and sets it, again for all cursors resulting in the bonus mouse cursor getting a new look.

Since the actual position of the mouse pointer on the second monitor is never tracked you could just add a hide/show when a cursor leaves/enters and this issue would be solved.

The attemptHardwareCursor function should also probably only update positions/images of new pointers, or when some actual setting has changed like the hyprland.conf disable hardware cursors.

@vaxerski
Copy link
Member

just add a hide/show when a cursor leaves/enters and this issue would be solved.

that's doable.

@vaxerski
Copy link
Member

see #7806

@rbutera
Copy link
Author

rbutera commented Sep 17, 2024

@drammelt do your findings also concern the issue where the cursor boundaries are smaller on the transformed display, or only the issue which creates multiple cursors

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants