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.09k stars 882 forks source link

Weird clipboard behavior with citrix workspace #7752

Open Kommynct opened 1 month ago

Kommynct commented 1 month ago

Already reported ? *

Regression?

No

System Info and Version

System/Version info ```sh Hyprland, built from branch main at commit 0f594732b063a90d44df8c5d402d658f27471dfe (props: bump version to 0.43.0). Date: 2024-09-08 Tag: v0.43.0, commits: 0f594732b063a90d44df8c5d402d658f27471dfe flags: (if any) System Information: System name: Linux Node name: anarchy-desktop Release: 6.10.7-zen1 Version: #1-NixOS ZEN SMP PREEMPT_DYNAMIC Tue Jan 1 00:00:00 UTC 1980 GPU information: 06:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 23 [Radeon RX 6650 XT / 6700S / 6800S] [1002:73ef] (rev c1) (prog-if 00 [VGA controller]) os-release: ANSI_COLOR="1;34" BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues" BUILD_ID="24.11pre679633.1355a0cbfeac" DOCUMENTATION_URL="https://nixos.org/learn.html" HOME_URL="https://nixos.org/" ID=nixos IMAGE_ID="" IMAGE_VERSION="" LOGO="nix-snowflake" NAME=NixOS PRETTY_NAME="NixOS 24.11 (Vicuna)" SUPPORT_URL="https://nixos.org/community.html" VERSION="24.11 (Vicuna)" VERSION_CODENAME=vicuna VERSION_ID="24.11" plugins: ======Config-Start====== Config File: /home/communist/.config/hypr/hyprland.conf: Read Succeeded source = ~/.config/hypr/modules/*.conf source = ~/.config/hypr/$HOSTNAME.conf Config File: /home/communist/.config/hypr/modules/binds-dvorak.conf: Read Succeeded $volup = wpctl set-mute @DEFAULT_SINK@ 0 && wpctl set-volume @DEFAULT_SINK@ 5%+ -l 2.0 && pw-play --volume=0.2 /run/current-system/sw/share/sounds/freedesktop/stereo/audio-volume-change.oga $voldown = wpctl set-mute @DEFAULT_SINK@ 0 && wpctl set-volume @DEFAULT_SINK@ 5%- -l 2.0 && pw-play --volume=0.2 /run/current-system/sw/share/sounds/freedesktop/stereo/audio-volume-change.oga $volmute = wpctl set-mute @DEFAULT_SINK@ toggle && pw-play --volume=0.2 /run/current-system/sw/share/sounds/freedesktop/stereo/audio-volume-change.oga $lightup = light -A 10 $lightdown = light -U 10 $launcher = tofi-drun --history true --drun-launch=true --prompt-text " " $sinkswitch = wpctl set-default $(pw-cli i $(pactl list sinks | rg --fixed-strings -B 1 "$(pactl list sinks | rg Description: | sd ' Description: ' '' | sd 'Easy Effects Sink' '' | sd --fixed-strings "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" '' | rg '.' || echo "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" | tofi --prompt-text " " --height 40% --width 40% --auto-accept-single true )" | rg Name: | awk '{print $2}' ) | rg -oP 'id: \K\w+') && notify-send --urgency=low --icon=/usr/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" -h string:x-canonical-private-synchronous:sink-state && pw-play --volume=0.2 /run/current-system/sw/share/sounds/freedesktop/stereo/audio-volume-change.oga &! $micmute = wpctl set-mute @DEFAULT_SOURCE@ toggle ; wpctl get-volume @DEFAULT_SOURCE@ | rg -q 'MUTED' && notify-send ' Mic Muted' -h string:x-canonical-private-synchronous:mic-state || notify-send --urgency=low '  Mic unmuted' -h string:x-canonical-private-synchronous:mic-state #submaps bind = ALT, a, submap,onehand bind = ALT_SHIFT, 0, submap, "Gaming Mode - Press alt+shift+0 to exit" submap=onehand bind =,e, movefocus, r bind =,a, movefocus, l bind =,COMMA, movefocus, u bind =,o, movefocus, d bind =,e, bringactivetotop bind =,a, bringactivetotop bind =,COMMA, bringactivetotop bind =,o, bringactivetotop bind = ALT, e, movewindow, r bind = ALT, a, movewindow, l bind = ALT, COMMA, movewindow, u bind = ALT, o, movewindow, d binde = SUPER,e,resizeactive,10 0 binde = SUPER,a,resizeactive,-10 0 binde = SUPER,COMMA,resizeactive,0 -10 binde = SUPER,o,resizeactive,0 10 bindel=,XF86AudioRaiseVolume, exec, $volup bindel=,XF86AudioLowerVolume, exec, $voldown bindl = ALT, UP, exec, $volup bindl = ALT, DOWN, exec, $voldown bindl =,XF86AudioMute, exec, $volmute bindl =,XF86MonBrightnessUp, exec, $lightup bindl =,XF86MonBrightnessDown, exec, $lightdown bindl =,XF86AudioPlay, exec, playerctl play bindl =,XF86AudioPause, exec, playerctl pause bindl =,XF86AudioNext, exec, playerctl next bindl =,XF86AudioPrev, exec, playerctl previous bindm = SUPER, mouse:272, movewindow bindm = SUPER, mouse:273, resizewindow bind =,ESCAPE,submap,reset bindnr=,catchall,submap,reset submap=reset submap="Gaming Mode - Press alt+shift+0 to exit" bind = ALT_SHIFT, 0, submap, reset bindel=,XF86AudioRaiseVolume, exec, $volup bindel=,XF86AudioLowerVolume, exec, $voldown bindl =,XF86AudioMute, exec, $volmute bindl =,XF86MonBrightnessUp, exec, $lightup bindl =,XF86MonBrightnessDown, exec, $lightdown bindl =,XF86AudioPlay, exec, playerctl play bindl =,XF86AudioPause, exec, playerctl pause bindl =,XF86AudioNext, exec, playerctl next bindl =,XF86AudioPrev, exec, playerctl previous submap=reset #close hyprland bind = SUPER_ALT, r, exit, #Window management bind = SUPER, e, killactive, bind = ALT, k, togglefloating, bind = SUPER, k, togglesplit, bind = SUPER_ALT, u, exec, killall -SIGUSR1 waybar bind = ALT, u, fullscreen #Programs bind = SUPER, U, exec, alacritty msg create-window || alacritty bind = SUPER, PERIOD, exec, xdg-open ~ #bind = SUPER, a, exec, hyprctl dispatch closewindow zim & zim bind = SUPER, a, exec, hyprctl dispatch closewindow Zim & env GDK_BACKEND=x11 zim bind = SUPER, y, exec, firefox bind = CONTROL_SHIFT, escape, exec, resources bind = SUPER_ALT, r, exec, syncplay --no-gui bind = SUPER_ALT, k, exec, copyq show #Menus bind = SUPER, SPACE, exec, $launcher bind = SUPER, ESCAPE, exec, ~/.config/tofi/scripts/power.sh bind =,XF86PowerOff, exec, ~/.config/tofi/scripts/power.sh bind = SUPER_ALT, e, exec, alacritty --config-file ~/.config/alacritty/alacritty-speedreader.toml --class 'alacrittyspeedreader' -e zsh -c 'wl-paste | speedread -w 500' # Move focus with mainMod + arrow keys bind = ALT, s, movefocus, r bind = ALT, h, movefocus, l bind = ALT, t, movefocus, u bind = ALT, n, movefocus, d bind = ALT, s, bringactivetotop bind = ALT, h, bringactivetotop bind = ALT, t, bringactivetotop bind = ALT, n, bringactivetotop bind = SUPER, s, movewindow, r bind = SUPER, h, movewindow, l bind = SUPER, t, movewindow, u bind = SUPER, n, movewindow, d # Switch workspaces bind = ALT, 1, workspace, 1 bind = ALT, 2, workspace, 2 bind = ALT, 3, workspace, 3 bind = ALT, 4, workspace, 4 bind = ALT, 5, workspace, 5 bind = ALT, 6, workspace, 6 bind = ALT, 7, workspace, 7 bind = ALT, x, workspace, 7 bind = ALT, 8, workspace, 8 bind = ALT, j, workspace, 8 bind = ALT, 9, workspace, 9 bind = ALT, q, workspace, 9 bind = ALT, 0, workspace, 10 bind = ALT, SEMICOLON, workspace, 10 bind = ALT, p, togglespecialworkspace,  #special tweak bind = ALT, 1, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 2, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 3, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 4, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 5, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 6, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 7, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, x, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 8, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, j, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 9, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, q, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, 0, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] bind = ALT, SEMICOLON, exec, hyprctl monitors -j | jaq -r '.[] | select(.focused == true) | .specialWorkspace.name' | sd 'special:' '' | xargs -I [] hyprctl dispatch togglespecialworkspace [] # Move to workspace bind = SUPER, 1, movetoworkspacesilent, 1 bind = SUPER, 2, movetoworkspacesilent, 2 bind = SUPER, 3, movetoworkspacesilent, 3 bind = SUPER, 4, movetoworkspacesilent, 4 bind = SUPER, 5, movetoworkspacesilent, 5 bind = SUPER, 6, movetoworkspacesilent, 6 bind = SUPER, 7, movetoworkspacesilent, 7 bind = SUPER, x, movetoworkspacesilent, 7 bind = SUPER, 8, movetoworkspacesilent, 8 bind = SUPER, j, movetoworkspacesilent, 8 bind = SUPER, 9, movetoworkspacesilent, 9 bind = SUPER, q, movetoworkspacesilent, 9 bind = SUPER, 0, movetoworkspacesilent, 10 bind = SUPER, SEMICOLON, movetoworkspacesilent, 10 bind = SUPER, p, movetoworkspacesilent, special: # Move/resize windows with mainMod + LMB/RMB and dragging bindm = SUPER, mouse:272, movewindow bindm = SUPER, mouse:273, resizewindow #volume/brightness bindel=,XF86AudioRaiseVolume, exec, $volup bindel=,XF86AudioLowerVolume, exec, $voldown bindl = ALT, UP, exec, $volup bindl = ALT, DOWN, exec, $voldown bindl = ALT, y, exec, $volup bindl = ALT, i, exec, $voldown bindl =,XF86AudioMute, exec, $volmute bindl =,XF86MonBrightnessUp, exec, $lightup bindl =,XF86MonBrightnessDown, exec, $lightdown bindl = ALT, apostrophe, exec, $sinkswitch bind = SUPER, o, exec, $micmute # media bindl =,XF86AudioPlay, exec, playerctl play bindl =,XF86AudioPause, exec, playerctl pause bindl =,XF86AudioNext, exec, playerctl next bindl =,XF86AudioPrev, exec, playerctl previous #notifications bind = ALT, e, exec, makoctl dismiss -g bind = ALT, PERIOD, exec, makoctl invoke # screenshots bind = ALT, o, exec, wayshot -s "$(slurp -b 00000000 -s cc000090 -w 0)" -f $(xdg-user-dir PICTURES)/.clipboard.png && wl-copy --type image/png < $(xdg-user-dir PICTURES)/.clipboard.png && wl-paste > $(xdg-user-dir PICTURES)/.clipboard/$(date +'%s.png') && pw-play --volume=0.05 /run/current-system/sw/share/sounds/freedesktop/stereo/camera-shutter.oga bind = SUPER_ALT, p, exec, wayshot -o $(hyprctl monitors -j | jaq -r '.[] | select(.focused) | .name') -f $(xdg-user-dir PICTURES)/.clipboard.png && wl-copy --type image/png < $(xdg-user-dir PICTURES)/.clipboard.png && wl-paste > $(xdg-user-dir PICTURES)/.clipboard/$(date +'%s.png') && pw-play --volume=0.05 /run/current-system/sw/share/sounds/freedesktop/stereo/camera-shutter.oga bind = SUPER_ALT, o, exec, zsh -c 'wayshot -s "$(slurp -b 00000000 -s cc000090 -w 0)" --stdout | tesseract stdin /tmp/tesseract && pw-play --volume=0.05 /run/current-system/sw/share/sounds/freedesktop/stereo/camera-shutter.oga & wl-copy < /tmp/tesseract.txt ; rm /tmp/tesseract.txt' # list bind = SUPER, SLASH, exec, hyprkeys --from-ctl --json | jaq -r --slurp "[.[]][0]" | jaq -r '.[] | "\(.mods) \(.key) \(.dispatcher) \(.arg)"' | tofi --width 90% --height 90% --prompt "keys:" # lock screen bindrl = SUPER_ALT, l, exec, sleep 0.5 && systemctl suspend & powerprofilesctl set power-saver & hyprlock -c ~/.config/hypr/hyprlock/hyprlock-nograce.conf && rg -qq 0 /sys/class/power_supply/*/online && powerprofilesctl set power-saver || powerprofilesctl set performance Config File: /home/communist/.config/hypr/modules/exec.conf: Read Succeeded exec-once = mkdir /tmp/Pictures/ && mv ~/Pictures/.clipboard/* /tmp/Pictures/ exec-once = bato exec-once = copyq --start-server exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE exec-once = gammastep exec-once = hyprland-autoname-workspaces exec-once = powerprofilesctl set performance && sleep 5 && rg -qq 0 /sys/class/power_supply/*/online && powerprofilesctl set power-saver || powerprofilesctl set performance exec-once = steam -nochatui -nofriendsui -silent exec-once = swayidle timeout 600 'hyprlock -c ~/.config/hypr/hyprlock/hyprlock-grace.conf' timeout 660 'powerprofilesctl set power-saver & hyprctl dispatch dpms off' resume 'rg -qq 0 /sys/class/power_supply/*/online && powerprofilesctl set power-saver || powerprofilesctl set performance' exec-once = hyprlock -c ~/.config/hypr/hyprlock/hyprlock-startup.conf exec-once = swww-daemon -q --format xrgb exec-once = while true; do mako -c ~/.config/mako/config; done exec-once = wljoywake exec-once = zsh -c 'sleep 1' && while true; do waybar; done exec-once = zsh -c 'sleep 10' && while true; do easyeffects --gapplication-service; done exec-once = zsh -c 'sleep 3' && deluge-gtk exec-once = zsh -c 'sleep 3' && element-desktop --hidden exec-once = zsh -c 'sleep 3' && firefox exec-once = zsh -c 'sleep 3' && telegram-desktop -startintray exec-once = hyprctl dispatch exec wayland-pipewire-idle-inhibit env = CLUTTER_BACKEND,wayland env = ELECTRON_OZONE_PLATFORM_HINT,wayland env = GDK_BACKEND,wayland,x11,* env = QT_QPA_PLATFORM,wayland;xcb env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 env = XDG_CURRENT_DESKTOP,Hyprland env = XDG_SESSION_DESKTOP,Hyprland env = XDG_SESSION_TYPE,wayland Config File: /home/communist/.config/hypr/modules/input.conf: Read Succeeded input { follow_mouse = 1 repeat_delay = 195 repeat_rate = 70 touchpad { tap_button_map = lmr } } gestures { workspace_swipe = true workspace_swipe_touch = true } Config File: /home/communist/.config/hypr/modules/layout.conf: Read Succeeded dwindle { pseudotile = no preserve_split = yes } general { #allow_tearing = true } master { # new_is_master = false } misc { disable_autoreload = true key_press_enables_dpms = true # mouse_move_enables_dpms = true } xwayland { force_zero_scaling = true } monitor=,highrr,auto,1 Config File: /home/communist/.config/hypr/modules/render.conf: Read Succeeded decoration { blur { brightness = 1.0 contrast = 1.0 enabled = true noise = 0.02 passes = 3 size = 10 special = true vibrancy = 0.3 vibrancy_darkness = 1.0 } col.shadow = rgba(00000055) drop_shadow = yes rounding = 3 shadow_range = 4 shadow_render_power = 3 } animations { enabled = yes bezier = accelerateEasing, 0.4, 0.0, 1, 1 bezier = standardEasing, 0.4, 0.0, 0.2, 1 animation = border, 1, 1, standardEasing animation = layersIn, 1, 1, standardEasing, popin animation = layersOut, 1, 1, accelerateEasing, popin animation = windowsIn, 1, 1, standardEasing, slide animation = windowsMove, 1, 1, standardEasing, slide animation = windowsOut, 1, 1, accelerateEasing, slide animation = workspaces, 1, 1, standardEasing, slidevert } layerrule=animation slide bottom,waybar layerrule=animation slide top,notifications layerrule=blur,notifications layerrule=blur,waybar layerrule=ignorealpha 0.5647,notifications layerrule=noanim,selection windowrulev2 = animation popin,floating:1 general { border_size = 2 col.active_border = rgba(cc0000ee) col.inactive_border = rgba(000000aa) gaps_in = 0 gaps_out = 0 } render { # direct_scanout = true } misc { background_color = 0x000000 disable_hyprland_logo = true disable_splash_rendering = true # hide_cursor_on_touch = true new_window_takes_over_fullscreen = 1 } Config File: /home/communist/.config/hypr/modules/theme.conf: Read Succeeded exec-once = dconf write /org/gnome/desktop/interface/cursor-size 32 exec-once = dconf write /org/gnome/desktop/interface/cursor-theme "'Posy_Cursor_Black'" exec-once = dconf write /org/gnome/desktop/interface/document-font-name "'Noto Sans Medium 11'" exec-once = dconf write /org/gnome/desktop/interface/enable-animations true exec-once = dconf write /org/gnome/desktop/interface/font-name "'Noto Sans Medium 11'" exec-once = dconf write /org/gnome/desktop/interface/gtk-theme "'ancomblackred'" exec-once = dconf write /org/gnome/desktop/interface/icon-theme "'Flat-Remix-Red-Dark'" exec-once = dconf write /org/gnome/desktop/interface/monospace-font-name "'Noto Sans Mono Medium 11'" exec-once = hyprctl setcursor Posy_Cursor_Black 32 exec-once = zsh -c 'sleep 0.1' && swww img ~/.config/wallpaper/wallpaper.png env = GTK_OVERLAY_SCROLLING,1 env = HYPRCURSOR_SIZE,32 env = HYPRCURSOR_THEME,Posy_Cursor_Black env = QT_AUTO_SCREEN_SCALE_FACTOR,0 env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 env = TDESKTOP_I_KNOW_ABOUT_GTK_INCOMPATIBILITY,1 env = XCURSOR_SIZE,32 env = XCURSOR_THEME,Posy_Cursor_Black env = _JAVA_AWT_WM_NONREPARENTING,1 Config File: /home/communist/.config/hypr/modules/win-rules.conf: Read Succeeded #hyprctl clients | nv #fullscreen windowrulev2 = fullscreen,class:(CombatMaster.*) windowrulev2 = fullscreen,class:(LLBlaze.*) windowrulev2 = fullscreen,class:(clonehero) windowrulev2 = fullscreen,class:(YARG) windowrulev2 = fullscreen,class:(Fret-Smasher.*) windowrulev2 = fullscreen,class:(gamescope) windowrulev2 = fullscreen,class:(origin.exe) windowrulev2 = fullscreen,class:(sm64ex) windowrulev2 = fullscreen,class:(steam_app.*) windowrulev2 = fullscreen,class:(valheim.*) windowrulev2 = fullscreen,class:(dotnet),title:(Terraria: .*) # pin windowrulev2 = pin,class:(chromium),title:(MAX - Chromium) windowrulev2 = pin,class:(chromium),title:(https://max.niceincontact.com/index.html - Chromium) windowrulev2 = pin,class:(deluge),title:(Add Torrents*) windowrulev2 = pin,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:((?:Open|Save) (?:File|Folder|As)) windowrulev2 = pin,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Confirm to replace files) windowrulev2 = pin,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(^(File|Folder)\s*Already Exists\s*—\s*) windowrulev2 = pin,class:(firefox),title:(^Picture-in-Picture$) windowrulev2 = pin,class:(galculator) windowrulev2 = pin,class:(iwgtk) windowrulev2 = pin,class:(net.nokyan.Resources) windowrulev2 = pin,class:(org.twosheds.iwgtk) windowrulev2 = pin,class:(pavucontrol) windowrulev2 = pin,class:(qtalarm) windowrulev2 = pin,class:(stoken-gui) windowrulev2 = pin,class:(polkit-gnome-authentication-agent-1),title:(Authenticate) #stayfocused windowrulev2 = stayfocused,class:(iwgtk),title:(Wireless network credentials) windowrulev2 = stayfocused,class:(pcmanfm|pcmanfm-qt),title:(Search Files) windowrulev2 = stayfocused,class:(pcmanfm|pcmanfm-qt),title:(Confirm to replace files) windowrulev2 = stayfocused,class:(pcmanfm|pcmanfm-qt),title:(Create Folder) windowrulev2 = stayfocused,class:(pcmanfm|pcmanfm-qt),title:(Rename File) windowrulev2 = stayfocused,class:(pcmanfm|pcmanfm-qt),title:(Creating New Folder) windowrulev2 = stayfocused,class:(firefox),title:(File Upload) windowrulev2 = stayfocused,class:(polkit-gnome-authentication-agent-1),title:(Authenticate) #float windowrulev2 = float,class:(alacrittyspeedreader) windowrulev2 = float,class:(anki) windowrulev2 = float,class:(com.github.rajsolai.textsnatcher) windowrulev2 = float,class:(com.github.weclaw1.ImageRoll) windowrulev2 = float,class:(deluge),title:(Add Torrents*) windowrulev2 = float,class:(dolphin),title:(^Information\s*—\s*Dolphin) windowrulev2 = float,class:(dolphin|org.kde.ark),title:(^Extracting\s) windowrulev2 = float,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:((?:Open|Save) (?:File|Folder|As)) windowrulev2 = float,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Confirm to replace files) windowrulev2 = float,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Copy Files) windowrulev2 = float,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Delete Files) windowrulev2 = float,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Move files) windowrulev2 = float,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(^(Copying|Moving)\s*—\s*Dolphin) windowrulev2 = float,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(^(File|Folder)\s*Already Exists\s*—\s*) windowrulev2 = float,class:(firefox),title:(^Picture-in-Picture$) windowrulev2 = float,class:(galculator) windowrulev2 = float,class:(iwgtk) windowrulev2 = float,class:(net.nokyan.Resources) windowrulev2 = float,class:(org.gnome.Loupe) windowrulev2 = float,class:(org.kde.ark),title:(Compressing (.*) — Ark) windowrulev2 = float,class:(org.kde.ark),title:(^Loading archive) windowrulev2 = float,class:(org.telegram.desktop) windowrulev2 = float,class:(org.twosheds.iwgtk) windowrulev2 = float,class:(pavucontrol) windowrulev2 = float,class:(pcmanfm|pcmanfm-qt),title:(File Properties) windowrulev2 = float,class:(pcmanfm|pcmanfm-qt),title:(Preferences) windowrulev2 = float,class:(pcmanfm|pcmanfm-qt),title:(Removable medium is inserted) windowrulev2 = float,class:(qtalarm) windowrulev2 = float,class:(stoken-gui) windowrulev2 = float,class:(gnome-power-statistics) windowrulev2 = float,class:(teams-for-linux) windowrulev2 = float,class:(yakyak) windowrulev2 = float,class:(pcmanfm|pcmanfm-qt),title:(Search Files) windowrulev2 = float,class:(bfcal) windowrulev2 = float,class:(steam),title:(Steam Settings) windowrulev2 = float,class:(com.github.hluk.copyq) windowrulev2 = float,class:(lmirtechconsole.exe),title:(Create New Session) # [window_role="pop-up,task_dialog,About"] $float; shadows enable # [window_type="dialog"] $float; shadows enable # [window_type="utility"] $float; shadows enable # [window_type="toolbar"] $float; shadows enable # [window_type="splash"] $float; shadows enable # [window_type="menu"] $float; shadows enable # [window_type="dropdown_menu"] $float; shadows enable # [window_type="popup_menu"] $float; shadows enable # [window_type="tooltip"] $float; shadows enable # [window_type="notification"] $float; shadows enable #no border windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(chromium) windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(firefox) windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(mpv) windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(vlc) windowrulev2 = bordersize 0, fullscreen:1 #idleinhibit always windowrulev2 = idleinhibit always,class:(chromium),title:(MAX - Chromium) windowrulev2 = idleinhibit always,class:(chromium),title:(https://max.niceincontact.com/index.html - Chromium) windowrulev2 = idleinhibit always,class:(dolphin|org.kde.ark),title:(^Extracting\s) windowrulev2 = idleinhibit always,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Copy Files) windowrulev2 = idleinhibit always,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Delete Files) windowrulev2 = idleinhibit always,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(Move files) windowrulev2 = idleinhibit always,class:(dolphin|org.kde.ark|pcmanfm|pcmanfm-qt),title:(^(Copying|Moving)\s*—\s*Dolphin) windowrulev2 = idleinhibit always,class:(org.kde.ark),title:(Compressing (.*) — Ark) windowrulev2 = idleinhibit always,class:(org.kde.ark),title:(Loading archive (.*) — Ark) windowrulev2 = idleinhibit always,class:(pcmanfm|pcmanfm-qt),title:(Removable medium is inserted) # special workspace windowrulev2 = workspace special:,class:(CombatMaster.*) windowrulev2 = workspace special:,class:(LLBlaze.*) windowrulev2 = workspace special:,class:(clonehero) windowrulev2 = workspace special:,class:(YARG) windowrulev2 = workspace special:,class:(Fret-Smasher.*) windowrulev2 = workspace special:,class:(dolphin-emu),fullscreen:1 windowrulev2 = workspace special:,class:(gamescope) windowrulev2 = workspace special:,class:(origin.exe) windowrulev2 = workspace special:,class:(sm64ex) windowrulev2 = workspace special:,class:(steam_app.*) windowrulev2 = workspace special:,class:(valheim.*) windowrulev2 = workspace special:,class:(dotnet),title:(Terraria: .*) #renderunfocused #windowrulev2 = renderunfocused #add darksouls and any other broken games #misc windowrulev2 = minsize 100 100,class:^(steam)$ windowrulev2 = minsize 492 200,class:^(steam)$,title:(Steam Dialog) windowrulev2 = minsize 492 200,class:^(steam)$,title:(Shutdown) windowrulev2 = minsize 640 340,class:^(steam)$,title:(Sign Out) windowrulev2 = minsize 705 440,class:^(steam)$,title:(Sign in to Steam) windowrulev2 = minsize 706 830,class:^(steam)$,title:(Special Offers) windowrulev2 = minsize 600 286,class:^(steam)$,title:(Launching...) windowrulev2 = minsize 635 750,class:(dolphin-emu),title:(Vulkan Graphics Configuration) windowrulev2 = minsize 635 750,class:(dolphin-emu),title:(OpenGL Graphics Configuration) windowrulev2 = minsize 635 750,class:(dolphin-emu),title:(Controller Settings) windowrulev2 = minsize 635 750,class:(dolphin-emu),title:(Settings) windowrulev2 = minsize 1150 200,class:(alacrittyspeedreader) windowrulev2 = maxsize 1150 200,class:(alacrittyspeedreader) windowrulev2 = noinitialfocus,class:(mpvsounds) windowrulev2 = noinitialfocus,class:^(steam)$ windowrulev2 = suppressevent maximize,class:.* windowrulev2 = tile,class:(org.telegram.desktop),title:(Telegram) windowrulev2 = tile,class:(steam_app.*) windowrulev2 = tile,class:(valheim.*) windowrulev2 = tile,class:(dotnet),title:(Terraria: .*) workspace=n[s:special:],gapsin:20,gapsout:20 40 15 40 # [app_id="firefox" title="Firefox — Sharing Indicator"] floating enable; kill # [title="Wine System Tray"] floating enable; kill # [title="Compressing (.*) — Ark" app_id="org.kde.ark"] resize set width 18 ppt Config File: /home/communist/.config/hypr/anarchy-desktop.conf: Read Succeeded #rm -rf ~/.wine/ && wineboot -u && cp -r ~/.local/share/LogMeIn\ Rescue\ Technician\ Console ~/.wine/drive_c/Program\ Files\ \(x86\)/LogMeIn\ Rescue\ Technician\ Console && wine ~/.wine/drive_c/Program\ Files\ \(x86\)/LogMeIn\ Rescue\ Technician\ Console/LogMeInRescueTechnicianConsole_x64/LMIRTechConsole.exe device { name = logitech-usb-receiver sensitivity = -0.85 accel_profile = flat repeat_delay = 225 repeat_rate = 8 } device { name = paris-commune-mouse tap_button_map = lmr } device { name = sony-interactive-entertainment-dualsense-wireless-controller-touchpad enabled=0 } device { name = sony-interactive-entertainment-wireless-controller-touchpad enabled=0 } monitor=HDMI-A-1,disabled,highrr,0x0,2 monitor=DP-1,2560x1440,1280x0,1 exec = sleep 0.1 && hyprctl keyword monitor 'DP-1,highrr,1280x0,1' monitor=DP-2,preferred,3840x0,1 #exec-once = swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 #exec-once = pactl set-card-profile alsa_card.usb-Creative_Technology_Ltd_Sound_Blaster_X4 output:iec958-stereo && pactl set-default-sink alsa_output.usb-Creative_Technology_Ltd_Sound_Blaster_X4.iec958-stereo & pactl set-card-profile alsa_card.pci-0000_06_00 off exec-once = pactl set-card-profile alsa_card.usb-Creative_Technology_Ltd_Sound_Blaster_X4 output:iec958-stereo && pactl set-default-sink alsa_output.usb-Creative_Technology_Ltd_Sound_Blaster_X4.iec958-stereo exec = xrandr --output DP-1 --primary exec-once = swayidle timeout 660 "~/.config/tofi/scripts/smartthings devices:commands 1526283b-2f10-4f44-8eb1-d7226b49ece7 switch:off & hyprctl keyword monitor 'HDMI-A-1,disabled,highrr,0x0,2' & kanshictl switch noTV & pactl set-card-profile alsa_card.usb-Creative_Technology_Ltd_Sound_Blaster_X4 output:iec958-stereo & pactl set-default-sink alsa_output.usb-Creative_Technology_Ltd_Sound_Blaster_X4.iec958-stereo & pkill wl-mirror & makoctl mode -r camera-shy & hyprctl dispatch closewindow mpvsounds & pkill spotify" bind = SUPER, COMMA, exec, ~/.config/tofi/scripts/lights.sh #work bind = SUPER_ALT, m, exec, wine ~/.wine/drive_c/Program\ Files\ \(x86\)/LogMeIn\ Rescue\ Technician\ Console/LogMeInRescueTechnicianConsole_x64/LMIRTechConsole.exe bind = SUPER, w, exec, chromium & teams-for-linux & wine ~/.wine/drive_c/Program\ Files\ \(x86\)/LogMeIn\ Rescue\ Technician\ Console/LogMeInRescueTechnicianConsole_x64/LMIRTechConsole.exe #look/mobile bind = SUPER_ALT, c, exec, hyprctl dispatch movetoworkspace 9 & hyprctl dispatch workspace 9 & makoctl mode -r camera-shy & pkill wl-mirror & hyprctl dispatch movecursor 640 360 & swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 bind = SUPER_ALT, b, exec, makoctl mode -r camera-shy & pkill wl-mirror & hyprctl dispatch movecursor 640 360 & swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 bind = SUPER_ALT, v, exec, pkill wl-mirror ; makoctl mode -a camera-shy & hyprctl dispatch movecursor 2580 720 ; swaymsg input "117:256:Paris_Commune_Mouse" map_to_output DP-1 ; wl-mirror DP-1 && makoctl mode -r camera-shy && swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 bind = SUPER_ALT, z, exec, pkill wl-mirror ; makoctl mode -r camera-shy & hyprctl dispatch movecursor 4840 540 ; swaymsg input "117:256:Paris_Commune_Mouse" map_to_output DP-2 ; wl-mirror DP-2 && swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 #look/desktop bind = SUPER, v, exec, pkill wl-mirror ; makoctl mode -a camera-shy ; swaymsg input "117:256:Paris_Commune_Mouse" map_to_output DP-1 ; wl-mirror DP-1 && makoctl mode -r camera-shy && swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 bind = SUPER, BACKSLASH, exec, makoctl mode -r camera-shy & pkill wl-mirror & swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 bind = SUPER, z, exec, pkill wl-mirror ; makoctl mode -r camera-shy ; swaymsg input "117:256:Paris_Commune_Mouse" map_to_output DP-2 ; wl-mirror DP-2 && swaymsg input "117:256:Paris_Commune_Mouse" map_to_output HDMI-A-1 #monitor bind = SUPER, r, exec, ~/.config/tofi/scripts/smartthings devices:commands 1526283b-2f10-4f44-8eb1-d7226b49ece7 switch:off & hyprctl keyword monitor 'HDMI-A-1,disabled,highrr,0x0,2' & kanshictl switch noTV & pactl set-card-profile alsa_card.usb-Creative_Technology_Ltd_Sound_Blaster_X4 output:iec958-stereo & pactl set-default-sink alsa_output.usb-Creative_Technology_Ltd_Sound_Blaster_X4.iec958-stereo && notify-send --urgency=low --icon=/usr/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" -h string:x-canonical-private-synchronous:sink-state & pkill wl-mirror & makoctl mode -r camera-shy & hyprctl dispatch closewindow mpvsounds & pkill spotify bind = SUPER, c, exec, hyprctl keyword monitor 'HDMI-A-1,highrr,0x0,2' ; kanshictl switch TV ; pactl set-card-profile alsa_card.pci-0000_06_00 output:hdmi-stereo && pactl set-default-sink alsa_output.pci-0000_06_00.hdmi-stereo && notify-send --urgency=low --icon=/usr/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg "$(pactl list sinks | rg -A 1 "Name: $(pactl get-default-sink)" | rg Description: | sd ' Description: ' '')" -h string:x-canonical-private-synchronous:sink-state & hyprctl dispatch closewindow mpvsounds & swaymsg input '117:256:Paris_Commune_Mouse' map_to_output 'HDMI-A-1' & ~/.config/tofi/scripts/smartthings devices:commands 1526283b-2f10-4f44-8eb1-d7226b49ece7 switch:on || notify-send --urgency=low "TV is offline" && sleep 2 && "kanshictl switch TV & hyprctl keyword monitor 'HDMI-A-1,highrr,0x0,2'" #noise #bindl = ALT,apostrophe,exec, hyprctl clients | rg -q 'mpvsounds' && hyprctl dispatch closewindow mpvsounds && env PIPEWIRE_NODE=alsa_output.pci-0000_06_00.hdmi-stereo mpv --wayland-app-id=mpvsounds --start=0 --loop --pause=no --background=color --background-color=0/0/0/.03 --player-operation-mode=pseudo-gui ~/Documents/fire.ogg bindl = ALT,apostrophe,exec,hyprctl dispatch closewindow mpvsounds bind = SUPER_ALT, n, exec, [workspace 9 silent] hyprctl dispatch closewindow mpvsounds & hyprctl keyword monitor 'HDMI-A-1,highrr,0x0,2' ; swaymsg input '117:256:Paris_Commune_Mouse' map_to_output 'HDMI-A-1' & env PULSE_SINK=alsa_output.pci-0000_06_00.hdmi-stereo spotify bind = SUPER, minus, exec, hyprctl dispatch closewindow mpvsounds & pkill spotify & env PIPEWIRE_NODE=alsa_output.pci-0000_06_00.hdmi-stereo mpv --wayland-app-id=mpvsounds --start=0 --loop --pause=no --background=color --background-color=0/0/0/.03 --player-operation-mode=pseudo-gui ~/Documents/fire.ogg bind = ALT, COMMA, togglespecialworkspace,  windowrulev2 = workspace 9 silent, class:(at.yrlf.wl_mirror) windowrulev2 = fullscreen, class:(at.yrlf.wl_mirror) workspace=1,monitor:DP-1,default:true workspace=2,monitor:DP-2,default:true workspace=3,monitor:DP-2 workspace=4,monitor:DP-1 workspace=5,monitor:DP-1 workspace=9,monitor:HDMI-A-1,default:true workspace=10,monitor:DP-2 workspace=m[DP-1] n[s:special:],gapsin:20,gapsout:40 80 20 80 workspace=m[DP-2] n[s:special:],gapsin:20,gapsout:20 80 10 80 workspace=m[HDMI-A-1] n[s:special:],gapsin:10,gapsout:10 20 8 20 windowrulev2 = tile,class:(Wfica),title:(Office 365 Desktop) windowrulev2 = tile,class:(lmirtechconsole.exe) windowrulev2 = workspace 2 silent,class:(lmirtechconsole.exe) windowrulev2 = workspace 3 silent,class:(Wfica) windowrulev2 = workspace 3 silent,class:(waydroid.com.citrix.Receiver) windowrulev2 = workspace 3 silent,class:(Waydroid) windowrulev2 = workspace 9 silent,class:(mpvsounds) windowrulev2 = workspace 9 silent,class:(dev.alextren.Spot) windowrulev2 = workspace 9 silent,class:(Spotify) windowrulev2 = workspace 9 silent,class:(at.yrlf.wl_mirror) windowrulev2 = workspace special: silent,class:(chromium-browser) windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(lmirtechconsole.exe),title:(LogMeIn Rescue Technician Console) windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(Wfica) windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(Waydroid) windowrulev2 = bordersize 0, onworkspace:r[1-10],floating:0,class:(waydroid.com.citrix.Receiver) windowrulev2 = idleinhibit visible,class:(at.yrlf.wl_mirror) windowrulev2 = idleinhibit visible,class:(Wfica) windowrulev2 = idleinhibit visible,class:(Waydroid) windowrulev2 = idleinhibit visible,class:(waydroid.com.citrix.Receiver) # [class="lmirtechconsole.exe" window_type="dialog" title="Idle Time-Out"] kill #clipboard hack #bindntr=CTRL,C,exec,hyprctl dispatch closewindow alacrittyclipboard & hyprctl activewindow | rg -q "class: Wfica" && sleep 0.5 && env WAYLAND_DISPLAY= alacritty -qq --config-file ~/.config/alacritty/alacrittyclipboard.toml --class 'alacrittyclipboard' --title 'Office365 Desktop - Nexus (SSL/TLS Secured, 256 bit)' -e sh -c 'sleep 0.5 && xclip -o | env WAYLAND_DISPLAY=wayland-1 wl-copy' #bindntr=CTRL,C,exec,hyprctl activewindow | rg -q "xwayland: 0" && sleep 0.1 && wl-paste | rg xclip -o #bindntr=CTRL,C,exec,hyprctl activewindow | rg -q -e "xwayland: 0" -e "class: Wfica" || xclip -o | wl-copy #exec-once = wl-paste -t text -w bash -c '[ "$(xclip -selection clipboard -o)" = "$(wl-paste -n)" ] || [ "$(wl-paste -l | grep image)" = "" ] && xclip -selection clipboard' windowrulev2 = float,class:(alacrittyclipboard) windowrulev2 = stayfocused,class:(alacrittyclipboard) windowrulev2 = noborder,class:(alacrittyclipboard) windowrulev2 = noanim,class:(alacrittyclipboard) windowrulev2 = noblur,class:(alacrittyclipboard) windowrulev2 = opacity 0,class:(alacrittyclipboard) windowrulev2 = maxsize 1 1,class:(alacrittyclipboard) #bind = SUPER, PERIOD&U, hyprexpo:expo, toggle # can be: toggle, off/disable or on/enable bindr = SUPER_ALT, J&U, exec, notify-send 'test' plugin { hyprexpo { columns = 3 gap_size = 5 bg_col = rgb(111111) workspace_method = center current # [center/first] [workspace] e.g. first 1 or center m+1 enable_gesture = true # laptop touchpad gesture_fingers = 3 # 3 or 4 gesture_distance = 300 # how far is the "max" gesture_positive = true # positive = swipe down. Negative = swipe up. } } ======Config-End======== ```

Description

the xwayland clipboard is broken with certain virtual machine software

How to reproduce

If you copy something from citrix, and then paste, paste it in a wayland session it, it works fine

If you copy something from citrix, paste it in a wayland session, then copy something from the wayland session, and paste it into citrix, citrix overwrites the clipboard with the last thing.

It does not delete the entry from copyq but it moves the xwayland one up by one

It only moves when I unfocus it.

Crash reports, logs, images, videos

No response

Kommynct commented 4 days ago

Okay, so, after a ton of work, i've figured out a workaround that actually works pretty perfectly.

you'll need alacritty and copyq (although i'm sure you could make this work with another clipboard manager, wl-clipboard and xclip will not work), you may need to adjust the sleeps for your processor, yes they are essential to making it work, start with 1 and move down

bindntr=CTRL,C,exec,hyprctl activewindow | rg -q "class: Wfica" && ( sleep 0.01 ; hyprctl closewindow alacrittyclipboard ; alacritty -qq --config-file ~/.config/alacritty/alacrittyclipboard.toml --class 'alacrittyclipboard' --title 'Office 365 Desktop (SSL/TLS Secured, 256 bit)' -e sh -c 'sleep 0.027 ; copyq copy "$(xclip -o)" ; copyq clipboard | xclip -i' )
windowrulev2 = float,class:(alacrittyclipboard)
windowrulev2 = stayfocused,class:(alacrittyclipboard)
windowrulev2 = noborder,class:(alacrittyclipboard)
windowrulev2 = noanim,class:(alacrittyclipboard)
windowrulev2 = noblur,class:(alacrittyclipboard)
windowrulev2 = opacity 0,class:(alacrittyclipboard)
windowrulev2 = maxsize 1 1,class:(alacrittyclipboard)

And in the alacritty config you'll want this: to maximize performance and disable keybinds that would mess things up:

[cursor.style]
blinking = "off"

[debug]
log_level = "off"

[env]
TERM = "alacritty"

[font]
size = 0

[[keyboard.bindings]]
action = "None"
key = "C"
mods = "Control"

[window]
dynamic_padding = false
opacity = 1

You may be thinking, why don't you just do

bindntr=CTRL,C,exec,hyprctl activewindow | rg -q "class: Wfica" && ( sleep 1 && copyq copy "$(xclip -o)" ; copyq clipboard | xclip -i )

Well, citrix runs a windows virtual machine, and that virtual machine only updates the system (wayland) clipboard once citrix is no longer in focus, only the windows clipboard updates until the window is no longer in focus, this is an optimization that backfires for wayland, as a result this technically DOES work, but only if you move focus away from citrix, let it play, and that's vastly more annoying than just creating an alacritty window that does it automatically.

@vaxerski Do you think there's any way to workaround an xwayland client trying to update the clipboard late like this? it might be a security flaw but like, maybe there should be a window rule allowing full clipboard access for certain windows, or an option for xwayland to allow full clipboard access to avoid issues like these?

vaxerski commented 4 days ago

I generally don't think introducing major changes / security issues for the sake of an app that almost nobody has heard of abusing the X protocol is a good idea

Kommynct commented 4 days ago

I generally don't think introducing major changes / security issues for the sake of an app that almost nobody has heard of abusing the X protocol is a good idea

Unfortunately that's not an abuse of the x protocol, that is standard (extremely shitty) x behavior that breaks for xwayland, it only matters for windows virtual machine and rdp, but still I understand not wanting to bother, but this means xwayland will fundamentally never reach feature parity with xorg

I don't think that giving xwayland the ability to write to the clipboard whenever it wants really poses a security risk, however, as long as it can't read from the clipboard whenever it wants.