Minimal illustration of two computer monitors with Windows and Linux icons connected by arrows, and the text ‘View Linux on Windows.’

Enable Linux Machine Discovery in Windows 10/11 Using WS-Discovery (WSD)

Last updated on | 100 replies

Introduction

Modern Windows 10/11 systems no longer use legacy SMBv1/NetBIOS for network discovery, meaning your Linux machines may not show up automatically in File Explorer’s Network view. Instead, Windows relies on Web Services for Devices (WSD) to locate devices. This guide explains how to use the lightweight wsdd daemon on Linux so your Samba shares are discoverable by Windows.

Prerequisites

  • A Linux system with administrative (sudo) access.
  • Samba installed and configured with at least one shared folder.
  • A Windows PC set to a Private Network with Network Discovery enabled.

Step 1: Install and Configure Samba

Samba is essential for sharing files between Linux and Windows. If you haven’t installed Samba yet, follow the instructions below for your distribution:

Ubuntu/Debian:

sudo apt update && sudo apt install samba

Fedora: sudo dnf install samba
Arch Linux: sudo pacman -S samba
openSUSE: sudo zypper install samba

After installation, configure a Samba share by editing /etc/samba/smb.conf or using a GUI tool. Ensure that Samba’s services are running and that the firewall allows access to ports 445 and 139 (plus UDP 137-138 if needed).

Step 2: Install the WS-Discovery Daemon (wsdd)

The wsdd daemon advertises your Linux system on the network so Windows can discover it. Install it using your package manager:

Ubuntu 22.04+/Debian:

sudo apt update && sudo apt install wsdd

Fedora: sudo dnf install wsdd
Arch Linux: sudo pacman -S wsdd
openSUSE: sudo zypper install wsdd

If wsdd is not available in your repository, refer to the wsdd GitHub repository for manual installation.

Step 3: Enable and Verify the wsdd Service

Check that the wsdd service is active:

systemctl status wsdd

If the service isn’t running, start and enable it:

sudo systemctl start wsdd
sudo systemctl enable wsdd

You can monitor its logs with sudo journalctl -u wsdd -f to ensure it’s working properly.

Step 4: (Optional) Limit wsdd to Specific Interfaces

If your Linux system has multiple network interfaces and you prefer to limit wsdd to one (for example, eth0), edit its configuration file. On Debian/Ubuntu, this is typically /etc/default/wsdd (on RPM-based systems, it might be /etc/sysconfig/wsdd):

/etc/default/wsdd
# Specify network interfaces (space-separated)
WSDD_INTERFACES="eth0"

# Optional: additional wsdd options
WSDD_OPTIONS="--shortlog"

Save and exit (press CTRL + X, press Y, then press ENTER)

Reload systemd and restart wsdd:

sudo systemctl daemon-reload
sudo systemctl restart wsdd

Step 5: Configure Firewall Rules

Allow the necessary ports for WSD discovery. The wsdd daemon uses:

  • 3702/udp for multicast discovery
  • 5357/tcp for HTTP responses
  • 5358/tcp for HTTPS responses (if used)

For example, on Ubuntu with ufw:

sudo ufw allow 3702/udp
sudo ufw allow 5357/tcp
sudo ufw allow 5358/tcp

Also ensure Samba’s ports (TCP 445 and 139, plus UDP 137-138 if required) are open. If your network uses VLANs or multicast filtering, verify that multicast addresses (239.255.255.250 for IPv4 and ff02::c for IPv6) are not blocked.

Step 6: Testing and Troubleshooting

With wsdd running and your firewall configured, open Windows File Explorer and click on Network. Your Linux machine should appear within a few minutes. If it doesn’t:

  • Ensure the Windows PC is on a Private Network with Network Discovery enabled.
  • Verify the wsdd service status with systemctl status wsdd and review logs using sudo journalctl -u wsdd -f.
  • Temporarily disable firewalls on both Linux and Windows to check for blocking issues.
  • Confirm that Samba is properly configured and that you can access the share manually (e.g., via \\hostname\share).

Step 7: Manual Installation for Older or Unsupported Distros

If your distribution doesn’t include wsdd in its repositories, you can install it manually:

  • Download the latest source from the wsdd GitHub repository.
  • Extract the archive and copy the wsdd.py script to /usr/bin/wsdd (renaming it to wsdd) and make it executable.
  • Copy the provided wsdd.service file to /etc/systemd/system/.
  • Reload systemd and enable the service:
    sudo systemctl daemon-reload
    sudo systemctl enable wsdd
    sudo systemctl start wsdd

Conclusion

This guide has shown you how to enable Linux machine discovery in Windows 10/11 using WS-Discovery (WSD) via the wsdd daemon. With Samba sharing and wsdd in place, your Linux server will be visible in Windows File Explorer’s Network section—making cross-OS file sharing both seamless and secure.

Let me know if this helped. Follow me on Twitter, Facebook and YouTube, or 🍊 buy me a smoothie.

100 replies

Leave a reply

Your email address will not be published. Required fields are marked *

  1. In 2023 with Ubuntu:

    sudo apt install wsdd

    just works by default on all interfaces. You can edit /etc/default/wsdd to restrict which interfaces it listens on.

    (Ubuntu 22.04.2 LTS)

  2. wsdd is in the Ubuntu repositories as of version 22. “apt install wsdd” did the job for me.

  3. Hello.
    Last version of wsdd need a file wsdd.defaults that is located in /etc/systemd.
    You can see in wsdd.service that a variable ‘EnvironmentFile’ in the bloc Service point to this file.
    This file must be under /etc/default and called wsdd.

    sudo cp wsdd-master/etc/systemd/wsdd.defaults /etc/default
    cd /etc/default
    sudo mv wsdd.defaults /etc/default/wsdd

    Then you can reload daemon, start and enable wsdd like it is described in this present ‘how to’

    My original purpose was to detect my ubuntu pc in my printer/scanner ‘wsd’ discovery mode, but, at the moment, it doesn’t work.
    I tried apt install wsdd, same result, doesn’t seen the ubuntu pc in my scanner menu

    1. THANK YOU! I followed the original instructions but ran into an error starting the WSDD service. I then saw and followed your additional instructions and they worked perfectly. I can now see my ubuntu machine and shares on my Windows 10 machine.

  4. Worked fine for me, replace your ENTIRE wsdd.service file with that in the original post, then the resource problem goes away. It did for me.

    1. Simon I apologize but am a little ignorant on the structure and commands of Linux. Can you send me exactly what you did to replace the entire wsdd.service file?
      Thank you for your time and help,
      ernie

  5. Totally failed for me unfortunately. No idea where i went wrong as i followed each step.
    wsdd.service – Web Services Dynamic Discovery host daemon
    Loaded: loaded (/etc/systemd/system/wsdd.service; enabled; vendor preset: enabled)
    Active: failed (Result: resources)
    Docs: man:wsdd(8)
    CPU: 0

    Jul 06 10:42:32 taze-Satellite-Pro-L500 systemd[1]: wsdd.service: Failed to load environment files: No such file or directory
    Jul 06 10:42:32 taze-Satellite-Pro-L500 systemd[1]: wsdd.service: Failed to run ‘start’ task: No such file or directory
    Jul 06 10:42:32 taze-Satellite-Pro-L500 systemd[1]: wsdd.service: Failed with result ‘resources’.
    Jul 06 10:42:32 taze-Satellite-Pro-L500 systemd[1]: Failed to start Web Services Dynamic Discovery host daemon.

  6. Worked great. Thanks for the instruction. I did modify the config file to match what was shown in the instructions. I can now see my samba server in Windows file explorer. However, since updates to Samba and Windows 10 this week, I cannot access the shares on this server. I ge the Windows security Enter nerwork credentials “the user name or passwork is incorrect”. I have checked numerous settings and changes, but nothing has resolved this. Has anyone else experienced this?

  7. Well it seemed to go ok until I keep getting this error.
    Job for wsdd.service failed because of unavailable resources or another system error.
    I do not have the firewall running, during testing, and the edit I commented out had wdss as a user and group.. should I use the other computer or just comment it out?

    1. Ed, I had the same error. I noticed the code in the wsdd.service file (shown above) was dramatically different from the wsdd.service file I downloaded from Github. As a test, I copied the code for wsdd.service shown above and pasted it over (deleting) the code in the new wsdd.service file, and it suddenly worked! Hopefully this helps someone else.

      1. Great article. And great hint Chris, I had the same problem and this fixed it. On windows I then found my shared folder, but I still had no authentication. It was because I had to create a samba user on the Ubuntu machine with `sudo smbpasswd -a albert` and then I was good to go.

  8. Great article. You might want to consider adding that firewall needs to have the following opened:

    outgoing unicast traffic from udp/3702
    incoming to tcp/5357

    In Ubuntu:
    sudo ufw allow 3702/udp
    sudo ufw allow 5357/tcp

    I don’t know about other distros.

    It took me a while to figure out why it wasn’t working despite following your instructions to the letter.

    1. That was fantastic help. It took me a while to find this post and your advice. Thank you. I also had to open up port 445/tcp as well, in order to be able to log in. I couldn’t see my laptop before that though.

      **running Debian 11 on fresh install… forgot I had installed ufw.

  9. I installed it on latest, updated Raspbian OS (ubuntu), it works perfect, thank you for your effort to gradually explain everything how to install this WSD service, thanks !

  10. I’ll not bore you with my noobness, what am I supposed to do from here:
    Open wsdd.service in nano and comment out User=nobody and Group=nobody with a ; semicolon.
    sudo nano /etc/systemd/system/wsdd.service

    When I open wsdd.service it shows a blank page. Is that right? Do I just type in ; User=nobody, ; Group=nobody, Save & Exit?