Transmission-daemon cannot move finished files into definitive directory

Ubuntu Version:
Ubuntu server 25.10, amd64

Problem Description:
I have a transmission daemon running and downloading files, no problem. But when the file is finished, it is not moved to the repository I indicated.

Relevant System Information:
Here I have part of the config’ :

… "default-trackers": "", "dht-enabled": true, "download-dir": "/home/torrents", "download-limit": 100, "download-limit-enabled": 0, "download-queue-enabled": true, "download-queue-size": 5, "encryption": 1, "idle-seeding-limit": 30, "idle-seeding-limit-enabled": false, "incomplete-dir": "/var/lib/transmission-daemon/downloads", "incomplete-dir-enabled": true, "lpd-enabled": true, …

Basically, transmission downloads in /var/lib/transmission-daemon/downloads and is supposed to move files in /home/torrents .

/var/lib/transmission-daemon/downloads is on the system partition, on the system disk. Downloads are coming in fine.

I want files to move to /home/torrents when they are done, as configured. That directory is in another partition, on a huge disk. And it cannot do it.

Screenshots or Error Messages:
When finished, transmission simply put this message:

Couldn’t move ‘/var/lib/transmission-daemon/downloads/’ to ‘/home/torrents’: Unable to create directory for new file: Permission denied (13)

Test I have tried:
The daemon’s user can actually copy files there without troubles, I tested it manually myself using this command (from /var/lib/transmission-daemon/downloads):

sudo -u debian-transmission cp ubuntu-25.10-desktop-amd64.iso /home/torrents/

For the time being, I have allowed anyone to write in /home/torrents (world writable). It does not change a thing.

I have no clue what is wrong.

1 Like

Are you sure it should be /home/torrents ? It would make sense if it were /home/[yourusername]/torrents

1 Like

You should try forcing complaining mode for transmission apparmor profile:

sudo ln -s /etc/apparmor.d/transmission /etc/apparmor.d/force-complain/transmission
sudo systemctl reload apparmor

Then check if transmission works as expected.

I expected something of the sort. I knew of AppArmor, I just did not know if it was the culprit or what to do. Actually I simply removed the safety files from AppArmor.

Now the files can indeed be put in their final directory and I also have access to the web interface (which was unavailable).

Only thing is that now torrents are paused after they are finished (e.g. I am not seeding by default), which is weird, I did not have that behavior in my previous transmission install (in another OS). I suspect this is not related.

What is the output of:

ls -l /home/*

Thanks

1 Like

There are 4 directories in /home/ : musique, series, videos and stephane (my personal storage space)

Best is I put that in a pastebin.

https://www.pastebin.fr/019c5dee-0bc1-7033-b834-337a17ffa23d

Doing that the next time you install an upgrade of apparmor the files will be recreated and you’ll have the problem again.

In my opinion the best way is either forcing complaining mode (i.e. linking the profile in /etc/apparmor.d/force-complain/) or disabling it (i.e. linking the profile in /etc/apparmor.d/disable/). This way it remains with every upgrade.

I went for the stupid, straight way first, to check if it was the direction. Now I should do as you said (disabling).

Those two statements contradict each other. According to your listing, /home/torrents doesn’t exist.

That explains your error:

I think that when you ran Transmission, you might have forgotten to mount torrents in /home.

Check that it is mounted first before you run Transmission.

2 Likes

Actually /home/torrents is very well listed in the middle of the listing.

1 Like
/home/torrents:
total 10867656
drwsrwxrwx 2 debian-transmission debian-transmission       4096 Feb 14 20:02 .
drwxr-xr-x 7 root                videos                   12288 Feb 14 08:36 ..
-rw-r--r-- 1 debian-transmission debian-transmission  734310400 Feb 14 20:00 debian-13.3.0-arm64-netinst.iso
-rw-r--r-- 1 debian-transmission debian-transmission 4691619840 Feb 14 20:01 debian-13.3.0-armhf-DVD-1.iso
-rw-r--r-- 1 debian-transmission debian-transmission 5702520832 Feb 14 15:32 ubuntu-25.10-desktop-amd64.iso
1 Like

Maybe chmod to 664 rather than 644. May help. Also, why does root own the subfolder videos?
Seeens weird

1 Like

What username is launching Transmission? Which user owns the Transmission PIDs?

Is it your username? Or is it the user debian-transmission? Or is it some other username?

I am using the installer’s system user, e.g. debian-transmission.

I want some other users (including debian-transmission) to be able to write into that directory.

Also I have no specific user to own the videos or music directory. (And those were moved from an older NAS.)

Are you running Transmission on a server OS (no GUI)? If so, what is the output of
sudo systemctl cat transmission-daemon

If you have a desktop OS the please give the output of
sudo systemctl cat transmission-gtk

Thanks

1 Like

# /usr/lib/systemd/system/transmission-daemon.service
[Unit]
**Description=**Transmission BitTorrent Daemon
**Wants=**network-online.target
**After=**network-online.target
**Documentation=**man:transmission-daemon(1)

[Service]
**User=**debian-transmission
**Type=**notify
ExecStart=/usr/bin/transmission-daemon -f --log-level=error
ExecReload=/bin/kill -s HUP $MAINPID

# Hardening
CapabilityBoundingSet=
**DevicePolicy=**closed
**KeyringMode=**private
**LockPersonality=**true
**NoNewPrivileges=**true
**MemoryDenyWriteExecute=**true
**PrivateTmp=**true
**PrivateDevices=**true
**ProtectClock=**true
**ProtectKernelLogs=**true
**ProtectControlGroups=**true
**ProtectKernelModules=**true
**ProtectSystem=**true
**ProtectHostname=**true
**ProtectKernelTunables=**true
**ProtectProc=**invisible
**RestrictNamespaces=**true
**RestrictSUIDSGID=**true
**RestrictAddressFamilies=**AF_UNIX AF_INET AF_INET6
**RestrictRealtime=**true
SystemCallFilter=@system-service
**SystemCallArchitectures=**native
**SystemCallErrorNumber=**EPERM

[Install]
**WantedBy=**multi-user.target

I don’t have transmission-gtk

Does the output have the asterisks?

no, I just copy-pasted it. Asterisks were not present.

well, you were maybe smart in proposing that disable mode, but now, I have it as you suggested and my torrent cannot be put into the final directory, just as I described in the beginning.