Transmission - Arch Linux 中文维基

跳至內容

# Transmission

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Transmission，最近一次同步於 2024-01-16，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

Transmission 是一個輕量級、跨平台的 BitTorrent 客戶端。

## 安裝

有多種可選的軟體包：

- transmission-cli包 - 包括命令行工具、守護程序和 #Web 界面。
- transmission-gtk包 - GTK+ 4 圖形界面。
- transmission-qt包 - Qt 6 圖形界面。
- tremcAUR 或 tremc-gitAUR - 用於守護程序的 Curses 界面。
- stigAUR 或 stig-gitAUR – 用於守護程序的 Curses 界面。
- transmission-remote-gtk包 – 用於守護程序的 GTK+ 3 界面。

## 圖形界面的配置

兩種帶 GUI 的版本 transmission-gtk 和 transmission-qt 都可以在沒有後端守護程序的情況下獨立運行。

GUI 版本都被配置為開箱即用，但用戶可能仍需要更改一些設置。GUI 配置文件的默認路徑是 `~/.config/transmission`。

在 Transmission 的 Github 上，有一份各種選項如何配置的教程： https://github.com/transmission/transmission/blob/main/docs/Editing-Configuration-Files.md.

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

#### 選擇一個用戶

選擇你想如何運行 `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/blob/main/docs/Editing-Configuration-Files.md

注意：

- 如果你想用一個文本編輯器手動編輯配置文件，請先 停止守護程序；否則當它停止時將會覆蓋配置文件。
- 另一種方式是，可以用 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 連接，把 `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

## 通知

停止 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 界面。你只需要單擊 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"

注意：如果你設置了用戶名和密碼，那麼所有後續對`transmission-remote`的命令都需要使用`--auth username:password`進行身份驗證。請參閱：transmission-remote commands are erroring with Unauthorized user

### 可選的網頁 UI 主題

如果覺得 web app 的默認用戶界面過時、不好看，試試這個簡單CSS主題： https://git.eigenlab.org/sbiego/transmission-web-soft-theme

另一個完整替代方案，可以和默認界面共存： https://github.com/ronggang/transmission-web-control

## 作為makepkg DLAGENT的用法

Transmission可以連同transmission-dlagentAUR下載代理一起，作為makepkg的磁鏈下載代理。

磁鏈URI需要將其前綴從`magnet:?`更改為`magnet://`。

## 故障排除

### 無法使用網絡連接至守護程序

在 `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=4194304` 和 `net.core.wmem_max=1048576` 可以解決。

### transmission-remote頻繁超時或網絡界面無響應

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命令因未授權的用戶而出錯

## 更多信息

- Transmission wiki (old)
- Transmission documentation on GitHub
- Headless Usage

分類：​

- BitTorrent

Transmission
新增話題