hyprwm / hyprpaper

Hyprpaper is a blazing fast wayland wallpaper utility with IPC controls.
https://wiki.hyprland.org/Hypr-Ecosystem/hyprpaper/
BSD 3-Clause "New" or "Revised" License
761 stars 55 forks source link

Turning off monitor stops outputting wallpaper #54

Open ghost opened 1 year ago

ghost commented 1 year ago

What happens:

When I turn off my monitor, this disconnects DP-1. Hyprpaper reacts accordingly: [LOG] Destroying output DP-1

Steps to reproduce:

  1. run hyprpaper
  2. turn off monitor
  3. turn on monitor
  4. wallpaper is gone

killall hyprpaper && hyprpaper fixes this, but it needs to be run every time I turn the monitor back on. I've tried this with both wallpaper = ,/path/to/img and wallpaper = DP-1,/path/to/img in the config, same result.

Expected result:

Wallpaper is persistent; re-apply wallpaper after DP-1/fallback display is reconnected (turned back on)

Vagahbond commented 1 year ago

Have similar issue where whenever I plug a monitor in or out hyprpaper stops working. fix is doing Hyprctl reload with an exec of hyprpaper in my conf

vaxerski commented 1 year ago

should be fixed in 654647f7b3cdeaf2f22df0b6744b3d63fb12bc0e, lmk

ghost commented 1 year ago

I'm still experiencing this problem, same output in logs.

hyprland 0.24.1-1, hyprpaper 0.2.0-1, xdg-desktop-portal-hyprland 0.2.1-1 from new Arch community repository.

Hanssen0 commented 1 year ago

Same here, built from commit b4fdc0be52d7c3e48e932698bafc3f69dbd45b3b (CI: update nix install action). The hyprpaper detected the monitor changed event but didn't apply the configuration to the new monitor.

xlacroixx commented 1 year ago

Same issue started occurring on release 0.3.0: Hyprpaper doesn't apply the wallpaper when the monitor is plugged out then in.

Downgrading to 0.2.0 seems to fix it.

vaxerski commented 1 year ago

uhh wat, can you git bisect it?

xlacroixx commented 1 year ago

uhh wat, can you git bisect it?

Sorry, but it might take time for me to bisect. I've haven't learned how to yet; I will maybe do it this week.

krenyy commented 1 year ago

I did git bisect and it seems the commit 66b3ba8 introduced the issue.

tmilner commented 1 year ago

Im getting the same issue. Once the screen it turned off the wallpaper is no longer displayed. I have to kill hyprpaper and start it again to regain a wallpaper. (built from commit - a1d9ab7584485fe0b4a992abf19486a72179d4b2)

loqusion commented 1 year ago

I did git bisect and it seems the commit 66b3ba8 introduced the issue.

I can also confirm that the bug appears in 66b3ba8, but not in its parent commit 3bfaac0.

vaxerski commented 1 year ago

patch.txt how about this

loqusion commented 1 year ago

Bug still happens with patch :/

Hanssen0 commented 1 year ago

https://github.com/hyprwm/hyprpaper/blob/66b3ba8d9faa6b6a8894ecc03ac61667d344b8bc/src/helpers/Monitor.hpp#L9

I tried a few times and found that the new description field is the problem. New monitor detection works on 3bfaac0 but stops working after adding this property only.

This might relate to the structure SMonitor's size. Notice that:

struct SMonitor {
    std::string name = "";
    int test;
    int test1;
    wl_output* output = nullptr;

works, it needs 248 bytes. and:

struct SMonitor {
    std::string name = "";
    int test;
    int test1;
    int test2;
    wl_output* output = nullptr;

doesn't, it needs 256 bytes.

struct SMonitor {
    std::string name = "";
    std::string description = "";
    wl_output* output = nullptr;

needs 272 bytes.

I hope this helps.

Hanssen0 commented 1 year ago

https://github.com/hyprwm/hyprpaper/blob/66b3ba8d9faa6b6a8894ecc03ac61667d344b8bc/src/render/LayerSurface.cpp#L35

The event listeners are correctly registered for all monitors, but the event handler: https://github.com/hyprwm/hyprpaper/blob/66b3ba8d9faa6b6a8894ecc03ac61667d344b8bc/src/events/Events.cpp#L81 is not called for my external monitor.

lfos commented 1 year ago

c2fb8a2 fixes the issue for me; please give it a try.

@vaxerski We may also want to consider switching m_mMonitorActiveWallpaperTargets to a string-based map (with keys being monitor names, similar to other maps in CHyperpaper) to avoid the size-based side effects described here. After switching, the issue always appears without the fix from PR #79 applied (regardless of the size of SMonitor) and never appears after the fix.

jakubkaczor commented 1 year ago

For me, this doesn't fix the issue, but hyprpaper doesn't even output [LOG] Destroying output DP-1 when I run hyprctl keyword monitor "eDP-1, disable"; hyprctl keyword monitor "eDP-1, preferred, 0x1080, 1".

vaxerski commented 1 year ago

@lfos if anything, wl_output* and not string.

samchouse commented 1 year ago

For me hyprpaper crashes when I turn a monitor back on after turning it off.

[LOG] Destroying output DP-2
[LOG] configure for DP-1
[LOG] Image data for DP-1: /home/sam/.dotfiles/wallpaper.jpg at [-0.00, 0.00], scale: 1.00 (original image size: [2560, 1440])
[LOG] Submitting viewport dest size 2560x1440 for c8bec0c0
[LOG] handlePreferredScale: 1.00 for 5556c8bec0c0
[LOG] configure for DP-2
[LOG] handlePreferredScale: 1.00 for 5556c8be5240
[LOG] handlePreferredScale: 1.00 for 5556c8be5240
[LOG] Accepted incoming socket connection request on fd 5
[LOG] Image data for DP-2: /home/sam/.dotfiles/wallpaper.jpg at [-0.00, 0.00], scale: 1.00 (original image size: [2560, 1440])
[LOG] Submitting viewport dest size 2560x1440 for c8be5240
[LOG] Received a request: wallpaper DP-2,~/Pictures/wallpaper.jpg
[LOG] configure for DP-2
[LOG] handlePreferredScale: 1.00 for 5556c8be5240
[LOG] handlePreferredScale: 1.00 for 5556c8be5240
[LOG] Image data for DP-2: /home/sam/.dotfiles/wallpaper.jpg at [-0.00, 0.00], scale: 1.00 (original image size: [2560, 1440])
[LOG] Submitting viewport dest size 2560x1440 for 5c000d30
[LOG] configure for DP-2
[LOG] handlePreferredScale: 1.00 for 7f115c000d30
[LOG] handlePreferredScale: 1.00 for 7f115c000d30
[LOG] configure for DP-2
[LOG] Image data for DP-2: /home/sam/.dotfiles/wallpaper.jpg at [-0.00, 0.00], scale: 1.00 (original image size: [2560, 1440])
[LOG] Submitting viewport dest size 2560x1440 for 5c000d30
zwlr_layer_surface_v1@30: error 0: wrong configure serial: 2415