如何给 Transmission 配置代理

本文链接个人站 | 简书 | CSDN

Transmission 是一个简洁易用的开源 BT 客户端。在 1.4.x 及更早的版本中,Transmission 是支持配置代理的,之后的版本不知道出于什么原因移除了这一特性。而我又有配置代理的需求,所以在很长一段时间里,我不得不使用 μTorrent。macOS 升级到 Catalina 之后便不再支持 32 位程序了,垃圾 μTorrent 又不提供 64 位版本,我只好再想别的办法了。

最简单的解决方案是使用 Proxifier,这个强大的工具支持在 macOS 和 Windows 上实现分应用代理。虽然这个功能在 Android 上很常见,但在桌面端还是很稀罕的。Proxifier 唯一的缺点是有点贵,当然,这不是它的问题,而是我的。

穷则思变。根据 Transmission 的 wiki

Transmission uses the libcurl library for http- and https-based tracker announces and scrapes. Transmission doesn't support proxies, but libcurl itself honors a handful of environment variables to customize its proxy behavior.

这意味着如果我们放弃 GUI 版本,转而使用 transmission-daemon + Web UI,就可以通过设置环境变量的方式给 Transmission 配置代理:

export ALL_PROXY="socks5://127.0.0.1:1080"
./transmission-daemon

我使用的是 socks5 代理,请酌情修改。

通常情况下,我们很少手动启停 transmission-daemon,而是交给一些系统管理工具,以实现开机自启等功能,这就需要一些技巧。

macOS

macOS 的 init 程序是 launchd,使用 launchctl 管理服务。当然,通常我们会使用 brew services,它封装了 launchctl。我们可以修改 ~/Library/LaunchAgents/homebrew.mxcl.transmission-cli.plist 文件,来添加启动 Transmission 时的环境变量,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>homebrew.mxcl.transmission-cli</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/opt/transmission-cli/bin/transmission-daemon</string>
      <string>--foreground</string>
      <string>--config-dir</string>
      <string>/usr/local/var/transmission/</string>
      <string>--log-info</string>
      <string>--logfile</string>
      <string>/usr/local/var/transmission/transmission-daemon.log</string>
    </array>
    <key>KeepAlive</key>
    <dict>
      <key>NetworkState</key>
      <true/>
    </dict>
    <key>RunAtLoad</key>
    <true/>
+    <key>EnvironmentVariables</key>
+    <dict>
+      <key>ALL_PROXY</key>
+      <string>socks5://127.0.0.1:1080</string>
+    </dict>
  </dict>
</plist>

修改完成之后执行:

brew services reload transmission-cli
brew services restart transmission-cli

Linux

目前主流的 Linux 发行版都使用 systemd 作为 init 程序,使用 systemctl 管理服务。我们可以修改 /etc/systemd/system/transmission-daemon.service 文件,来添加启动 Transmission 时的环境变量,示例如下:

[Unit]
Description=Transmission BitTorrent Daemon
After=network.target

[Service]
User=debian-transmission
+ Environment=ALL_PROXY=socks5://127.0.0.1:1080
Type=notify
ExecStart=/usr/bin/transmission-daemon -f --log-error
ExecReload=/bin/kill -s HUP $MAINPID
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

修改完成之后执行:

sudo systemctl reload transmission-daemon.service
sudo systemctl restart transmission-daemon.service

Windows

没研究过,不知道咋整。反正 μTorrent 在 Windows 上凑合还能用。