Transmission (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 Transmission翻译。上次翻译日期:2021-10-03。如果英文版本有所更改,则您可以帮助同步翻译。

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

安装

有多种可选的软件包:

图形界面的配置

两种带 GUI 的版本 transmission-gtktransmission-qt 都可以在没有后端守护程序的情况下独立运行。

GUI 版本都被配置为开箱即用,但用户可能仍需要更改一些设置。GUI 配置文件的默认路径是 ~/.config/transmission

在 Transmission 的网站上,有一份各种选项如何配置的教程: https://github.com/transmission/transmission/wiki/Editing-Configuration-Files.

Transmission 守护程序和命令行

transmission-cli 支持的命令包括:

transmission-daemon: 启动守护程序。
transmission-remote: 调用本地或远程守护程序的 命令行界面,后面跟着希望守护程序运行的命令。
transmission-show: 返回指定种子文件的信息。
transmission-create: 创建一个新的种子文件。
transmission-edit: 新增、删除或替换一个 tracker 服务器的 announce URL。
transmission-cli: (已弃用) 启动一个非守护程序的本地 transmission 实例,用于手动下载一个种子。
tremc: (需要 tremc-gitAUR) 为本地或远程守护程序启动一个 curses 界面。

守护程序的启动与停止

就像 #选择一个用户 里面的说明那样,transmission 的守护程序可以按以下方式运行:

  • 作为 transmission 用户运行,只要 用 systemd start/enable transmission.service 服务即可。
你可以按照 #选择一个用户 里的说明更改默认用户。
  • 用你自己的账户,只要在账户下运行:
    $ transmission-daemon

启动守护程序将会创建一个初始的 transmission 配置文件。详情参阅 #配置守护程序

守护程序可以这样来停止:

$ pkill -3 transmission-daemon

另一种停止 transmission 的方法是使用 transmission-remote 命令:

$ transmission-remote --exit

减少多余的日志

运行 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

Wicd

在文件夹 /etc/wicd/scripts/postconnect 里创建一个 启动脚本,并且在文件夹 /etc/wicd/scripts/predisconnect 里创建一个 停止脚本。记得给它们运行权限,例如:

/etc/wicd/scripts/postconnect/transmission
#!/bin/bash

systemctl start transmission
/etc/wicd/scripts/predisconnect/transmission
#!/bin/bash

systemctl stop transmission

选择一个用户

选择你想如何运行 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 客户端或者用自带的 web 界面(在支持的浏览器中用 http://localhost:9091 来访问)可以自定义守护程序。

在 Transmission 的网站上,有一份各种选项如何配置的教程:https://github.com/transmission/transmission/wiki/Editing-Configuration-Files

注意: 如果你想用一个文本编辑器手动编辑配置文件,请先 停止守护程序;否则当它停止时将会覆盖配置文件。
注意: 另一种方式是,可以用 SIGHUP 信号指示守护程序重新加载其配置,运行 kill -s SIGHUP `pidof transmission-daemon` 即可。

一个给那些用 transmission 账户运行的用户的建议是,用适当的权限创建一个共享的下载目录,这样就能同时允许 transmission 账户和其他账户访问下载文件,也能相应地更新配置文件。例如:

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

现在 /mnt/data/torrents 目录可供系统账户 facadetransmission 用户所属的 transmission 组访问。非常不鼓励使这个目录可读写(即不要将目录 chmod777),而是应该将个别用户/组的部分权限授予部分目录。

注意: 如果 /mnt/data/torrents 位于一个可移除的设备上,比如这是一个 /etc/fstab 条目且带有 nofail 选项,那么 Transmission 会报告说没有找到文件。要解决这个问题,可以在 /etc/systemd/system/transmission.service.d/transmission.conf 文件的 [Unit] 一节中加入 RequiresMountsFor=/mnt/data/torrents

另一种方法是把你的账户加入 transmission 用户组 (#usermod -a -G transmission yourusername),然后修改 /var/lib/transmission/var/lib/transmission/Downloads 目录的权限设置,以允许 transmission 组成员对这两个目录的 rwx 访问权。

Host 白名单

如果你想用远程主机的主机名来访问位于该主机上的 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 使用示范

如果你想删除所有已完成的种子,可以用下面的命令(用你自己的用户名和密码):

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

为已下载的文件做种:

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

Web 界面

GUI 方式

当 Transmission 安装完毕后就可以轻易架起 web 界面。你只需要单击 edit 菜单,选择 preferences。单击 Remote 选项卡并启用 Allow remote access

此处你可以修改默认的监听端口 9091。

单击 Use authentication 并填写用户名和密码就可以启用身份认证。

要提高安全性,可以启用 Only allow these IP addresses 限制来自任意 IP 的访问。

现在你可以单击 Open web client (用你的默认浏览器打开)或手动访问 http://TARGET_IP_ADDRESS:PORT 来启动 web 界面。

如果没有修改监听端口,默认是 9091。在这种情况下访问链接是 http://localhost: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"

可选的网页 UI 主题

如果觉得 web app 的默认用户界面过时、不好看,试试这个简单CSS主题: https://git.eigenlab.org/sbiego/transmission-web-soft-theme

另一个完整替代方案,可以和默认界面共存: https://github.com/ronggang/transmission-web-control

故障排除

无法使用网络连接至守护程序

network.service 初始化后守护程序就会开始运行。但是,如果启用了 dhcpcd 服务而不是特定设备的服务(比如 dhcpcd@enp1s0.service),可能 Transmission 会因为启动过早而无法绑定到相应的网络接口。于是 web 界面无法访问。一种可能的解决方案是在 systemd 单元的 配置文件 里增加 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 可以解决。

更多信息