[GH-ISSUE #2351] [Bug] Transparent window/GUI fails to render on Wayland (Missing Qt wayland platform plugin) #1039

Open
opened 2026-10-13 20:33:17 +00:00 by bsakaguchi · 0 comments
Owner

Originally created by @alexted on GitHub (Mar 15, 2026).
Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/2351

Describe the bug
When launching the application under a Wayland session, the GUI fails to render, appearing only as a completely transparent/empty frame. However, the background logic remains functional (the client successfully connects to the VPN daemon and establishes a connection).
UPD: Strange launch pattern observed - after restarting the background service (sudo pkill AmneziaVPN && sudo systemctl restart AmneziaVPN), the first attempt to open the app via the desktop shortcut results in a "flash" (a transparent window appears for 0.5s and immediately disappears). The second attempt to launch the app via the same shortcut succeeds, and the GUI renders correctly.

To Reproduce
Steps to reproduce the behavior:

  1. Log into a GNOME Wayland session (Manjaro Linux).
  2. Launch the AmneziaVPN desktop application.
  3. Observe the window frame appearing in the task switcher/workspace, but the window itself is transparent/empty.
  4. Check terminal output: see error qt.qpa.plugin: Could not find the Qt platform plugin "wayland".
  5. Run sudo pkill AmneziaVPN && sudo systemctl restart AmneziaVPN.
  6. Click on the AmneziaVPN desktop shortcut.
  7. Observe a transparent frame flickering and vanishing.
  8. Second click: The application opens normally with a visible GUI.

Expected behavior
The application GUI should render correctly using the native Wayland backend or fall back gracefully to XWayland.
The application should launch and render the GUI reliably on the first attempt regardless of previous service restarts.

Log files
Log of running the AmneziaVPN command in the terminal

qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in "/opt/AmneziaVPN/client/plugins//platforms:"
QSystemTrayIcon::setVisible: No Icon set
Updated website URL: "https://amnezia.org"
qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: Connection already associated with an application ID")
Logger::setServiceLogsEnabled(): Logs transitioned to be  disabled
Started AmneziaVPN version 4.8.14.5 477afb9
Manjaro Linux (x86_64)
SSL backend: OpenSSL 3.0.13 30 Jan 2024
VpnConfigurator::getDnsForConfig "8.8.8.8" "8.8.4.4"
"Trying to connect to VPN, server index is 0, container is amnezia-awg, route mode is" Settings::VpnAllExceptSites
"Site split tunneling is enabled, route mode is 2"
"App split tunneling is disabled, route mode is 0"
[2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Initializing
[2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Connecting to: /var/run/amneziavpn/daemon.socket
[2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Daemon connected
[2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Check status
[2026-03-15 09:29:22.758Z] [DEBUG] Amnezia LocalSocketController : Reading
[2026-03-15 09:29:22.758Z] [DEBUG] Amnezia LocalSocketController : Parse command: status
[2026-03-15 09:29:23.023Z] [DEBUG] Amnezia LocalSocketController : Reading
[2026-03-15 09:29:23.023Z] [DEBUG] Amnezia LocalSocketController : Parse command: connected
[2026-03-15 09:29:23.023Z] [DEBUG] Amnezia LocalSocketController : Handshake completed with: MT9l3HDuSx9JQn/O5xVoA7Wf49r9pI73Dt3UicXncUY=
[2026-03-15 09:29:23.024Z] [DEBUG] Amnezia LocalSocketController : Check status
VpnProtocol::setConnectionState "Connected"
Connection state: 'Connected'
VpnConnection::onConnectionStateChanged: Failed to clear saved routes
QIODevice::read (QNetworkReplyHttpImpl): device not open
failed to decrypt the data

Log of running the QT_QPA_PLATFORM=xcb AmneziaVPN command in the terminal

QSystemTrayIcon::setVisible: No Icon set
Updated website URL: "https://amnezia.org"
qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: Connection already associated with an application ID")
Logger::setServiceLogsEnabled(): Logs transitioned to be  disabled
Started AmneziaVPN version 4.8.14.5 477afb9
Manjaro Linux (x86_64)
SSL backend: OpenSSL 3.0.13 30 Jan 2024
VpnConfigurator::getDnsForConfig "8.8.8.8" "8.8.4.4"
"Trying to connect to VPN, server index is 0, container is amnezia-awg, route mode is" Settings::VpnAllExceptSites
"Site split tunneling is enabled, route mode is 2"
"App split tunneling is disabled, route mode is 0"
[2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Initializing
[2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Connecting to: /var/run/amneziavpn/daemon.socket
[2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Daemon connected
[2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Check status
[2026-03-15 09:19:40.016Z] [DEBUG] Amnezia LocalSocketController : Reading
[2026-03-15 09:19:40.016Z] [DEBUG] Amnezia LocalSocketController : Parse command: status
[2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Reading
[2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Parse command: connected
[2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Handshake completed with: MT9l3HDuSx9JQn/O5xVoA7Wf49r9pI73Dt3UicXncUY=
[2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Check status
VpnProtocol::setConnectionState "Connected"
Connection state: 'Connected'
VpnConnection::onConnectionStateChanged: Failed to clear saved routes

Screenshots

Image

Desktop:

  • OS: Manjaro Linux (Kernel: 6.12+)
  • Version: 4.8.14.5 (477afb9)
  • DE/Display Server: GNOME 49.4 / Wayland
  • Graphics: Intel Iris Xe (Hybrid with NVIDIA RTX 3050 Mobile)

Additional context
Hardware details:

Graphics:
  Device-1: Intel Raptor Lake-P [Iris Xe Graphics] vendor: CLEVO/KAPOK
    driver: i915 v: kernel arch: Xe bus-ID: 00:02.0
  Device-2: NVIDIA GA107M [GeForce RTX 3050 Mobile] vendor: CLEVO/KAPOK
    driver: nvidia v: 590.48.01 arch: Ampere bus-ID: 01:00.0
  Device-3: Bison BisonCam NB Pro driver: uvcvideo type: USB bus-ID: 1-8:2
  Display: wayland server: X.org v: 1.21.1.21 with: Xwayland v: 24.1.9
    compositor: gnome-shell v: 49.4 driver: X: loaded: modesetting,nvidia
    dri: iris gpu: i915 resolution: no compositor data resolution: 1920x1080
  API: EGL v: 1.5 drivers: iris,nvidia,swrast platforms:
    active: gbm,wayland,x11,surfaceless,device inactive: device-1
  API: OpenGL v: 4.6.0 compat-v: 4.5 vendor: intel mesa v: 25.3.5-arch1.1
    glx-v: 1.4 direct-render: yes renderer: Mesa Intel Iris Xe Graphics (RPL-P)
  Info: Tools: api: eglinfo,glxinfo gpu: nvidia-settings,nvidia-smi
    x11: xprop

I think the issue might be caused by a missing wayland platform plugin in the distribution's plugins directory (/opt/AmneziaVPN/client/plugins//platforms).

Technical update based on strace comparison:

  1. D-Bus Collision: Both launches show QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: Connection already associated with an application ID"). It seems the first launch fails to handle the portal registration properly under Wayland, leading to an empty frame.
  2. Initialization Sequence: The app exits with code 0 in both cases, meaning it's not a crash but a logical hang in the rendering thread.
  3. Socket communication: The client connects to daemon.socket successfully in both traces, but during the first run, the UI thread appears to stay in a FUTEX_WAIT state longer, likely waiting for a signal from the service that doesn't arrive before the window manager times out the frame rendering.

amnezia_first_run_after_reset.txt
amnezia_second_run_after_reset.txt

Originally created by @alexted on GitHub (Mar 15, 2026). Original GitHub issue: https://github.com/amnezia-vpn/amnezia-client/issues/2351 **Describe the bug** When launching the application under a Wayland session, the GUI fails to render, appearing only as a completely transparent/empty frame. However, the background logic remains functional (the client successfully connects to the VPN daemon and establishes a connection). UPD: Strange launch pattern observed - after restarting the background service (`sudo pkill AmneziaVPN && sudo systemctl restart AmneziaVPN`), the first attempt to open the app via the desktop shortcut results in a "flash" (a transparent window appears for 0.5s and immediately disappears). The second attempt to launch the app via the same shortcut succeeds, and the GUI renders correctly. **To Reproduce** Steps to reproduce the behavior: 1. Log into a GNOME Wayland session (Manjaro Linux). 2. Launch the AmneziaVPN desktop application. 3. Observe the window frame appearing in the task switcher/workspace, but the window itself is transparent/empty. 4. Check terminal output: see error `qt.qpa.plugin: Could not find the Qt platform plugin "wayland"`. 5. Run `sudo pkill AmneziaVPN && sudo systemctl restart AmneziaVPN`. 6. Click on the AmneziaVPN desktop shortcut. 7. Observe a transparent frame flickering and vanishing. 8. Second click: The application opens normally with a visible GUI. **Expected behavior** The application GUI should render correctly using the native Wayland backend or fall back gracefully to XWayland. The application should launch and render the GUI reliably on the first attempt regardless of previous service restarts. **Log files** Log of running the `AmneziaVPN` command in the terminal ``` qt.qpa.plugin: Could not find the Qt platform plugin "wayland" in "/opt/AmneziaVPN/client/plugins//platforms:" QSystemTrayIcon::setVisible: No Icon set Updated website URL: "https://amnezia.org" qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: Connection already associated with an application ID") Logger::setServiceLogsEnabled(): Logs transitioned to be disabled Started AmneziaVPN version 4.8.14.5 477afb9 Manjaro Linux (x86_64) SSL backend: OpenSSL 3.0.13 30 Jan 2024 VpnConfigurator::getDnsForConfig "8.8.8.8" "8.8.4.4" "Trying to connect to VPN, server index is 0, container is amnezia-awg, route mode is" Settings::VpnAllExceptSites "Site split tunneling is enabled, route mode is 2" "App split tunneling is disabled, route mode is 0" [2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Initializing [2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Connecting to: /var/run/amneziavpn/daemon.socket [2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Daemon connected [2026-03-15 09:29:22.757Z] [DEBUG] Amnezia LocalSocketController : Check status [2026-03-15 09:29:22.758Z] [DEBUG] Amnezia LocalSocketController : Reading [2026-03-15 09:29:22.758Z] [DEBUG] Amnezia LocalSocketController : Parse command: status [2026-03-15 09:29:23.023Z] [DEBUG] Amnezia LocalSocketController : Reading [2026-03-15 09:29:23.023Z] [DEBUG] Amnezia LocalSocketController : Parse command: connected [2026-03-15 09:29:23.023Z] [DEBUG] Amnezia LocalSocketController : Handshake completed with: MT9l3HDuSx9JQn/O5xVoA7Wf49r9pI73Dt3UicXncUY= [2026-03-15 09:29:23.024Z] [DEBUG] Amnezia LocalSocketController : Check status VpnProtocol::setConnectionState "Connected" Connection state: 'Connected' VpnConnection::onConnectionStateChanged: Failed to clear saved routes QIODevice::read (QNetworkReplyHttpImpl): device not open failed to decrypt the data ``` Log of running the `QT_QPA_PLATFORM=xcb AmneziaVPN` command in the terminal ``` QSystemTrayIcon::setVisible: No Icon set Updated website URL: "https://amnezia.org" qt.qpa.services: Failed to register with host portal QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: Connection already associated with an application ID") Logger::setServiceLogsEnabled(): Logs transitioned to be disabled Started AmneziaVPN version 4.8.14.5 477afb9 Manjaro Linux (x86_64) SSL backend: OpenSSL 3.0.13 30 Jan 2024 VpnConfigurator::getDnsForConfig "8.8.8.8" "8.8.4.4" "Trying to connect to VPN, server index is 0, container is amnezia-awg, route mode is" Settings::VpnAllExceptSites "Site split tunneling is enabled, route mode is 2" "App split tunneling is disabled, route mode is 0" [2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Initializing [2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Connecting to: /var/run/amneziavpn/daemon.socket [2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Daemon connected [2026-03-15 09:19:40.015Z] [DEBUG] Amnezia LocalSocketController : Check status [2026-03-15 09:19:40.016Z] [DEBUG] Amnezia LocalSocketController : Reading [2026-03-15 09:19:40.016Z] [DEBUG] Amnezia LocalSocketController : Parse command: status [2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Reading [2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Parse command: connected [2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Handshake completed with: MT9l3HDuSx9JQn/O5xVoA7Wf49r9pI73Dt3UicXncUY= [2026-03-15 09:19:40.272Z] [DEBUG] Amnezia LocalSocketController : Check status VpnProtocol::setConnectionState "Connected" Connection state: 'Connected' VpnConnection::onConnectionStateChanged: Failed to clear saved routes ``` **Screenshots** <img width="1920" height="1074" alt="Image" src="https://github.com/user-attachments/assets/f8213ff0-aa4d-44e1-ab90-3d30dd33477b" /> **Desktop:** * OS: Manjaro Linux (Kernel: 6.12+) * Version: 4.8.14.5 (477afb9) * DE/Display Server: GNOME 49.4 / Wayland * Graphics: Intel Iris Xe (Hybrid with NVIDIA RTX 3050 Mobile) **Additional context** Hardware details: ``` Graphics: Device-1: Intel Raptor Lake-P [Iris Xe Graphics] vendor: CLEVO/KAPOK driver: i915 v: kernel arch: Xe bus-ID: 00:02.0 Device-2: NVIDIA GA107M [GeForce RTX 3050 Mobile] vendor: CLEVO/KAPOK driver: nvidia v: 590.48.01 arch: Ampere bus-ID: 01:00.0 Device-3: Bison BisonCam NB Pro driver: uvcvideo type: USB bus-ID: 1-8:2 Display: wayland server: X.org v: 1.21.1.21 with: Xwayland v: 24.1.9 compositor: gnome-shell v: 49.4 driver: X: loaded: modesetting,nvidia dri: iris gpu: i915 resolution: no compositor data resolution: 1920x1080 API: EGL v: 1.5 drivers: iris,nvidia,swrast platforms: active: gbm,wayland,x11,surfaceless,device inactive: device-1 API: OpenGL v: 4.6.0 compat-v: 4.5 vendor: intel mesa v: 25.3.5-arch1.1 glx-v: 1.4 direct-render: yes renderer: Mesa Intel Iris Xe Graphics (RPL-P) Info: Tools: api: eglinfo,glxinfo gpu: nvidia-settings,nvidia-smi x11: xprop ``` I think the issue might be caused by a missing `wayland` platform plugin in the distribution's plugins directory (`/opt/AmneziaVPN/client/plugins//platforms`). Technical update based on `strace` comparison: 1. D-Bus Collision: Both launches show QDBusError("org.freedesktop.portal.Error.Failed", "Could not register app ID: Connection already associated with an application ID"). It seems the first launch fails to handle the portal registration properly under Wayland, leading to an empty frame. 2. Initialization Sequence: The app exits with code 0 in both cases, meaning it's not a crash but a logical hang in the rendering thread. 3. Socket communication: The client connects to daemon.socket successfully in both traces, but during the first run, the UI thread appears to stay in a FUTEX_WAIT state longer, likely waiting for a signal from the service that doesn't arrive before the window manager times out the frame rendering. [amnezia_first_run_after_reset.txt](https://github.com/user-attachments/files/26003415/amnezia_first_run_after_reset.txt) [amnezia_second_run_after_reset.txt](https://github.com/user-attachments/files/26003416/amnezia_second_run_after_reset.txt)
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
amnezia-vpn/amnezia-client#1039
No description provided.