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

Weird clipboard behavior with citrix workspace #7752

Open
1 task done
Kommynct opened this issue Sep 11, 2024 · 3 comments
Open
1 task done

Weird clipboard behavior with citrix workspace #7752

Kommynct opened this issue Sep 11, 2024 · 3 comments
Labels
bug Something isn't working

Comments

@Kommynct
Copy link

Already reported ? *

  • I have searched the existing open and closed issues.

Regression?

No

System Info and Version

System/Version info
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 Kommynct added the bug Something isn't working label Sep 11, 2024
@Kommynct Kommynct changed the title Weird clipboard behavior with citrix Weird clipboard behavior with citrix workspace Sep 12, 2024
@Kommynct
Copy link
Author

Kommynct commented Oct 16, 2024

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
Copy link
Member

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
Copy link
Author

Kommynct commented Oct 16, 2024

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.

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

2 participants