|:.:.:.:.:.:.:.:.:/.:.:.:.:.:./.:.:.:.:.:.:.:.:.:.:.:.:.:./|   '. :.:.:.:.:.:.:.:.:.:.l.ヽ:.:.:.:.l:.:.:.:.:.:.:.:.:.:∧\:.:.:.',
          |:.:.:.:.:.:.:./.:.:.:.:.:./.:.:.:.:.:.:.:.:.:.:.:.: , ′   l :.:.:.:.:.:.:.:.:.:| ∨.:.:.l:.:.:.:.:.:.:.:.:.:.∧ \:.'.
          |:.:.:.:.:.:/.:.:.:.:.: /.:.:.:.:.:.:.:.:. ヽ/ /    |:.:.:.:.:.:.:./:.:.|   y'.:.:|:.:.:.:.|:.:.:.:.:.:.∧   ヘ.
          |:.:.:.:./.:.:.:.//.:.:.:.:.:.:.:.:.:.:/ \,′   !:.:.:.:.:.:/|:.:./,/ '.:.:| :.:.:.|:.:.:.:.:.:.:.:.|
          |:.:.:/.:.:./.:./.:.:.:.:.:.:.:.:./   /` ‐-‐'|:.:.:./ |ァ'´    |:.:| :.:.:.|:.:.:.:.:.:.:.:.|
          |:.:.i.:.:./.:.:.: '.:.:.:.:.:.:.:/   ,/       |:.:.:/   ′    }.:.| :.:.:.|:.:.:.| :.:.:.:|
          |:.:.|:./.: rヘ|:.:.:.:.:.:/:.| 三三三三三  |:./   三三三 ハ|:.:.:.:.|:.:.:.| :.:.:.:|
          |:.:.l〃.:{  |:.:.:.:./.:.:.|             l.'         .i.:.:.i.:.:.:∧ :.:|ヽ :.:|
          |:.:./.:.:.:.\|:.:.:/.:.:.:.:|                '       |:.:.||:.:/  :.:.| '.:.:l
          |:./.:.:.:.:.:.:. !:./.:.:.:.:.:.'、            ,.ー--、    }.:.:|レ′ ∨  V
          |/.:.:.:.:.:.:.:.:V '´  ̄`ヽ.、            ´`¨¨{. |_.  '.:.:.:.|
         /.:.:.:.:.:.:.:./         ヘ `    . __. -r1 |:.:.:.:.:.:.:.:.|
         :.:.:.:.:.:.:, '         '. \    | _.   -┴ー──┴┐
         :.:.:.:.:./           |  \  r' |   -──────i'


How to Set Up slskd (a Headless Client for Soulseek)

Last Mod.: 2024-06-05 | Created On: 2024-02-26

I finally found a headless soulseek client and I can now perma-share from my NAS, with a client that runs on the server and that has an WebUI just like qBittorrent, today we are going to set up slskd the only client to my knowledge that works on the server.

You will have to have an user that will own the files that you download! The user that owns my file shares is the share user, it has permission to modify the files on my smb share and raid. Remember to replace it when you are following this guide! It works exactly like my qBittorrent guide, alternatively you could just run slskd with the root user if you are retarded.

Downloading slskd

slskd is a new project it seems, and they don’t have a Debian package, so we will have to download it directly from GitHub. https://github.com/slskd/slskd/releases.

Now copy the release for your platform and then change directory into /opt. Change the commands below if you have a new version!

1cd /opt
2wget https://github.com/slskd/slskd/releases/download/0.19.5/slskd-0.19.5-linux-x64.zip
3mkdir slskd
4mv slskd-0.19.5-linux-x64.zip slskd
5cd slskd
6unzip slskd-0.19.5-linux-x64.zip
7rm slskd-0.19.5-linux-x64.zip

SystemD Service

You will need to create a systemd service file for slskd. Create the file [email protected] at /usr/lib/systemd/system/.

 2Description=slskd service for user %I
 4After=local-fs.target network-online.target nss-lookup.target
 8UMask=007 # This will set the permissions for the files to 770 (rwxrwx---)

Now reload daemon to avoid systemd yelling at you: systemctl daemon-reload.

Starting the Service and Editing the Config

Remember that share here is meant to be replaced with your <user that owns the files> as I talked about in the beginning!

Now start the service with systemctl start slskd@share in my case this user is share is I talked about in the beginning. Then verify the service with systemctl status slskd@share and then stop it (because we have to edit some configs that it generates on the directory of the share).

Now that the config file has been generated, edit it at ~share/.local/share/slskd/slskd.yml. There are only a couple of parameters we need to edit, here are some of the things I modified:

 1remote_configuration: true # Activate this so you can edit this from the WebUI
 3  incomplete: /home/share/.local/share/slskd/incomplete
 4  downloads: /mnt/raid/Media/Music/.soulseek
 6   directories:
 7     - /mnt/raid/Media/Music
 9   port: 5030 # This is the port of the WebUI
10   https:
11     disabled: true # Nobody fucking cares about this its in your LAN
12   authentication:
13     disabled: true # I will talk about this later on the guide
14     username:      # But you can enable if for now if you won't expose
15     password:      # slskd to the internet.
17   address: vps.slsknet.org
18   port: 2271 # do not change this
19   username: 
20   password: 
21   description: |
22     A slskd user. https://github.com/slskd/slskd     
23   listen_ip_address:
24   listen_port: 2235 # you can change this and you'll have to forward it on your router

Now (re)start slskd again with systemctl (re)start slskd@share and login into the WebUI with the IP of your NAS (ex:, you should be able to change the config file by going into System > Options, the WebUI should be pretty intuitive.

Now you can enable the service: systemctl enable slskd@share.

Exposing slskd to the Internet

I use Caddy as my web server because it just works for small applications like this, however there seems to be some kind of fuckery going on with Caddy, when I used the reverse_proxy directive, everything worked, but when I tried to login to the WebUI with the HTML form it wouldn’t let me in! There’s an open GitHub issue talking about this here: https://github.com/slskd/slskd/issues/939.

However I found an easy solution for this, by simply disabling the HTML form authentication, it just works! Because the problem is related to authentication, probably. Now you probably think that I went insane, exposing this to the internet but remember, HTTP Basic Auth exists!


2   authentication:
3     disabled: true


1yourdomain.tld {
2    basicauth * {
3        diowo <password hash> # `<password hash>` can be generated with `caddy hash-password`.
4    }
5    reverse_proxy localhost:5030
6    encode gzip

Now restart caddy with systemctl restart caddy

Thanks for reading my guide, if you have any questions feel free to e-mail me, and I’ll try to help you.

Fixing slskd's Weird Authentication under Caddy
How to Install Netdata on Debian and Fix its …