Skip to content

Window issue on some programs with new xwayland-satellite integration #1839

Description

@Flo354

Please report issues with X11 apps to xwayland-satellite instead of niri: https://github.com/Supreeeme/xwayland-satellite/issues

=> I don't think it is an issue with xwayland-satellite, but I am sorry if it is.

I am using niri git version that I compiled myself with the new xwayland-satellite support built-in.
Image

Everything seems to be running smooth, but with the two apps below, there is a layout issue:

  • Virtualbox
  • Burp Pro

On Virtualbox, with a windows guest, the bottom bar is not accessible, and on some programs, some popup cannot be clicked.
Image

On burp, same behavior, the taskbar at the bottom cannot be clicked. One way to fix it on this one is to put it in floating mode, resize it a little bit, and then the button can be clicked without any issues.

In order to temporary fix the issue, I start the command xwayland-satellite :0, and then I start virtualbox and burp with the env DISPLAY=:0.

By the way, I can't start the burp installer with sudo also. Starting the command without sudo works.

> sudo ./burpsuite_pro_linux_v2025_5_4.sh
Unpacking JRE ...
Starting Installer ...
Authorization required, but no authorization protocol specified

An error occurred:
java.lang.NoClassDefFoundError: Could not initialize class java.awt.GraphicsEnvironment$LocalGE
Error log: /tmp/install4jError11411286535614677587.log
java.lang.NoClassDefFoundError: Could not initialize class java.awt.GraphicsEnvironment$LocalGE
	at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:104)
	at java.desktop/sun.awt.X11.XToolkit.<clinit>(XToolkit.java:225)
	at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(PlatformGraphicsInfo.java:41)
	at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:595)
	at java.desktop/java.awt.Toolkit.getEventQueue(Toolkit.java:1489)
	at java.desktop/java.awt.EventQueue.isDispatchThread(EventQueue.java:1089)
	at com.install4j.runtime.installer.frontend.GUIHelper.invokeOnEDT(GUIHelper.java:436)
	at com.install4j.runtime.installer.frontend.headless.AbstractHeadlessScreenExecutor.init(AbstractHeadlessScreenExecutor.java:83)
	at com.install4j.runtime.installer.frontend.headless.ConsoleScreenExecutor.<init>(ConsoleScreenExecutor.java:25)
	at com.install4j.runtime.installer.frontend.headless.InstallerConsoleScreenExecutor.<init>(InstallerConsoleScreenExecutor.java:6)
	at com.install4j.runtime.installer.Installer.getScreenExecutor(Installer.java:97)
	at com.install4j.runtime.installer.Installer.runInProcess(Installer.java:73)
	at com.install4j.runtime.installer.Installer.main(Installer.java:50)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84)
	at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:71)
	at install4j.Installer2990604421.main(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError: Exception java.awt.AWTError: Can't connect to X11 window server using ':1' as the value of the DISPLAY variable. [in thread "main"]
	at java.desktop/sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
	at java.desktop/sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:105)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
	at java.desktop/sun.awt.X11GraphicsEnvironment.initStatic(X11GraphicsEnvironment.java:64)
	at java.desktop/sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:59)
	at java.desktop/sun.awt.PlatformGraphicsInfo.createGE(PlatformGraphicsInfo.java:37)
	at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:91)
	at java.desktop/java.awt.GraphicsEnvironment$LocalGE.<clinit>(GraphicsEnvironment.java:82)
	at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:104)
	at java.desktop/java.awt.Window.initGC(Window.java:492)
	at java.desktop/java.awt.Window.init(Window.java:512)
	at java.desktop/java.awt.Window.<init>(Window.java:554)
	at java.desktop/java.awt.Frame.<init>(Frame.java:428)
	at java.desktop/java.awt.Frame.<init>(Frame.java:393)
	at com.install4j.runtime.installer.helper.InstallerUtil.initHeadless(InstallerUtil.java:599)
	at com.install4j.runtime.installer.helper.InstallerUtil.isHeadless(InstallerUtil.java:589)
	at com.install4j.runtime.installer.helper.InstallerUtil.getExecutionMode(InstallerUtil.java:554)
	at com.install4j.runtime.installer.Installer.getScreenExecutor(Installer.java:86)
	... 7 more
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
	at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(PlatformGraphicsInfo.java:41)
	at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:595)
	at java.desktop/java.awt.Toolkit.getEventQueue(Toolkit.java:1489)
	at java.desktop/java.awt.EventQueue.isDispatchThread(EventQueue.java:1089)
	at com.install4j.runtime.installer.ContextImpl.immediateExit(ContextImpl.java:1299)
	at com.install4j.api.Util$4.run(Util.java:448)
	at com.install4j.runtime.installer.helper.comm.actions.RunAction.execute(RunAction.java:11)
	at com.install4j.runtime.installer.helper.comm.HelperCommunication.executeActionDirect(HelperCommunication.java:292)
	at com.install4j.runtime.installer.helper.comm.HelperCommunication.executeActionInt(HelperCommunication.java:267)
	at com.install4j.runtime.installer.helper.comm.HelperCommunication.executeAction(HelperCommunication.java:244)
	at com.install4j.api.Util.fatalError(Util.java:441)
	at com.install4j.runtime.installer.Installer.main(Installer.java:52)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84)
	at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:71)
	at install4j.Installer2990604421.main(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoClassDefFoundError: Could not initialize class java.awt.GraphicsEnvironment$LocalGE [in thread "main"]
	at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:104)
	at java.desktop/sun.awt.X11.XToolkit.<clinit>(XToolkit.java:225)
	at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(PlatformGraphicsInfo.java:41)
	at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:595)
	at java.desktop/java.awt.Toolkit.getEventQueue(Toolkit.java:1489)
	at java.desktop/java.awt.EventQueue.isDispatchThread(EventQueue.java:1089)
	at com.install4j.runtime.installer.frontend.GUIHelper.invokeOnEDT(GUIHelper.java:436)
	at com.install4j.runtime.installer.frontend.headless.AbstractHeadlessScreenExecutor.init(AbstractHeadlessScreenExecutor.java:83)
	at com.install4j.runtime.installer.frontend.headless.ConsoleScreenExecutor.<init>(ConsoleScreenExecutor.java:25)
	at com.install4j.runtime.installer.frontend.headless.InstallerConsoleScreenExecutor.<init>(InstallerConsoleScreenExecutor.java:6)
	at com.install4j.runtime.installer.Installer.getScreenExecutor(Installer.java:97)
	at com.install4j.runtime.installer.Installer.runInProcess(Installer.java:73)
	at com.install4j.runtime.installer.Installer.main(Installer.java:50)
	... 5 more

System Information

  • niri version: niri 25.05.1 (v25.05.1-30-gda3dc913)
  • Distro: Ubuntu 24.04
  • GPU: Nvidia RTX 3060 Ti
  • CPU: 12th Gen Intel(R) Core(TM) i9-12900K

Niri configuration

// This config is in the KDL format: https://kdl.dev
// "/-" comments out the following node.
// Check the wiki for a full description of the configuration:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Introduction

// NVIDIA FIX???
debug {
    wait-for-frame-completion-before-queueing
}

// Input device configuration.
// Find the full list of options on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
input {
    keyboard {
        track-layout "global"

        xkb {
            layout "fr"
            variant "latin9"
        }

        numlock
    }

    mouse {
        // off
        // natural-scroll
        // accel-speed 0.2
        // accel-profile "flat"
        // scroll-method "no-scroll"
    }
}

output "HDMI-A-5" {
    mode "7680x2160@119.997"
    //mode "7680x2160@59.987"
    scale 1
    transform "normal"
    position x=0 y=0
}

// Settings that influence how windows are positioned and sized.
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout {
    gaps 16
    center-focused-column "never"

    preset-column-widths {
        proportion 0.33333
        proportion 0.5
        proportion 0.66667
    }

    default-column-width { proportion 0.3; }

    focus-ring {
        width 4
        active-color "#7fc8ff"
        inactive-color "#505050"
    }

    border {
        off
    }
}

// Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart,
// which may be more convenient to use.
// See the binds section below for more spawn examples.

// Spawn some applications at startup
//spawn-at-startup "binary" "arg1" "arg2"
spawn-at-startup "google-chrome-beta" "--profile-directory=Default"   "--app-id=hnpfjngllnobngcgfapefoaidbinmjnm" // WhatsApp
spawn-at-startup "google-chrome-beta" "--profile-directory=Default"   "--app-id=bbdeiblfgdokhlblpgeaokenkfknecgl" // Messenger
spawn-at-startup "google-chrome"      "--profile-directory=Profile 3" "--app-id=cifhbcnohmdccbgoicgdjpfamggdegmo" // Teams
spawn-at-startup "google-chrome-beta"                                                                             // Discord, X...
spawn-at-startup "keepassxc"
spawn-at-startup "google-chrome" "--profile-directory=Default"
spawn-at-startup "google-chrome" "--profile-directory=Profile 2"
spawn-at-startup "google-chrome" "--profile-directory=Profile 3"


// Screenshot path
// The path is formatted with strftime(3) to give you the screenshot date and time.
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"

// You can also set this to null to disable saving screenshots to disk.
// screenshot-path null

// Animation settings.
// The wiki explains how to configure individual animations:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
animations {
    // Uncomment to turn off all animations.
    // off

    // Slow down all animations by this factor. Values below 1 speed them up instead.
    // slowdown 3.0
}

// Window rules let you adjust behavior for individual windows.
// Find more information on the wiki:
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules

// Block password managers from screen capture
window-rule {
    match app-id=r#"^org\.keepassxc\.KeePassXC$"#
    match app-id=r#"^org\.gnome\.World\.Secrets$"#
    match app-id=r#"^org\.kde\.kleopatra$"#

    block-out-from "screen-capture"

    // Use this instead if you want them visible on third-party screenshot tools.
    // block-out-from "screencast"
}

window-rule {
    match app-id="chrome-hnpfjngllnobngcgfapefoaidbinmjnm-Default" // WhatsApp
    match app-id="chrome-bbdeiblfgdokhlblpgeaokenkfknecgl-Default" // Messenger
    match app-id="google-chrome-beta"

    open-on-workspace "chat"
    default-column-width {
        proportion 0.2;
    }
}

window-rule {
    match app-id="chrome-cifhbcnohmdccbgoicgdjpfamggdegmo-Profile_3" // Teams

    open-on-workspace "chat"
    default-column-width {
        proportion 0.4;
    }
}


window-rule {
    match app-id=r#"^google-chrome$"#

    open-on-workspace "browser"
}

window-rule {
    match app-id=r#"^org\.keepassxc\.KeePassXC$"#

    open-on-workspace "browser"
    default-column-width {
        proportion 0.2;
    }
}

window-rule {
    match app-id="chromium"
    match app-id="Postman"
    match app-id="install4j-burp-StartBurp"
    match app-id=r#"^org\.wireshark\.Wireshark$"#

    open-on-workspace "pentest"
}

window-rule {
    match app-id=r#"^jetbrains-*"#
    match app-id="Mysql-workbench-bin"

    open-on-workspace "development"
}

window-rule {
    match app-id="VirtualBox Manager"
    match app-id="VirtualBox Machine"
    match app-id="Vmplayer"
    match app-id="Vmware"

    open-on-workspace "virtualization"
}

window-rule {
    match app-id=r#"^org\.gnome\.Nautilus$"#
    match app-id="pavucontrol"
    match app-id="nm-connection-editor"

    open-floating true
}

// Key bindings
binds {
    // Show help
    Mod+Shift+Colon { show-hotkey-overlay; }

    Mod+E hotkey-overlay-title="Open file explorer: Nautilus" { spawn "nautilus" "--new-window"; }
    Mod+T hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; }
    Mod+Alt+L hotkey-overlay-title="Lock the Screen: hyprlock" { spawn "/home/florian/.local/bin/hyprlock-custom.sh"; }
    Mod+D hotkey-overlay-title="Run an Application: wofi" { spawn "wofi" "--insensitive" "--show" "drun"; }
    Mod+N hotkey-overlay-title="Run notification center: swaync" { spawn "swaync-client" "-t"; }

    // Manage volume
    XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
    XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
    XF86AudioMute        allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
    XF86AudioMicMute     allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }

    // Open the expanded view with all workspaces
    Mod+O repeat=false { toggle-overview; }

    Mod+Q { close-window; }

    // Put the focus to another window
    Mod+WheelScrollRight { focus-column-right;   }
    Mod+WheelScrollLeft  { focus-column-left;    }
    Mod+Left             { focus-column-left;    }
    Mod+Down             { focus-window-down;    }
    Mod+Up               { focus-window-up;      }
    Mod+Right            { focus-column-right;   }
    Mod+Home             { focus-column-first;   }
    Mod+End              { focus-column-last;    }
    Mod+Ctrl+Home        { move-column-to-first; }
    Mod+Ctrl+End         { move-column-to-last;  }

    // Put the focus to another monitor
    Mod+Shift+Left  { focus-monitor-left;  }
    Mod+Shift+Down  { focus-monitor-down;  }
    Mod+Shift+Up    { focus-monitor-up;    }
    Mod+Shift+Right { focus-monitor-right; }

    // Put the focus to another workspace
    Mod+Page_Down                       { focus-workspace-down; }
    Mod+Page_Up                         { focus-workspace-up;   }
    Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
    Mod+WheelScrollUp   cooldown-ms=150 { focus-workspace-up;   }
    Mod+ampersand                       { focus-workspace 1;    }
    Mod+eacute                          { focus-workspace 2;    }
    Mod+quotedbl                        { focus-workspace 3;    }
    Mod+apostrophe                      { focus-workspace 4;    }
    Mod+parenleft                       { focus-workspace 5;    }
    Mod+minus                           { focus-workspace 6;    }
    Mod+egrave                          { focus-workspace 7;    }
    Mod+underscore                      { focus-workspace 8;    }
    Mod+ccedilla                        { focus-workspace 9;    }

    // Move a window in the workspace
    Mod+Ctrl+WheelScrollRight { move-column-right; }
    Mod+Ctrl+WheelScrollLeft  { move-column-left;  }
    Mod+Ctrl+Left             { move-column-left;  }
    Mod+Ctrl+Down             { move-window-down;  }
    Mod+Ctrl+Up               { move-window-up;    }
    Mod+Ctrl+Right            { move-column-right; }

    // Move a window to another workspace
    Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
    Mod+Ctrl+WheelScrollUp   cooldown-ms=150 { move-column-to-workspace-up;   }
    Mod+Ctrl+Page_Down                       { move-column-to-workspace-down; }
    Mod+Ctrl+Page_Up                         { move-column-to-workspace-up;   }
    Mod+Ctrl+ampersand                       { move-column-to-workspace 1;    }
    Mod+Ctrl+eacute                          { move-column-to-workspace 2;    }
    Mod+Ctrl+quotedbl                        { move-column-to-workspace 3;    }
    Mod+Ctrl+apostrophe                      { move-column-to-workspace 4;    }
    Mod+Ctrl+parenleft                       { move-column-to-workspace 5;    }
    Mod+Ctrl+minus                           { move-column-to-workspace 6;    }
    Mod+Ctrl+egrave                          { move-column-to-workspace 7;    }
    Mod+Ctrl+underscore                      { move-column-to-workspace 8;    }
    Mod+Ctrl+ccedilla                        { move-column-to-workspace 9;    }

    // Move a window to another monitor
    Mod+Shift+Ctrl+Left  { move-column-to-monitor-left;  }
    Mod+Shift+Ctrl+Down  { move-column-to-monitor-down;  }
    Mod+Shift+Ctrl+Up    { move-column-to-monitor-up;    }
    Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }

    // Move a whole workspace to another monitor:
    Mod+Shift+Ctrl+Alt+Left  { move-workspace-to-monitor-left;  }
    Mod+Shift+Ctrl+Alt+Right { move-workspace-to-monitor-right; }
    Mod+Shift+Ctrl+Alt+Up    { move-workspace-to-monitor-up;    }
    Mod+Shift+Ctrl+Alt+Down  { move-workspace-to-monitor-down;  }

    // Move a whole workspace
    Mod+Shift+Page_Down { move-workspace-down; }
    Mod+Shift+Page_Up   { move-workspace-up; }

    // Move the focused window in and out of a column.
    Mod+ISO_Level3_Shift+bracketleft  { consume-or-expel-window-left;  } // doesn't work
    Mod+ISO_Level3_Shift+bracketright { consume-or-expel-window-right; } // doesn't work
    Mod+Comma     { consume-window-into-column; }
    Mod+semicolon { expel-window-from-column;   }

    // Adjust size of window
    Mod+ParenRight       { set-column-width  "-10%";         }
    Mod+Equal            { set-column-width  "+10%";         }
    Mod+Shift+ParenRight { set-window-height "-10%";         }
    Mod+Shift+Equal      { set-window-height "+10%";         }
    Mod+F                { maximize-column;                  }
    Mod+Ctrl+F           { expand-column-to-available-width; }
    Mod+Shift+F          { fullscreen-window;                }

    Mod+C { center-column; }
    Mod+Ctrl+C { center-visible-columns; }

    // Move the focused window between the floating and the tiling layout.
    Mod+V       { toggle-window-floating; }
    Mod+Shift+V { switch-focus-between-floating-and-tiling; }

    // Screenshots
    Print         { screenshot;        }
    Shift+Super+S { screenshot;        }
    Ctrl+Print    { screenshot-screen; }
    Alt+Print     { screenshot-window; }

    // Applications such as remote-desktop clients and software KVM switches may
    // request that niri stops processing the keyboard shortcuts defined here
    // so they may, for example, forward the key presses as-is to a remote machine.
    // It's a good idea to bind an escape hatch to toggle the inhibitor,
    // so a buggy application can't hold your session hostage.
    //
    // The allow-inhibiting=false property can be applied to other binds as well,
    // which ensures niri always processes them, even when an inhibitor is active.
    Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }

    // The quit action will show a confirmation dialog to avoid accidental exits.
    Mod+Shift+E     { quit; }
    Ctrl+Alt+Delete { quit; }

    // Powers off the monitors.
    Mod+Shift+P { power-off-monitors; }
}

// Environment variables
environment {
    ELECTRON_OZONE_PLATFORM_HINT "auto"
    _JAVA_AWT_WM_NONREPARENTING "1"
}

// Named Workspaces
workspace "chat"
workspace "browser"
workspace "pentest"
workspace "development"
workspace "virtualization"

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions