Enabling the Windows Subsystem for Linux to include support for Wayland and X server related scenarios

Overview

Welcome to WSLg

WSLg is short for Windows Subsystem for Linux GUI and the purpose of the project is to enable support for running Linux GUI applications (X11 and Wayland) on Windows in a fully integrated desktop experience.

WSLg provides an integrated experience for developers, scientists or enthusiasts that prefer or need to run Windows on their PC but also need the ability to run tools or applications which works best, or exclusively, in a Linux environment. While users can accomplish this today using a multiple system setup, with individual PC dedicated to Windows and Linux, virtual machine hosting either Windows or Linux, or an XServer running on Windows and projected into WSL, WSLg provides a more integrated, user friendly and productive alternative.

WSLg strives to make Linux GUI applications feel native and natural to use on Windows. From integration into the Start Menu for launch to appearing in the task bar, alt-tab experience to enabling cut/paste across Windows and Linux applications, WSLg enables a seamless desktop experience and workflow leveraging Windows and Linux applications.

WSLg Integrated Desktop

Installing WSLg

Pre-requisites

  • Windows 10 Insider Preview build 21362+

    • WSLg is going to be generally available alongside the upcoming release of Windows. To get access to a preview of WSLg, you'll need to join the Windows Insider Program and be running a Windows 10 Insider Preview build from the dev channel.
  • It recommended to run WSLg on a system with virtual GPU (vGPU) enabled for WSL so you can benefit from hardware accelerated OpenGL rendering. You can find preview driver supporting WSL from each of our partners below.

Install instructions (Fresh Install - no prior WSL installation)

From a command prompt with administrator privileges, run the command wsl --install -d Ubuntu, then reboot when prompted.

After reboot the installation will continue. You'll be asked to enter a username and password. These will be your Linux credential, they can be anything you want and don't have to match your Windows credentials.

Voila! WSL and WSLg are installed and ready to be used!

Install instructions (Existing WSL install)

If you have an existing WSL installation without WSLg and want to update to the latest version of WSL which includes WSLg, run the command wsl --update from an elevated command prompt.

Please note that WSLg is only compatible with WSL 2 and will not work for WSL distribution configured to work in WSL 1 mode. Verify that your Linux distro is configured for running in WSL 2 mode, if not switch to WSL 2. While you can continue to run Linux distro in WSL 1 mode after installing WSLg if you so desired, a distro configured to run in WSL 1 mode will not be able to communicate with WSLg and will not be able to run GUI applications.

You can list your currently installed distro and the version of WSL they are configured for using the following command from an elevated command prompt.

   wsl --list -v

If running in version 1 mode, switch to version 2. This can take a while.

   wsl --set-version _distro_name_ 2

Restart WSL by running this command from an elevated command prompt, make sure to save any pending work first:

    wsl --shutdown

Updating WSL + WSLg

To update to the latest version of WSL and WSLg released for preview, simply run wsl --update from an elevated command prompt or powershell.

You'll need to restart WSL for the changes to take effect. You can restart WSL by running wsl --shutdown from an elevated command prompt. If WSL was currently running, it will shutdown, make sure to first save any in progress work! WSL will be automatically restarted the next time you launch a WSL application or terminal.

First Launch

If you have installed the Ubuntu Linux distro per these instructions, you'll find an Ubuntu icon in your start menu, launch it. This will launch the WSL 2 VM, launch the Ubuntu WSL distro in that VM and give you a terminal to interact with it. Voila! You're running Linux on Windows!

If you would like to explore additional Linux distributions built for WSL, you can use the wsl --list --online command from an elevated command prompt to enumerate the list of available distributions for your system. You can have multiple Linux distributions installed within WSL and they will happily coexist side-by-side, so don't be scare to experiment and try things out.

Congrats you are done and ready to use GUI apps!

Install and run GUI apps

If you want to get started with some GUI apps, you can run the following commands from your Linux terminal to download and install some popular applications. If you are using a different distribution than Ubuntu, it may be using a different package manager.

## Update all packages in your distro
sudo apt update

## Gedit
sudo apt install gedit -y

## GIMP
sudo apt install gimp -y

## Nautilus
sudo apt install nautilus -y

## VLC
sudo apt install vlc -y

## X11 apps
sudo apt install x11-apps -y

## Google Chrome
cd /tmp
sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb 
sudo apt install --fix-broken -y
sudo dpkg -i google-chrome-stable_current_amd64.deb

## Microsoft Teams
cd /tmp
sudo curl -L -o "./teams.deb" "https://teams.microsoft.com/downloads/desktopurl?env=production&plat=linux&arch=x64&download=true&linuxArchiveType=deb"
sudo apt install ./teams.deb -y

## Microsoft Edge Browser
sudo curl https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_91.0.852.0-1_amd64.deb -o /tmp/edge.deb
sudo apt install /tmp/edge.deb -y

Once these applications are installed, you'll find them in your start menu under the distro name. For example Ubuntu -> Microsoft Edge. You can also launch these from your terminal window using the commands:

  • xcalc, xclock, xeyes
  • gimp
  • gedit ~/.bashrc
  • nautilus
  • vlc
  • google-chrome
  • teams
  • microsoft-edge

WSLg Architecture Overview

WSLg Architecture Overview

User Distro

The user distro is essentially the WSL distribution you are using for your Linux work. You can use the command wsl --list --online from an elevated Windows command prompt to list the WSL distributions available on your system. You can run multiple user distros side-by-side and they will peacefully coexist, so don't be afraid of trying out new distro. Each user distro will be paired with a unique instance of the system distro, but you can still interact across GUI applications running in different user distro seamlessly, such as cut/paste between them. The underlying containerization of the various userspace should be invisible to you.

All user and system distros for a particular Windows user run within the same WSL virtual machine against a single instance of the Linux kernel. Different Windows users on a PC have their own VM and instance of WSL. Your Linux environment is guaranteed to always be your own and not shared with other Windows users on the same PC.

WSLg System Distro

The system distro is where all of the magic happens. The system distro is a containerized Linux environment where the WSLg XServer, Wayland server and Pulse Audio server are running. Communication socket for each of these servers are projected into the user distro so client applications can connect to them. We preconfigure the user distro environment variables DISPLAY, WAYLAND_DISPLAY and PULSE_SERVER to refer these servers by default so WSLg lights up out of the box.

Users wanting to use different servers than the one provided by WSLg can change these environment variables. User can also choose to turn off the system distro entirely by adding the following entry in their .wslconfig file (located at c:\users\MyUser\.wslconfig). This will turn off support for GUI applications in WSL.

[wsl2]
guiApplications=false

The system distro is based on the Microsoft CBL-Mariner Linux. This is a minimal Linux environment, just enough to run the various pieces of WSLg. For details on how to build and deploy a private system distro please see our build instructions.

Every WSL 2 user distro is paired with its own instance of the system distro. The system distro runs partially isolated from the user distro to which it is paired, in it's own NS/PID/UTS namespace but shares other namespaces such as IPC, to allow for shared memory optimization across the boundary.

While a user can get a terminal into the system distro, the system distro is not meant to be used directly by users. Every instance of the system distro is loaded read-only from it's backing VHD. Any modifications, made to the in-memory instance of the system distro (such as installing new packages or creating a new file), is effectively discarded when WSL is restarted. The reason we do this is to enable a servicing model for the system distro where we replace the old one with the new one without having to worry about migrating any user data contained within. We use a read-only mapping such that the user gets a well known discard behavior on any changes, every time WSL is restarted, instead of getting a surprise when WSL is serviced.

Although the Microsoft published WSLg system distro as read-only, we do want to encourage folks to tinker with it and experiment. Although we expect very few folks to actually need or want to do that, we've shared detailed instruction on our contributing page on how to both build and deploy a private version of the system distro. Most users who just want to use GUI applications in WSL don't need to worry about those details.

WSLGd

WSLGd is the first process to launch after init. WSLGd launches Weston (with XWayland), PulseAudio and establishes the RDP connection by launching mstsc.exe on the host in silent mode. The RDP connection will remain active and ready to show a new GUI applications being launch on a moment's notice, without any connection establishment delays. WSLGd then monitors these processes and if they exit by error (say as a result of a crash), it automatically restarts them.

Weston

Weston is the Wayland project reference compositor and the heart of WSLg. For WSLg, we've extended the existing RDP backend of libweston to teach it how to remote applications rather than monitor/desktop. We've also added various functionality to it, such as support for multi-monitor, cut/paste, audio in/out, etc...

The application integration is achieved through an RDP technology called RAIL (Remote Application Integrated Locally) and VAIL (Virtualized Application Integrated Locally). The main difference between RAIL and VAIL is how pixels are transported across from the RDP server to the RDP client. In RAIL, it is assumed that the Server and Client are running on different physical systems communicating over the network and thus pixels need to be copied over the RDP transport. In VAIL, it is understood that the Server and Client are on the same physical system and can share memory across the Guest/Host VM boundary. We've added support for both RAIL and VAIL to the libweston RDP backend, although for WSLg only the VAIL support is effectively used. While building WSLg, we first implemented RAIL while the necessary pieces enabling the switch to VAIL were being developed in parallel. We decided to keep that support in as it could reuse in other interesting scenarios outside of WSLg, for example for remoting application from a Pi running Linux. To share memory between the Linux guest and Windows host we use virtio-fs.

RAIL-Shell

Weston is modular and has various shells today, such as the desktop shell, fullscreen shell (aka kiosk), and automative shell. For WSLg we introduced a new shell called the RAIL Shell. The purpose of the RAIL Shell is to help with the remoting of individual windows from Linux to Windows, as such the shell is very simplistic and doesn't involve any actual widgets or shell owned pixels.

FreeRDP

Weston leverages FreeRDP to implement its backend RDP Server. FreeRDP is used to encode all communications going from the RDP Server (in Weston) to the RDP Client (mstsc on Windows) according to the RDP protocol specifications. It is also used to decode all traffic coming from the RDP Client into the RDP server.

Pulse Audio Plugin

For audio in (microphone) and out (speakers/headphone) WSLg runs a PulseAudio server. WSLg uses a sink plugin for audio out, and a source plugin for audio in. These plugins effectively transfer audio samples between the PulseServer and the Weston RDP Server. The audio streams are merged by the Weston RDP Server onto the RDP transport, effectively enabling audio in/out in the Weston RDP backend across all scenarios (Desktop/RAIL/VAIL style remoting), including WSLg.

WSL Dynamic Virtual Channel Plugin (WSLDVCPlugin)

WSLg makes use of a custom RDP virtual channel between the Weston RDP Server and the mstsc RDP Client running on the Windows host. This channel is used by Weston to enumerate all Linux GUI applications (i.e. applications which have a desktop file entry of type gui) along with their launch command line and icon. The open source WSLDVCPlugin processes the list of Linux GUI applications sent over this channel and creates links for them in the Windows start menu.

OpenGL accelerated rendering in WSLg

While WSLg works with or without virtual GPU support, if you intend to run graphics intensive applications such as Blender or Gazebo, it is best to be running on a system with a GPU and driver that can support WSL. An overview of our vGPU architecture and how we make it possible for Linux applications to access the GPU in WSL is available at our DirectX blog.

Support for OpenGL accelerated rendering is made possible through the work our D3D team has done with Collabora and the Mesa community on creating a d3d12 Gallium driver.

Support for Linux, including support for WSLg, has been upstream and part of the Mesa 21.0 release. To take advantage of this acceleration, you'll need to update the version of Mesa installed in your user distro. It also requires that your distro vendor chose to build and publish the new d3d12 Gallium driver to their package repository. We're working with the various WSL distro publishers to inform them of these changes.

Please note that for the first release of WSLg, vGPU interops with the Weston compositor through system memory. If running on a discrete GPU, this effectively means that the rendered data is copied from VRAM to system memory before being presented to the compositor within WSLg, and uploaded onto the GPU again on the Windows side. As a result, there is a performance penalty proportionate to the presentation rate. At very high frame rates such as 600fps on a discrete GPU, that overhead can be as high as 50%. At lower frame rate or on integrated GPU, performance much closer to native can be achieved depending on the workload. Using a vGPU still provides a very significant performance and experience improvement over using a software renderer despite this v1 limitation.

WSLg Code Flow

WSLg builds on the great work of the Linux community and makes use of a large number of open source projects. Most components are used as-is from their upstream version and didn't require any changes to light up in WSLg. Some components at the heart of WSLg, in particular Weston, FreeRDP and PulseAudio, required changes to enable the rich WSLg integration. These changes aren't yet upstream. Microsoft is working with the community to share these contributions back with each project such that overtime WSLg can be built from upstream component directly, without the need for any WSLg specific modifications.

All of these in-flight contributions are kept in Microsoft mirror repos. We keep these mirrors up to date with upstream releases and stage our WSLg changes in those repos. WSLg pulls and builds code from these mirror repos as part of our Insider WSLg Preview releases. These mirrors are public and accessible to everyone. Curious developers can take a peek at early stages of our contribution by looking at code in those mirrors, keeping in mind that the final version of the code will likely look different once the contribution reaches the upstream project and is adapted based on the feedback receives by the various project owners. All of our mirrors follow the same model. There is a main branch which correspond to the upstream branch at our last synchronization point. We update the main branch from time to time to pick update from the upstream project. There is also a working branch that contains all of our in-flight changes. WSLg is built using the working branch from each of the mirror projects.

The projects that WSLg maintains mirrors for will change over time as in-flight contributions evolve. Once some contributions are upstream, it may no longer be necessary to maintain a mirror, at which point it will be removed and WSLg will start to leverage the upstream version of the component directly. As we light up new functionality in WSLg, new mirrors may be introduced to stage contributions to new components. As such, expect the list of mirrors to change overtime.

At this point in time, we have the following project mirrors for currently in-flight contributions.

Project Upstream Repo WSLg Mirror
Weston https://github.com/wayland-project/weston https://github.com/microsoft/Weston-mirror
FreeRDP https://github.com/FreeRDP/FreeRDP https://github.com/microsoft/FreeRDP-mirror
PulseAudio https://github.com/pulseaudio/pulseaudio https://github.com/microsoft/PulseAudio-mirror

The following is a high level overview of the currently in-flight contributions to each project contained within these mirrors.

Weston

WSLg leverages Weston as the Wayland compositor bridging the Linux and Windows worlds using RDP technology to remote application content between them. Weston already had an RDP backend, but it was limited to single-monitor-desktop remoting. We've greatly enhanced that RDP backend to include advanced functionality, such as multi-monitor support, clipboard integration for copy/paste, and audio in/out. We've enabled new remoting modes called RAIL (Remote Application Integrated Locally) and VAIL (Virtualized Application Integrated Locally), where individual applications, rather than desktops/monitors, are remoted. These changes are not specific to WSLg; they add functionality to the existing RDP backend and are reusable in other scenarios as well (i.e. using the new Weston RDP backend to remote application running on a Raspberry Pi to another device running an RDP client).

To enable rich integration in WSLg, we've also added a small plugin to the RDP backend specific to WSLg. In Weston, the plugin is responsible for attaching to the user distro and searching for installed applications (aka the desktop file). The plugin sends the Windows host a list of all applications found along with their launch commands and icons. On the Windows host, an open source mstsc plugin part of the WSLg project uses that information to create shortcuts for these Linux applications to the Windows Start Menu.

We've also fixed several bugs impacting various applications. Generally, these were problems that impacted Weston in all modes and were not specific to WSLg.

FreeRDP

Weston currently uses FreeRDP for its RDP Backend. WSLg continues to leverage FreeRDP and we have added support for a new RDP Protocol/Channel to enable VAIL optimized scenario as well as support for the WSLg plugin. We've also fixed various bugs that were impacting interops with mstsc or causing instability.

PulseAudio

For PulseAudio, our contributions focused on a sink and a source plugin that shuffle audio data between PulseAudio and the Weston RDP backend such that the audio data can be integrated over the RDP connection back to the host. There are no changes to the core of PulseAudio outside of adding these new plugins.

Contributing

If you would like to tinker with or contribute to WSLg, please see our CONTRIBUTING page for details, including how to build and run private a version of WSLg.

Reporting a non-security issues

For non-security related issues, such as reporting a bug or making a suggestion for a new feature, please use this project's issues tracker.

Reporting security issues

To report security issues with WSLg or any other Microsoft products, please follow the instructions detailed here.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

Comments
  • Cannot copy text *into* Kate editor, copying text *from* Kate works fine.

    Cannot copy text *into* Kate editor, copying text *from* Kate works fine.

    Environment

    Windows build number: Microsoft Windows NT 10.0.21257.0
    Your Distribution version: Ubuntu 20.04 LTS
    Your WSLG version: 0.2.9.0
    

    Steps to reproduce

    • Open kate
    • Open notepad (for verification)
    • Copy text in windows.
    • Paste in notepad (for verification)
    • try paste in kate -> no text pasted
    • copy text inside kate
    • Paste in notepad -> this direction works fine.

    WSL logs:

    • Attach WSLg logs from /mnt/wslg

    You can access the wslg logs using explorer at: \\wsl\<Distro-Name>\mnt\wslg (eg: \\wsl\Ubuntu-20.04\mnt\wslg)

    • puseaudio.log
    • weston.log
    • versions.txt

    versions.txt is not copyable (missing permissions): WSLG ( x86_64 ): 0.2.9+Branch.master.Sha.d49cb28cbf4be209347e3b48315081c1b38e4465 wayland: 8cd7c836eaceccc0e4ada7bdac43d86bfe3e0a0a FreeRDP: 297cb96a30ed00e1d7cba1ae9035cfeff82dbfd6 weston: a17db71354ad1c453e10a15805d907c52425499c pulseaudio: 2f0f0b8c3872780f15e275fc12899f4564f01bd5 sharedguestalloc: e2895c6a49105caaa651c05d4b96a46e5a621538

    pulseaudio.log weston.log

    Expected behavior

    copy/past of text works both directions

    Actual behavior

    can only copy text from linux to windows, but not other way round

    bug clipboard-integration 
    opened by mucki-at 143
  • Keyboard layout messed up for KBD_PORTUGUESE_BRAZILIAN_ABNT2.

    Keyboard layout messed up for KBD_PORTUGUESE_BRAZILIAN_ABNT2.

    When I try to type any text on any of the GUI applicatuins, the letter doesnt matches the keyboard layout (it works just fine from the command prompt).

    keyboard-layout fixinbound 
    opened by tb110188 91
  • Windows 10 support request

    Windows 10 support request

    seems like this is a feature request at this stage even tho it already works but hey, lets run a request thread anyway.

    dear dev team,

    please can you allow users who have been assisting with testing and dev of this product the entire time, to use the system in the envrionment that it already was built against and works perfectly, instead of using it as bait to force people into the new drm centric release.

    please give us some evidence that you really have changed, and arent just using the same "embrace, enhance, extinguish" approach that your company always has.

    this is not a feature that the majority of your customers will need, but it is a feature that by exclusion will annoy a large number of technical, engineering and technology decision makers.

    im sure 99% of the staff involved in the actual creation of this project would like to see it available on windows 10 - which was previoulsy stated publicly as the last version of windows, so how about we just try upvoting a feature request, and give the good people in this team some amunition to fight this non technical, entirely political problem.

    enhancement 
    opened by exitdown 57
  • Displays do not go to sleep when WSLg is enabled after unlocking Windows lock screen using modifier key (such as left-ctrl)

    Displays do not go to sleep when WSLg is enabled after unlocking Windows lock screen using modifier key (such as left-ctrl)

    Environment

    Windows build number:  Version 10.0.22000.100
    Your Distribution version:  Gentoo 17.1 Hardened
    Your WSLg version:  1.0.24
    

    Steps to reproduce

    Just have WSLg running

    C:\WINDOWS\system32>powercfg /requests
    DISPLAY:
    [PROCESS] \Device\HarddiskVolume4\Windows\System32\mstsc.exe
    RAIL Power Request
    

    Expected behavior

    Screen should go to sleep after 15 minutes

    Actual behavior

    Display never goes to sleep when WSL is running

    bug fixinbound 
    opened by desultory-zz 53
  • Buffered keyboard inputs are continue to be dispatched to newly started application in X

    Buffered keyboard inputs are continue to be dispatched to newly started application in X

    Environment

    Windows build number: 21382
    Your Distribution version: Ubuntu 20.04, 20.10 and 21.04
    Your WSLg version: 1.0.19
    

    Steps to reproduce

    Open emacs from a terminal, such as Windows Terminal

    Use ctrl-x ctrl-c to close emacs

    Reopen the terminal, and click the text-entry butter and "c" will repeat over and over until you press "ctrl-c"

    This will persist upon reopening, until: You press "ctrl-c again" or
    you restart WSL with wsl --shutdown

    Expected behavior

    I expect "ctrl-x ctrl-c" to gracefully exit the program, without resulting in something being hung, which waits for the next ctrl-c to stop the key entry.

    Actual behavior

    See attached screenshot

    image

    bug duplicate fixinbound 
    opened by EricPell 42
  • Attempting to run GUI apps returns an error

    Attempting to run GUI apps returns an error

    Environment

    Windows build number: Microsoft Windows [Version 10.0.21364.1]
    Your Distribution version: Ubuntu 20.04
    Your WSLg version: 1.0.17.1
    

    Steps to reproduce

    1. Update to Windows build 21364.
    2. Install special NVIDIA 470.14 driver.
    3. Run wsl --update.
    4. Reboot.
    5. Create new Ubuntu 20.04 WSL2 instance.
    6. Install GUI applications (x11-apps, Chrome, etc.).
    7. Attempt to run the applications.

    WSL logs:

    pulseaudio.log weston.log versions.txt

    Expected behavior

    GUI applications should open when run.

    Actual behavior

    Attempting to launch from the CLI returns the error: Error: Can't open display: :0.

    bug fixinbound 
    opened by zacharee 42
  • After most recent WSL update, WSL won't start

    After most recent WSL update, WSL won't start

    Environment

    Windows build number: 10.0.21364.0
    Your Distribution version: Ubuntu 18.04
    Your WSLg version: 1.0.17.1
    WSL Update Version: 5.10.16
    

    Steps to reproduce

    1. Update WSL to support WSLg
    2. Run the distro

    WSL logs:

    wsl.zip

    Expected behavior

    WSL should start

    Actual behavior

    WSL fails to start with:

    The parameter is incorrect.
    
    [process exited with code 4294967295]
    

    The solutions is to disable WSLg as per: https://github.com/microsoft/WSL/issues/6839 by disabling it in .wslconfig file via

    [wsl2]
    guiapplications=false
    
    bug fixinbound 
    opened by hajekj 35
  • Too aggressive downwards scrolling, and resists upwards scrolling

    Too aggressive downwards scrolling, and resists upwards scrolling

    Environment

    Windows build number: 21364.1
    Your Distribution version: Ubuntu 20.10
    Your WSLg version: unknown
    

    Steps to reproduce

    1. apt install firefox -y (or epiphany-browser or nautilus)
    2. firefox (or epiphany-browser or nautilus)
    3. Visit any tall webpage
    4. Scroll downwards the smallest amount possible
    5. Scroll upwards the smallest amount possible

    Expected behavior

    It should scroll down by about 40-50px, and up by about 40-50px.

    Actual behavior

    It scrolls ~2000px downwards per tick. It resists scrolling upwards, and need to repeat it multiple times before it finally scrolls ~10px upwards.

    Hardware:

    Synaptics Precision TouchPad (Lenovo)

    WSL logs:

    https://aka.ms/AAc0u5v (feedbackid b6a23cbb-c7f7-4d6e-a2b1-66d85f95bc0c)

    bug fixinbound 
    opened by da2x 31
  • Cannot run Linux GUI apps in windows: Error: cannot open display: :0

    Cannot run Linux GUI apps in windows: Error: cannot open display: :0

    Windows build number:

    Microsoft Windows [Version 10.0.22621.674]

    Your Distribution version:

    Kali Release: 2022.3

    Your WSL versions:

    WSL version: 0.70.4.0 Kernel version: 5.15.68.1 WSLg version: 1.0.45 MSRDC version: 1.2.3575 Direct3D version: 1.606.4 DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows version: 10.0.22621.674

    Steps to reproduce:

    Attempt to run a GUI app from WSL.

    WSL logs:

    pulseaudio.log stderr.log weston.log

    WSL dumps:

    No response

    Expected behavior:

    I expected GUI apps to open in Windows.

    Actual behavior:

    It didn't open. Received:

    Error: cannot open display: :0

    bug 
    opened by ajkelsey 27
  • Unable to init server: Could not connect: Connection refused (gedit:1859): Gtk-WARNING :  cannot open display:)

    Unable to init server: Could not connect: Connection refused (gedit:1859): Gtk-WARNING : cannot open display:)

    Can anyone help-me with this issue: **Unable to init server: Could not connect: Connection refused (gedit:1859): Gtk-WARNING : 18:14:00.048: cannot open display:

    wsl --update Checking for updates... There are no updates available. Versão do kernel: 5.10.60.1

    wsl -l -v

    NAME                            STATE           VERSION
    * Ubuntu                        Running          2
     docker-desktop            Running          2
     docker-desktop-data    Running          2
    

    in PowerShell 7 I have this result When I try found CBL Mariner PS C:\Users\neuberfran> wsl --system There is no distribution with the given name.

    wslG-ubuntu2004-ISSUE

    I tried this:

    https://stackoverflow.com/questions/60284542/wsl-gedit-unable-to-init-server-could-not-connect-connection-refused

    But not solved

    bug 
    opened by neuberfran 26
  • WSLg keeps display always awake (application keeps caret blinking).

    WSLg keeps display always awake (application keeps caret blinking).

    I am not 100% sure that it's connected, but have checked it a few times and only when app under WSLg was running my displays wouldn't go off.

    Environment

    Windows build number: 21364 Your Distribution version: Ubuntu 20.04 / 21.04 Your WSLg version: 1.0.19

    Steps to reproduce

    Setup display to go off after 1 minute. Run any gui app (PHPStorm in my case). Lock your PC (wait 1 minute).

    Expected behavior

    Display should go off after specified time when WSLg app is running.

    Actual behavior

    Display won't go off.

    If I can provide any logs that might help troubleshoot - happy to do so.

    bug 
    opened by fliespl 26
  • X Error BadShmSeg for Gnome 43 GUI Apps Launched with sudo

    X Error BadShmSeg for Gnome 43 GUI Apps Launched with sudo

    Windows build number:

    22621.963

    Your Distribution version:

    Ubuntu 23.04 (Ubuntu Preview 2304.0.160.0)

    Your WSL versions:

    WSL version: 1.0.3.0 Kernel version: 5.15.79.1 WSLg version: 1.0.47 MSRDC version: 1.2.3575 Direct3D version: 1.606.4 DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows version: 10.0.22621.963

    Steps to reproduce:

    1. Install Ubuntu Preview from store
    2. sudo apt update
    3. sudo apt install ubuntu-desktop-minimal
    4. launch any Gnome 43 GUI apps with sudo. Such as sudo nautilus or sudo gnome-text-editor

    WSL logs:

    stderr.log weston.log wlog.log pulseaudio.log

    WSL dumps:

    No response

    Expected behavior:

    Gnome 43 apps launch successfully with sudo

    Actual behavior:

    Crashes instantly

    (gnome-text-editor:17415): Gdk-WARNING **: 05:49:33.316: The program 'gnome-text-editor' received an X Window System error.
    This probably reflects a bug in the program.
    The error was 'BadShmSeg (invalid shared segment parameter)'.
      (Details: serial 477 error_code 128 request_code 130 (MIT-SHM) minor_code 3)
      (Note to programmers: normally, X errors are reported asynchronously;
       that is, you will receive the error a while after causing it.
       To debug your program, run it with the GDK_SYNCHRONIZE environment
       variable to change this behavior. You can then get a meaningful
       backtrace from your debugger if you break on the gdk_x_error() function.)
    

    All Gnome43 GUI apps crashes with the same BadShmSeg.

    Other information:

    1. Ubuntu 22.04 with Gnome42 works fine on my setup.
    2. Gentoo on WSL works well before upgrading to Gnome43. Same crash after upgrading to Gnome43.
    3. Possibly related: https://unix.stackexchange.com/questions/726223/x-error-badshmseg-invalid-shared-segment-parameter-in-wsl-gui-applications
    bug 
    opened by ZhennanWu 1
  • Configure where the Weston plugin looks for GUI apps (*.desktop files)

    Configure where the Weston plugin looks for GUI apps (*.desktop files)

    Is your feature request related to a problem:

    A number of tools have their own package ecosystem and may install *.desktop files in alternative locations =, eg conda, R, Guix, ... The Weston plugin only looks in /usr/share/applications and does not pick up apps from these locations. To have WSLg recognise these apps the deskop files must be copied to and kept up to date in /usr/share/applications.

    Describe the solution you'd like:

    A way (eg config file) to specify the list of directories searched for *.desktop files.

    Describe alternatives you've considered:

    • manually syncing all directories to /usr/share/applications
    • a cron job in wsl to sync the directories
    • something OverlayFS/UnionFS/MergeFS to make /usr/share/applications look like a combination of all the desired directories

    Additional context:

    No response

    enhancement 
    opened by mhlr 0
  • Win-KeX does not function with systemd enabled

    Win-KeX does not function with systemd enabled

    Windows build number:

    Microsoft Windows [Version 10.0.22621.963]

    Your Distribution version:

    Kali 2022.4

    Your WSL versions:

    WSL version: 1.0.3.0 Kernel version: 5.15.79.1 WSLg version: 1.0.47 MSRDC version: 1.2.3575 Direct3D version: 1.606.4 DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows version: 10.0.22621.963

    Steps to reproduce:

    1. Enable systemd
    2. At linux CLI, run kex

    WSL logs:

    stderr.log weston.log pulseaudio.log

    WSL dumps:

    No dumps.

    Expected behavior:

    I expected a window to open with the Kali GUI inside.

    Actual behavior:

    Operation failed with the following error displayed:

    Error connecting to the KeX server.
    Please try "kex start" to start the service.
    If the server fails to start, please try "kex kill" or restart your WSL2 session and try again.
    
    bug 
    opened by ajkelsey 0
  • Mouse cursor offset is misaligned in Wayland applications

    Mouse cursor offset is misaligned in Wayland applications

    Windows build number:

    Microsoft Windows [Version 10.0.19043.2364]

    Your Distribution version:

    Ubuntu 22.10

    Your WSL versions:

    WSL version: 1.0.3.0 Kernel version: 5.15.79.1 WSLg version: 1.0.47 MSRDC version: 1.2.3575 Direct3D version: 1.606.4 DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows version: 10.0.19043.2364

    Steps to reproduce:

    Hello, I've recently started using WSLg on Windows 10 and have noticed a peculiar problem with all Wayland-enabled applications (epiphany, for instance). I don't know what the proper technical terms are, but, essentially, the visual position of the mouse cursor does not match the actual click point. The click is registered approximately 2-3 millimetres to the left of the cursor. X11 applications do not exhibit this problem, but are very blurry.

    WSL logs:

    No response

    WSL dumps:

    No response

    Expected behavior:

    I expect the cursor and click positions to match. For instance, in this example:

    photo_5850360307946470034_y

    The caret should be placed in front of "v" rather than "a".

    Actual behavior:

    The cursor offset is off.

    bug 
    opened by v-chernyshev 3
  • couldn't access control socket: /mnt/wslg/runtime-dir/keyring/control:

    couldn't access control socket: /mnt/wslg/runtime-dir/keyring/control:

    Windows build number:

    Microsoft Windows [Version 10.0.22000.1335]

    Your Distribution version:

    20.04

    Your WSL versions:

    WSL version: 1.0.3.0 Kernel version: 5.15.79.1 WSLg version: 1.0.47 MSRDC version: 1.2.3575 Direct3D version: 1.606.4 DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows version: 10.0.22000.1335

    Steps to reproduce:

    This worked on Windows 10, but fails with Windows 11. I've tried running from the command line to get the error message. My intent (what I did with Windows 10, is either a vnc server or x server.

    Before first invocation, there is no keyring directory.

    1. Install MATE or gnome
    2. mate-sesion yields (mate-session-check-accelerated:829): Gdk-CRITICAL **: 15:49:30.066: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed

    (mate-session-check-accelerated:841): Gdk-CRITICAL **: 15:49:30.374: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed ** Message: 15:49:30.479: couldn't access control socket: /mnt/wslg/runtime-dir/keyring/control: No such file or directory SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh Segmentation fault

    gnome-session yields

    (gnome-session-check-accelerated:31): Gdk-CRITICAL **: 16:01:47.097: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed

    (gnome-session-check-accelerated:63): Gdk-CRITICAL **: 16:01:47.677: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed gnome-session-binary[22]: WARNING: Using null backend for session tracking ** Message: 16:01:47.835: couldn't access control socket: /mnt/wslg/runtime-dir/keyring/control: No such file or directory ** Message: 16:01:47.835: couldn't access control socket: /mnt/wslg/runtime-dir/keyring/control: No such file or directory ** Message: 16:01:47.835: couldn't access control socket: /mnt/wslg/runtime-dir/keyring/control: No such file or directory SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh Window manager warning: Unsupported session type gnome-session-binary[22]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1 Window manager warning: Unsupported session type gnome-session-binary[22]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1 gnome-session-binary[22]: WARNING: App 'org.gnome.Shell.desktop' respawning too quickly gnome-session-binary[22]: CRITICAL: We failed, but the fail whale is dead. Sorry....

    1. The first one seems to create the keyring/control directory, but it still fails. mate:

    (mate-session-check-accelerated:68): Gdk-CRITICAL **: 16:08:14.840: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed

    (mate-session-check-accelerated:80): Gdk-CRITICAL **: 16:08:15.435: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed ** Message: 16:08:15.530: couldn't access control socket: /mnt/wslg/runtime-dir/keyring/control: No such file or directory SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh Segmentation fault

    gnome:

    Gdk-CRITICAL **: 16:09:26.777: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed

    (gnome-session-check-accelerated:251): Gdk-CRITICAL **: 16:09:27.091: gdk_wayland_window_set_dbus_properties_libgtk_only: assertion 'GDK_IS_WAYLAND_WINDOW (window)' failed gnome-session-binary[214]: WARNING: Using null backend for session tracking SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh SSH_AUTH_SOCK=/mnt/wslg/runtime-dir/keyring/ssh Window manager warning: Unsupported session type gnome-session-binary[214]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1 Window manager warning: Unsupported session type gnome-session-binary[214]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1 gnome-session-binary[214]: WARNING: App 'org.gnome.Shell.desktop' respawning too quickly gnome-session-binary[214]: CRITICAL: We failed, but the fail whale is dead. Sorry....

    WSL logs:

    No response

    WSL dumps:

    no dumps

    Expected behavior:

    In Windows 10, I could get a full Linux desktop, either using the VcXsrv X server for Windows or by running tigervnc and using a Windows VNC client.

    Actual behavior:

    VNC gives just a black window, because neither window manager starts.

    bug 
    opened by kgoldman 0
  • No popups

    No popups

    Windows build number:

    25267.1000

    Your Distribution version:

    23.04

    Your WSL versions:

    WSL 版本: 1.0.3.0 内核版本: 5.15.79.1 WSLg 版本: 1.0.47 MSRDC 版本: 1.2.3575 Direct3D 版本: 1.606.4 DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows版本: 10.0.25267.1000

    Steps to reproduce:

    I tried to use x11 apps.but there are no pop-ups.It seemed just run in silence.

    WSL logs:

    weston.log pulseaudio.log stderr.log

    WSL dumps:

    No response

    Expected behavior:

    No response

    Actual behavior:

    I tried to open an x11 app,but its GUI window disappeared.image

    bug 
    opened by yltx 0
Releases(v1.0.48)
Owner
Microsoft
Open source projects and samples from Microsoft
Microsoft
Simple useful interoperability tests for WebRTC libraries. If you are a WebRTC library developer we'd love to include you!

Overview This project aims to be a convenient location for WebRTC library developers to perform interoperability tests. Who can Participate The projec

Aaron Clauson 106 Dec 18, 2022
A cross-platform SDK enabling developers to integrate real-time chat technology into their projects

4Players ODIN SDK ODIN is a cross-platform software development kit (SDK) that enables developers to integrate real-time chat technology into multipla

4Players 6 Dec 2, 2022
wl-mirror - a simple Wayland output mirror client

wl-mirror - a simple Wayland output mirror client wl-mirror attempts to provide a solution to sway's lack of output mirroring by mirroring an output o

Ferdinand Bachmann 118 Dec 29, 2022
designed for debug Espressif's ESP series chips, include ESP32/ESP32-S2/ESP32-C3/ESP32-S3...

ESPLink 中文 ESPLink Introduce Features Pin Description esplink-tool Product Link Reference ESPLink Introduce ESPLink is a debug tool build for Expressi

wuxx 34 Nov 19, 2022
Windows named pipe server that forwards connections to given TCP server

PipeTcp An asynchronous Windows named pipe server that forwards connections to given TCP server. Pre-built binaries can be found in Releases. Invocati

Jinoh Kang 5 Nov 3, 2022
Free Media Player for Windows and Linux with Youtube support.

SMPLAYER SMPlayer is a free media player for Windows and Linux with Youtube support.

Ricardo 324 Dec 27, 2022
C++ FTP Server Library for Windows, Linux & more

fineFTP Server FineFTP is a minimal FTP server library for Windows and Unix flavors. The project is CMake based and only depends on asio, which is int

Continental 1 Nov 22, 2022
Cross-platform, single .h file HTTP server (Windows, Linux, Mac OS X)

EWS - Single .h File C Embeddable Web Server Latest Version: 1.1.4 released September 9, 2021 Supported platforms: Linux, Mac OS X, Windows License: B

Forrest Heller 84 Dec 19, 2022
Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution

CppServer Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and

Ivan Shynkarenka 958 Jan 3, 2023
Gromox - Groupware server backend with MAPI/HTTP, RPC/HTTP, IMAP, POP3 and PHP-MAPI support for grommunio

Gromox is the central groupware server component of grommunio. It is capable of serving as a replacement for Microsoft Exchange and compatibles. Conne

grommunio 139 Dec 26, 2022
9front http server with basic CGI support

tcp80x tcp80x is an HTTP server with some pseudo-CGI support. This is a merger of execfs and tcp80, both written by cinap_lenrek. Installation: Instal

phil9 4 Nov 27, 2021
LAppS - Lua Application Server for micro-services with default communication over WebSockets. The fastest and most vertically scalable WebSockets server implementation ever. Low latency C++ <-> Lua stack roundtrip.

LAppS - Lua Application Server This is an attempt to provide very easy to use Lua Application Server working over WebSockets protocol (RFC 6455). LApp

null 48 Oct 13, 2022
A project designed for the esp8266 D1 Mini or the esp8266 D1 Mini PRO to provide a wifi http server and dns server.

PS4 Server 9.00 This is a project designed for the esp8266 D1 Mini or the esp8266 D1 Mini PRO to provide a wifi http server and dns server. this is fo

null 14 Nov 28, 2022
Realtime Client/Server app for Linux allowing joystick (and other HID) data to be transferred over a local network

netstick What is it? Netstick enables HID devices to be remotely connected between a "client" and "server" over a network connection. It allows the ke

null 33 Nov 6, 2022
Event-driven network library for multi-threaded Linux server in C++11

Muduo is a multithreaded C++ network library based on the reactor pattern. http://github.com/chenshuo/muduo Copyright (c) 2010, Shuo Chen. All righ

Shuo Chen 12.4k Jan 1, 2023
web server that will print hello world on the screen only for linux users

a simple http server side lib only for linux users Note: This lib is currently under development you can check the source code and even use it but dn'

notaweeb 11 Mar 14, 2021
Dolphin is an emulator for running GameCube and Wii games on Windows, Linux, macOS, and recent Android devices.

Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.

Dolphin Emulator 9.4k Dec 31, 2022
Header-only C++14 library for getting network addresses associated with network interface without name lookups on Windows, macOS, Linux, and FreeBSD

NetIF Get addresses associated with network interfaces on a system without using name lookups. Header-only, requires C++14. Usage Add the header file

GMLC-TDC 9 Oct 17, 2022
Graphical small-internet client for windows, linux, MacOS X and BSDs. Supports gemini, http, https, gopher, finger.

Graphical small-internet client for windows, linux, MacOS X and BSDs. Supports gemini, http, https, gopher, finger.

Felix Queißner 569 Dec 30, 2022