hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
21.89k stars 911 forks source link

scuffed cursor with transformed secondary display #7412

Open rbutera opened 3 months ago

rbutera commented 3 months ago

Regression?

No

System Info and Version

System/Version info ```sh 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

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

vaxerski commented 3 months ago

post hyprctl monitors

likely that logic coordinates overlap

I should make a warning pop up in those cases

rbutera commented 3 months ago

@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):
    2560x1440@239.95799 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: 2560x1440@239.96Hz 2560x1440@59.95Hz 2560x1440@144.00Hz 2560x1440@120.00Hz 1920x1200@239.96Hz 1920x1080@239.76Hz 1920x1080@143.98Hz 1920x1080@120.00Hz 1920x1080@119.88Hz 1920x1080@60.00Hz 1920x1080@60.00Hz 1920x1080@59.94Hz 1920x1080@50.00Hz 1600x1200@239.96Hz 1680x1050@59.95Hz 1600x900@60.00Hz 1280x1024@75.03Hz 1280x1024@60.02Hz 1440x900@59.89Hz 1280x800@59.81Hz 1152x864@75.00Hz 1280x720@60.00Hz 1280x720@60.00Hz 1280x720@59.94Hz 1280x720@50.00Hz 1024x768@75.03Hz 1024x768@70.07Hz 1024x768@60.00Hz 832x624@74.55Hz 800x600@75.00Hz 800x600@72.19Hz 800x600@60.32Hz 800x600@56.25Hz 720x576@50.00Hz 720x480@60.00Hz 720x480@59.94Hz 640x480@75.00Hz 640x480@72.81Hz 640x480@66.67Hz 640x480@60.00Hz 640x480@59.94Hz 720x400@70.08Hz 

Monitor DP-2 (ID 1):
    3840x2160@59.99700 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: 3840x2160@60.00Hz 3840x2160@30.00Hz 3840x2160@29.97Hz 2560x1440@59.95Hz 1920x1200@60.00Hz 1920x1080@60.00Hz 1920x1080@60.00Hz 1920x1080@59.94Hz 1600x1200@60.00Hz 1680x1050@59.95Hz 1600x900@60.00Hz 1280x1024@75.03Hz 1280x1024@60.02Hz 1440x900@59.89Hz 1280x800@59.81Hz 1152x864@75.00Hz 1280x720@60.00Hz 1280x720@59.94Hz 1024x768@75.03Hz 1024x768@70.07Hz 1024x768@60.00Hz 832x624@74.55Hz 800x600@75.00Hz 800x600@72.19Hz 800x600@60.32Hz 800x600@56.25Hz 640x480@75.00Hz 640x480@72.81Hz 640x480@66.67Hz 640x480@60.00Hz 640x480@59.94Hz 720x400@70.08Hz 

Monitor HDMI-A-1 (ID 2):
    2560x2880@59.96700 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: 2560x2880@59.97Hz 3840x2160@60.00Hz 3840x2160@59.94Hz 3840x2160@50.00Hz 3840x2160@30.00Hz 3840x2160@29.97Hz 3840x2160@25.00Hz 3840x2160@24.00Hz 3840x2160@23.98Hz 2560x2880@29.99Hz 1920x1200@59.97Hz 1920x1080@60.00Hz 1920x1080@60.00Hz 1920x1080@59.94Hz 1920x1080@50.00Hz 1920x1080@30.00Hz 1920x1080@29.97Hz 1600x1200@59.97Hz 1680x1050@59.97Hz 1280x1024@59.97Hz 1440x900@59.97Hz 1280x800@59.97Hz 1280x720@60.00Hz 1280x720@59.94Hz 1280x720@50.00Hz 1024x768@60.00Hz 800x600@60.32Hz 720x576@50.00Hz 720x480@60.00Hz 720x480@59.94Hz 640x480@60.00Hz 640x480@59.94Hz 640x480@59.94Hz 

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 commented 3 months ago

odd indeed, have you tried not using negative offsets?

rbutera commented 3 months ago

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 commented 3 months ago

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 commented 3 months ago

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

rbutera commented 3 months ago

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 commented 3 months ago

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 commented 3 months ago

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 commented 3 months ago

can you bisect then

rbutera commented 3 months ago

@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 commented 3 months ago

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

rbutera commented 3 months ago

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

rbutera commented 3 months ago

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:

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

rbutera commented 3 months ago

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 commented 3 months ago

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 commented 3 months ago

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

vaxerski commented 3 months ago

dafoq

rbutera commented 3 months ago

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 commented 3 months ago

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

vaxerski commented 3 months ago

could be, no clue tho

rbutera commented 2 months ago

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 commented 2 months ago

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

rbutera commented 2 months ago

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

rbutera commented 2 months ago

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 commented 2 months ago

no clue, this is just weird

Zer0-One commented 2 months ago

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 commented 2 months ago

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 commented 2 months ago

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

drammelt commented 2 months ago

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.

https://github.com/hyprwm/Hyprland/blob/d35e70a8c6599bb058cf86eb87c783ce1cf72471/src/managers/PointerManager.cpp#L318

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 commented 2 months ago

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

drammelt commented 2 months ago

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 commented 2 months ago

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

drammelt commented 2 months ago

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 commented 2 months ago

OK, figured out what is going on.

https://github.com/hyprwm/Hyprland/blob/e74efd87e5aa38f9cf84cb3848ee1ab26e5e4bcb/src/managers/PointerManager.cpp#L313-L330

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.

https://github.com/hyprwm/Hyprland/blob/e74efd87e5aa38f9cf84cb3848ee1ab26e5e4bcb/src/managers/PointerManager.hpp#L155

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 commented 2 months ago

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

that's doable.

vaxerski commented 2 months ago

see https://github.com/hyprwm/Hyprland/pull/7806

rbutera commented 2 months ago

@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