Transmission

出自 Arch Linux 中文维基

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

安裝[編輯 | 編輯原始碼]

有多種可選的軟體包:

圖形界面的配置[編輯 | 編輯原始碼]

兩種帶 GUI 的版本 transmission-gtktransmission-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 目錄可供系統帳戶 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

通知[編輯 | 編輯原始碼]

停止 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=4194304net.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命令因未授權的用戶而出錯

更多信息[編輯 | 編輯原始碼]