# Transmission (简体中文)

From ArchWiki
Jump to navigation Jump to search
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 的翻译。上次翻译日期：2018-08-31。如果英文版本有所更改，则您可以帮助同步翻译。

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

## 安装

有多种可选的软件包：

- transmission-cli - 包括命令行工具、守护程序和 #Web 界面。
- transmission-gtk - GTK+ 3 图形界面.
- transmission-qt - Qt5 图形界面.
- tremcAUR 或 tremc-gitAUR - 用于守护程序的 Curses 界面。

注意： GTK+ 客户端无法连接至守护程序，想用守护程序的用户可以考虑带图形界面的 Qt 包，或是带 Curses 界面的 tremc 包。

## 图形界面的配置

两种带 GUI 的版本 transmission-gtk 和 transmission-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

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

      $ killall transmission-daemon

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

另一种停止 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` 目录可供系统账户 `facade` 和 `transmission` 用户所属的 `transmission` 组访问。非常不鼓励使这个目录可读写（即不要将目录 chmod 到 777），而是应该将个别用户/组的部分权限授予部分目录。

注意： 如果 `/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-dir` 和 `watch-dir-enabled` 选项都不起作用，可以带 `-c /path/to/watch/dir` 参数启动 transmission 守护程序。

如果你在用 systemd，按照 systemd (简体中文)#修改现存单元文件 里面的描述编辑 `transmission.service` 单元文件。

#### 启用 IPv6

默认情况下，守护程序仅监听 IPv4 连接。要同时监听 IPv6 连接，安装 transmission-cli-ipv6AUR[断开的链接：package not found] (或者 transmission-cli-gitAUR，或者等 Transmission 3.0 发布)，然后把 `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

## 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"

## 故障排除

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

在 `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 维基
- HeadlessUsage

Category:

- BitTorrent (简体中文)

Hidden category:

- Pages with broken package links