QGIS in WSL: Project Paths, Providers, and Linux Geospatial Processing
Use QGIS in WSL with deliberate project paths, provider checks, coordinate systems, and reproducible processing outputs across Linux and Windows filesystems.
QGIS can run as a Linux desktop application in WSLg, which is useful when a geospatial workflow depends on Linux packages, command-line processing, or a Linux CI environment. It is a separate application stack from native Windows QGIS: plugins, providers, Python bindings, GDAL libraries, and configuration live inside the WSL distribution. Installing or upgrading one side does not automatically update the other.
The GIS project is more than a map window. It references datasets, coordinate reference systems, styles, layouts, processing algorithms, and provider-specific metadata. A project that opens on one workstation can still have broken paths or missing providers on a clean WSL environment. Keep the project and test data organized so those dependencies can be audited.
Establish a Linux-native QGIS environment
Select a QGIS distribution and release supported by the WSL distro and by the project. Follow the current QGIS installation documentation for its package source; do not mix a desktop binary from one release with Python plugins or GDAL libraries from another. Record QGIS, GDAL, PROJ, and Python versions because provider behavior and format support can depend on this stack.
Use WSLg to display the Linux application, but keep the source project and processing workspace on the Linux filesystem for the baseline. Microsoft recommends Linux storage for Linux command-line workloads. /mnt/c can be appropriate when Windows software must consume the same files, but test that integration intentionally because permissions, file watching, and I/O differ from ext4 paths.
Before opening a project, confirm which QGIS executable and processing tool are selected:
command -v qgis
qgis --version
command -v qgis_process
qgis_process list | head -30
Not every distribution package exposes the same launcher names or plugin set. If the command is missing, inspect the installed package and its documentation instead of assuming WSLg is unavailable. When using a Windows IDE or a native Windows QGIS installation for editing, record which application instance owns the project and plugin settings.
Keep project paths and data provenance explicit
QGIS project files can refer to layer sources using relative or absolute paths. Relative paths make a project easier to move as a directory tree, but only if the associated data remains at the expected relative location. Absolute Linux paths can work in a specific WSL home directory and break for another user. Choose a deliberate layout, for example a project directory with data/, styles/, exports/, and a versioned .qgz project.
Keep source data immutable and write derived layers to a separate output directory. For each input, record its origin, download or extraction date, checksum if relevant, expected coordinate reference system, and license. Do not overwrite source GeoPackages or shapefile components in place while testing processing algorithms. A reproducible GIS analysis needs both project configuration and a traceable input dataset.
Inspect vector data before loading it into a complex project:
ogrinfo -so -al data/roads.gpkg
ogrinfo reports the layer structure and metadata available through GDAL’s vector provider. Confirm the intended layer name, geometry type, feature count, extent, and spatial reference before blaming a QGIS rendering issue. Large or remote datasets may require different inspection options; start with a small known fixture and avoid scanning a production dataset by accident.
For Windows/Linux sharing, avoid assuming that a drive path and a Linux path are interchangeable. If a project must be opened by both QGIS installations, create a separate interoperability copy and test it with each side. Plugins may save absolute paths, encode provider options, or depend on a Python package available only in one installation. A project that opens without a red layer indicator still needs a check of all required layers and data sources.
Coordinate systems and provider boundaries
Coordinate reference system selection affects how layers are displayed and processed. Check the project CRS, each layer’s declared CRS, and any transformation context before interpreting distances, areas, or overlay results. A layer can render through on-the-fly transformation while an analysis tool uses a different assumption or output CRS. Do not treat a visually aligned map as proof that source metadata is correct.
For measurements, choose a suitable projected CRS and document units, area or distance method, and relevant datum transformation. Geographic coordinates in degrees are not directly interchangeable with metric distances. Validate a processing output against a small feature whose expected result is independently understood. If the project uses grids or transformation resources, make those prerequisites explicit and verify they are installed in the WSL environment.
QGIS data providers abstract storage formats, but each provider has its own capabilities and transaction semantics. A GeoPackage, PostGIS database, raster provider, and remote web service do not have identical locking, field type, or write behavior. Confirm whether an operation writes a new file, updates a table, or changes project styling only. For database layers, test privileges and transaction handling against a disposable schema.
Processing algorithms and reproducibility
Use the Processing toolbox or the qgis_process command-line interface for repeatable algorithms. Check the installed algorithm list and its help output for exact parameters before scripting. Save the algorithm ID, inputs, output path, CRS, and relevant environment version with the analysis. A successful command can still create an empty layer or output with an unexpected geometry type, so inspect results after each stage.
Prefer small validation runs with known outputs before applying an algorithm to a large dataset. Check feature counts, geometry validity, null fields, CRS, extent, and sample attributes. If an algorithm changes geometry, preserve a source copy and compare expected properties rather than only checking whether the output opens. A processing model or script is not reproducible if it points to a user-specific path or silently uses a plugin not installed on CI.
Keep GUI and command-line behavior in sync. QGIS launched through WSLg inherits Linux environment and provider settings, while a shell-launched processing job may not inherit the same user profile or plugin path. Test the exact command used in automation. If a Python console works but qgis_process cannot load an algorithm, compare executable versions, profiles, environment variables, and provider availability.
WSLg, resource limits, and troubleshooting
WSLg provides display integration, not unlimited graphics or data access. If the GUI is blank or slow, first establish whether the application runs and whether the same project can render a small local layer. Then inspect WSLg graphics, memory pressure, and dataset complexity. Do not change graphics settings and provider versions simultaneously. A large raster can exhaust VM memory even when the map window itself is functioning normally.
If a layer is missing, inspect its stored source URI, path case, drive mount, provider, and file permissions. If geometry appears shifted, check CRS metadata and transformation operations rather than moving the layer manually. If an algorithm is absent, inspect enabled providers, plugin dependencies, and the QGIS/Processing versions. If output is empty or malformed, run the same operation on a small fixture and capture its full parameters.
The Linux environment can stop when WSL shuts down. Long processing jobs should write to an explicit durable path and have restart-safe inputs. A systemd service or open GUI does not guarantee Windows host uptime. Use a managed geospatial compute environment for production workflows that require uninterrupted execution, shared access, or audited artifact retention.
Package the workflow for another workstation
For a reviewable analysis, keep the project file, small test fixtures, processing model or script, and expected output checks in a predictable tree. Large authoritative datasets may remain external, but record their source and checksum and provide a small synthetic fixture for automated tests. A reviewer should be able to identify which parts are inputs, derived outputs, styling, and environment configuration without opening every layer manually.
If processing is run headlessly, use the documented command-line interface and a clean profile or configuration where the project requires it. GUI success can depend on a user’s saved profile, plugin settings, or recently enabled provider. Capture the exact QGIS release and algorithm ID, and rerun one bounded job from a fresh WSL shell before relying on a scripted workflow. This separates project logic from the state of a long-lived desktop session.
Acceptance criteria
Accept the WSL QGIS setup when QGIS and GDAL versions are recorded, a project opens with every expected layer, source paths are deliberate, CRS and transformations are reviewed, and one bounded processing run produces an inspected output. Confirm that native Windows and Linux plugin/data stacks are kept separate unless a tested interoperability workflow requires both.
QGIS in WSLg is a capable Linux geospatial workstation. It is not a guarantee that project paths, plugins, providers, or CRS choices are portable or correct without explicit validation.
Related:
- How WSLg Gets a Linux GUI Window Onto Your Windows Desktop
- How to Access Files Between Windows and WSL Correctly
Sources: