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
):
# 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 discovery5357/tcp
for HTTP responses5358/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 withsystemctl status wsdd
and review logs usingsudo 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 towsdd
) 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.
Thanks
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)
wsdd is in the Ubuntu repositories as of version 22. “apt install wsdd” did the job for me.
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
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.
dont work on ubuntu 16.04 LTS
Dang. Any error?
Work great for me. Thanx a lot for such great tutorial.
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.
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
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.
Same problem here.
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?
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?
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.
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.
Yes it did. Got the same error on my Debian 11 server.
Thank you so much. This worked for me as well.
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.
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.
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 !
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?