DEV Community

An Rodriguez
An Rodriguez

Posted on • Originally published at writing.preferredframe.com on

Open Images (or Any File) from WSL2 — Directly in Windows

Opening a file from the WSL2 terminal using winopen, launching the native Windows viewer
Opening a file from the WSL2 terminal
using winopen, launching the native Windows viewer

WSL2 is fantastic.

But the moment you try to open an image from the terminal, everything falls apart.

You try:


explorer.exe image.png
Enter fullscreen mode Exit fullscreen mode

Nothing happens. Or Explorer opens the wrong folder. Or Windows throws a cryptic UNC-path error.

Let’s fix this properly — with one small, reliable function.

TL;DR

To open any file from WSL2 in its Windows environment, add one small shell function to your config file.

⚠️ Limitation: this works on real paths only (no symbolic links).

Quick Setup (60 seconds)

  1. Open your shell config file:

  2. Paste this function:

winopen() {
  explorer.exe "$(wslpath -w "$(realpath "$1")")"
}
Enter fullscreen mode Exit fullscreen mode
  1. Reload your shell:

source ~/.zshrc # or: source ~/.bashrc
Enter fullscreen mode Exit fullscreen mode
  1. Open any file:

winopen image.png
Enter fullscreen mode Exit fullscreen mode

Done.

ZSH (manual)

Edit your config file:


vim ~/.zshrc
Enter fullscreen mode Exit fullscreen mode

Add this one-liner anywhere:

winopen() {
  explorer.exe "$(wslpath -w "$(realpath "$1")")"
}
Enter fullscreen mode Exit fullscreen mode

Bash

The same function works in Bash.

Add it to ~/.bashrc:

winopen() {
  explorer.exe "$(wslpath -w "$(realpath "$1")")"
}
Enter fullscreen mode Exit fullscreen mode

macOS, Linux, BSD (for reference)

On Unix-like systems with a GUI, the equivalent is trivial:

open file.png # macOS
xdg-open file.png # Linux desktop
Enter fullscreen mode Exit fullscreen mode

WSL2 is special because it crosses OS boundaries.

Use It

Reload your shell:

source ~/.zshrc # or source ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Then:

winopen image.png
winopen file.pdf
winopen video.mp4
Enter fullscreen mode Exit fullscreen mode

Windows Explorer opens at the correct location.

Select the file. Hit Enter.

The file opens using the default Windows application.

The Problem (What’s Actually Going On)

WSL2 runs Linux in a VM. That means:

  • Your files live in a Linux filesystem
  • Windows apps expect Windows paths
  • Windows sees WSL files as UNC paths like\\wsl.localhost\Ubuntu-22.04\home\username\...
  • Many Windows applications handle UNC paths inconsistently

So even when a command looks correct, it often fails silently.

This is not user error. It’s impedance mismatch.

Why Explorer Is the Right Tool

Windows Explorer:

  • Fully supports UNC paths
  • Is designed to browse network locations
  • Reliably dispatches files via default associations
  • Does not suffer from viewer-specific UNC bugs

Explorer is the stable bridge between WSL and Windows.

The Correct Mental Model

WSL–Windows integration has multiple layers:

Goal Tool Reliability
Browse WSL files Windows Explorer ✅ Always
Open via Enter Explorer ✅ Always
Open directly in app App-dependent ⚠️
Guaranteed native paths /mnt/c

Once you use the right layer, the problem disappears.

Recommendation

  • Use Explorer for anything under/home/...
  • Let Explorer handle UNC paths
  • Hit Enter to open files

Simple. Honest. Reliable.

Final Thoughts

This function is tiny.

But it removes a constant friction point when working in WSL2: previewing images, checking PDFs, opening generated files.

One command. Any file. Native Windows apps.

Honestly, this one made me smile when it finally clicked — fewer hacks, less friction, and a smoother dev loop always feels good 😊


✅ 100% vibe-code certified 💯

DOI: https://writing.preferredframe.com/prints/Open%20Images%20%28or%20Any%20File%29%20from%20WSL2%20%E2%80%94%20Directly%20in%20Windows/10.5281/zenodo.18396224

Top comments (0)