Transmission

来自 ArchWiki

Transmission 是一个轻量级和跨平台的 BitTorrent 客户端。

安装

有三个软件包提供 Transmission 客户端

还有各种第三方客户端可以连接到守护进程

配置 GUI 版本

两个 GUI 版本 transmission-gtktransmission-qt 都可以独立运行,无需正式的后端守护进程。

GUI 版本配置为开箱即用,但用户可能希望更改某些设置。GUI 配置文件默认路径为 ~/.config/transmission

配置选项指南可以在 Transmission 的 Github 上找到。

Transmission 守护进程和 CLI

transmission-cli 的命令是

transmission-daemon
启动守护进程。
transmission-remote
调用守护进程的 CLI,无论是本地还是远程,后跟您希望守护进程执行的命令。
transmission-show
返回给定 torrent 文件的信息。
transmission-create
创建新的 torrent。
transmission-edit
添加、删除或替换 tracker 的 announce URL。
transmission-cli
已弃用,推荐使用 transmission-remote)启动 transmission 的非守护进程本地实例,用于手动下载 torrent。
tremc
(需要 tremc-gitAUR)启动守护进程的 curses 界面,无论是本地还是远程。

启动和停止守护进程

Transmission 的守护进程可以运行

  • 作为用户 transmission,通过启动/启用 transmission.service。用户可以按照#选择用户中的说明进行更改。
  • 作为您自己的用户,在您的用户名下运行
$ transmission-daemon

启动守护进程将创建一个初始配置文件。请参阅#配置守护进程

可以使用以下命令停止 Transmission 守护进程

$ transmission-remote --exit

另一种选择是

$ pkill -3 transmission-daemon

减少日志垃圾信息

运行 transmission-daemon 可能会导致大量不必要的日志条目。可以通过使用小型包装脚本启动它来过滤输出。以下示例还提供了一些通知

transwrap.sh
#!/bin/zsh
killall transmission-daemon 2> /dev/null
transmission-daemon --foreground --log-info 2>&1 | while read line; do
	echo $line |
		grep -v "announcer.c:\|platform.c:\|announce done (tr-dht.c:" |
		grep -v "Saved.*variant.c:" |
		while read line; do
			echo $line | grep -q "Queued for verification (verify.c:" &&
				notify-send --app-name="Transmission Started" "${line#* * }"
			echo $line | grep -q "changed from .Incomplete. to .Complete." &&
				notify-send --app-name="Transmission Complete" "${line#* * }"
			echo $line | systemd-cat --identifier="TransWrap" --priority=5
		done 2>&1 > /dev/null
	done&disown

仅在连接到网络时运行

Netctl

可能需要在某些网络上运行 Transmission。以下脚本检查连接是否到授权网络列表,然后继续启动 transmission-daemon。

/etc/netctl/hooks/90-transmission.sh
#!/bin/bash

# The SSIDs for which we enable this.
declare -A ssids=(
    ["network_1"]=y
    ["network_2"]=y
)

if [[ ${ssids[$SSID]} ]]; then
    case $ACTION in
        CONNECT|REESTABLISHED)
            # Need to wait, otherwise doesn't seem to bind to 9091.
            sleep 30
            systemctl start transmission
            ;;
        *)
            systemctl stop transmission
            ;;
    esac
fi

选择用户

选择您要如何运行 transmission

  • 默认情况下作为单独的用户 transmission(推荐以提高安全性)。

默认情况下,transmission 创建用户和组 transmission,其主目录文件位于 /var/lib/transmission/,并以此“用户”身份运行。这是一个安全预防措施,因此 Transmission 及其下载无法访问 /var/lib/transmission/ 之外的文件。配置、操作和访问下载需要使用“root”权限(例如,使用 sudo)。

  • 在您自己的用户下。要进行设置,请覆盖提供的服务文件并指定您的用户名
/etc/systemd/system/transmission.service.d/username.conf
[Service]
User=your_username

配置守护进程

通过启动守护进程创建初始配置文件。

  • 如果以用户名 transmission 运行 Transmission,则配置文件将位于 /var/lib/transmission/.config/transmission-daemon/settings.json
  • 如果以您自己的用户名运行 Transmission,则配置文件将位于 ~/.config/transmission-daemon/settings.json

可以通过使用 Transmission 客户端或使用支持的浏览器通过 https://127.0.0.1:9091 访问的内置 Web 界面来自定义守护进程。

配置选项指南可以在 Transmission 网站上找到: https://github.com/transmission/transmission/blob/main/docs/Editing-Configuration-Files.md

注意
  • 如果您想使用文本编辑器手动编辑配置,请先停止守护进程;否则,它会在关闭时覆盖其配置文件。
  • 或者,可以通过运行 kill -s SIGHUP $(pidof transmission-daemon) 指示守护进程使用 SIGHUP 重新加载其配置。

对于那些以用户名 transmission 运行的用户,建议创建一个共享下载目录,并具有正确的权限,以允许 transmission 用户和系统用户访问,然后相应地更新配置文件。

# mkdir /mnt/data/torrents
# chown -R facade:transmission /mnt/data/torrents
# chmod -R 775 /mnt/data/torrents

现在,系统用户 facade 和 transmission 用户所属的 transmission 组都可以访问 /mnt/data/torrents。强烈建议不要将目标目录设置为全局可读/可写(即不要将目录 chmod 为 777)。相反,请为各个用户/组提供对相应目录的适当权限。

注意: 如果 /mnt/data/torrents 位于可移动设备上,例如在带有 nofail 选项的 /etc/fstab 条目中,Transmission 会抱怨找不到您的文件。要解决此问题,您可以将 RequiresMountsFor=/mnt/data/torrents 添加到 /etc/systemd/system/transmission.service.d/transmission.conf[Unit] 部分。

另一种方法是将您的用户添加到 transmission 组 (#usermod -a -G transmission yourusername),然后修改 /var/lib/transmission/var/lib/transmission/Downloads 目录的权限,以允许 transmission 组成员进行 rwx 访问。

主机白名单

如果您计划使用服务器的主机名通过网络访问 Transmission 守护进程,则需要在 settings.json 中将此主机名添加到 rpc-host-whitelist。否则,在访问服务器时,您将收到“421 Misdirected Request”错误。

如果您使用服务器的 IP 地址连接到守护进程,则不需要这样做。

监视目录

如果您想从文件夹自动添加 .torrent 文件,但您发现配置文件中设置的 watch-dirwatch-dir-enabled 选项不起作用,则可以使用标志 -c /path/to/watch/dir 启动 transmission 守护进程。

如果您正在使用 systemd,请按照 systemd#编辑提供的单元 中的说明编辑 transmission.service 单元。

启用 IPv6

默认情况下,守护进程仅侦听 IPv4 连接。要同时侦听 IPv6 连接,请将 settings.json 中的 rpc-bind-address 选项更改为 "::"

CLI 示例

如果您想删除所有已完成的 torrent,可以使用以下命令,并使用您自己的用户名和密码

# transmission-remote -n 'username:password' -l | grep 100% | awk '{print $1}'| paste -d, -s | xargs -i transmission-remote -t {} -r

播种已下载的 torrent

# transmission-remote [HOST] --torrent=example.torrent -a example.torrent --verify --download-dir=/dir/to/folder --start

通知

停止 transmission-daemon 并将这些添加到 .config/transmission-daemon/settings.json

   "script-torrent-added-enabled": true,
   "script-torrent-added-filename": "path/to/transmission-handler.sh",
   "script-torrent-done-enabled": true,
   "script-torrent-done-filename": "path/to/transmission-handler.sh",
transmission-handler.sh
#!/bin/bash

percentage=$(transmission-remote -t $TR_TORRENT_ID -l | awk -v ID="$TR_TORRENT_ID" '$0 ~ ID{print $2}')

if [ $percentage != "100%" ]
then
     notify-send --app-name="Transmission Started" "Transmission: started $TR_TORRENT_NAME"
else
     notify-send --app-name="Transmission Complete" "Transmission: downloaded $TR_TORRENT_NAME"
fi

Web 界面

GUI 方式

安装 Transmission 后,您可以轻松设置 Web 界面。您只需单击“编辑”菜单并选择“首选项”。单击“远程”选项卡并启用“允许远程访问”。

在这里,您可以有机会将默认监听端口从 9091 更改。

选中“使用身份验证”并填写用户名和密码,以便可以使用身份验证。

为了提高安全性,您可以通过启用“仅允许这些 IP 地址”来限制来自任何 IP 地址的访问。

现在您已准备好启动 Web 界面,可以通过点击打开 Web 客户端来使用默认 Web 浏览器打开它,或者手动使用任何受支持的 Web 浏览器访问 http://TARGET_IP_ADDRESS:PORT

如果您没有更改监听端口,则默认端口为 9091。在这种情况下,链接为 https://127.0.0.1:9091

注意: 请记住,必须安装 transmission-cli

CLI 方式

您无需图形界面即可设置 Web 界面,守护程序提供完全相同的选项。您可以无需指定任何标志即可访问 Web 界面。请参阅 #启动和停止守护程序

然而,您可以指定您在上一节中看到的所有内容

$ transmission-daemon --auth --username arch --password linux --port 9091 --allowed "127.0.0.1"

等同于

$ transmission-daemon -t -u arch -v linux -p 9091 -a "127.0.0.1"
注意: 如果您设置了用户名和密码,则所有后续对 transmission-remote 的命令都需要使用 --auth username:password 进行身份验证。请参阅:transmission-remote 命令因未经授权的用户而报错

可选的 Web UI 主题

如果 Web 应用程序的默认用户界面看起来过时且不如预期那样精美,请尝试使用 https://git.eigenlab.org/sbiego/transmission-web-soft-theme 以获得一个简单的 CSS 主题。

https://github.com/ronggang/transmission-web-control 也提供了一个完整的替代方案,可以与默认 UI 共存。

用作 makepkg DLAGENT

Transmission 可以用作 makepkg 的 magnet 下载代理,使用 transmission-dlagentAUR 下载代理。

Magnet URI 需要将其前缀从 magnet:? 更改为 magnet://

故障排除

无法通过网络访问守护程序

守护程序在 network.service 初始化后启动。但是,如果您启用 dhcpcd 服务,而不是设备特定的服务,例如 dhcpcd@enp1s0.service,则可能会发生 Transmission 启动过早且无法绑定到网络接口的情况。因此,Web 界面无法访问。一个可能的解决方案是在单元的 配置文件 中添加 Requires

/etc/systemd/system/transmission.service.d/fixdep.conf
[Unit]
Requires=network.target

Web 界面无法访问

404: Not Found

Couldn't find Transmission's web interface files!

Users: to tell Transmission where to look, set the TRANSMISSION_WEB_HOME environment variable to the folder where the web interface's index.html is located.

Package Builders: to set a custom default at compile time, #define PACKAGE_DATA_DIR in libtransmission/platform.c or tweak tr_getClutchDir () by hand.

即使您使用图形界面,您仍然需要安装 transmission-cli 才能使 Web 界面工作。

未能设置发送/接收缓冲区

Transmission 可能会在启动时在日志中显示以下任一消息

UDP Failed to set receive buffer: requested 4194304, got 425984
UDP Failed to set send buffer: requested 1048576, got 425984

这些可以通过使用 sysctl 设置 net.core.rmem_max=4194304net.core.wmem_max=1048576 来修复。

transmission-remote 频繁超时或 Web 界面无响应

Transmission 不会异步处理磁盘 IO,导致在进行大量写入时变得无响应,请参阅 [1]。考虑将 Transmission 的下载目录放在更快的存储设备上,例如 SSD 而不是 HDD。

transmission-gtk 缺少托盘图标

GTK 4 版本的托盘图标 目前无法工作。可以选择使用 GTK 3 版本 transmission-gtk3AUR

401: 未经授权

在为 Web 界面设置用户名和密码后,使用 transmission-remote 时可能会出现以下错误

< h1>401: Unauthorized\Unauthorized User

发生这种情况是因为设置了用户名和密码。在此之后,来自 transmission-remote 的所有命令都必须经过身份验证。请参阅:transmission-remote 命令因未经授权的用户而报错

另请参阅