我通过 PPA 安装了 Transmission,守护进程在启动时启动。我想更改运行守护进程的用户,因为我希望下载的文件与我的 XBMC 安装位于同一个用户下,但我似乎找不到在哪里编辑它。
守护进程使用 upstart,因此不存在哪个用户运行它的信息/etc/init.d/transmission-daemon
,也不存在/etc/default/transmission-daemon
关于用户的任何信息
我正在使用这些 ppa 进行传输:
/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list:deb //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main
/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list:deb-src //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main
/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list.save:deb //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main
/etc/apt/sources.list.d/transmissionbt-ppa-quantal.list.save:deb-src //ppa.launchpad.net/transmissionbt/ppa/ubuntu quantal main
答案1
由于所有其他答案都是针对 Ubuntu pre-systemd 的,这里是针对 Ubuntu 16.04 的更新指南(来自 sensecodons.com)。本质上,为“transmission-daemon.service”创建一个补充单元来更改设置User=...
,然后更新该用户的“~/.config/transmission-daemon/settings.json”文件。
停止传输(如果已在运行)。
sudo systemctl stop transmission-daemon
创建用于传输的补充文件目录:
sudo mkdir -p /etc/systemd/system/transmission-daemon.service.d
创建一个名为“run-as-user.conf”的新补充文件。
sudo vi /etc/systemd/system/transmission-daemon.service.d/run-as-user.conf
并在其中输入以下文本。
[Service] User=codon
显然,使用您想要的用户名而不是“codon”。
告诉 systemd 重新加载其单元。
sudo systemctl daemon-reload
接下来,您将需要启动然后停止传输以使其~/.config/transmission-daemon/
为您的新用户创建目录。
开始传输,然后停止传输。
sudo systemctl start transmission-daemon; sudo systemctl stop transmission-daemon
您现在应该在用户的主目录中拥有以下目录:
.config/transmission-daemon/
从这里,您应该能够~/.config/transmission-daemon/settings.json
正常更新。
完成后,开始传输。
sudo systemctl start transmission-daemon
答案2
假设:
- 您使用了这个 PPA:
ppa:transmissionbt/ppa
- 您想使用用户:
some_user
和组:运行 Transmissionsome_group
对于 System V (SysV) init 系统(例如:Ubuntu 10.04 LTS):
停止传输守护进程:
sudo service transmission-daemon stop
编辑 init.d 脚本
sudo nano /etc/init.d/transmission-daemon
...并更改
USER=debian-transmission
为USER=some_user
对于 Upstart 初始化系统(例如:Ubuntu 14.04 LTS):
停止传输守护进程:
sudo service transmission-daemon stop
编辑初始化脚本:
sudo nano /etc/init/transmission-daemon.conf
...并编辑如下:
改成
setuid debian-transmission
setuid some_user
并更改
setgid debian-transmission
为setgid some_group
对于 systemd init 系统(例如:Ubuntu 16.04 LTS):
停止传输守护进程:
sudo systemctl stop transmission-daemon.service
创建 systemd override.conf 文件:
sudo systemctl edit transmission-daemon.service
...并编辑如下:
[Service] User= User=some_user Group= Group=some_group
笔记:
这将创建以下文件:
/etc/systemd/system/transmission-daemon.service.d/override.conf
空变量赋值(例如
User=
:)用于清除/重置现有变量的值。这似乎是使用 systemd 单元文件的直接替换时所做的工作。请参阅:示例 2. 覆盖供应商设置systemd.unit 手册:“...对于插入文件,如果想要从解析为列表(而不是依赖项)的设置中删除条目,...需要先清除列表,然后重新添加除要删除的条目之外的所有条目...”
Systemd 重新加载并启动传输守护进程:
sudo systemctl daemon-reload sudo systemctl start transmission-daemon.service
注意:与 Upstart 和 SysV init 系统不同,transmission-daemon 将所有配置和设置保存在
/home/some_user/.config/transmission-daemon/
而不是/etc/transmission-daemon/settings.json
和/var/lib/transmission-daemon
注释和参考
/etc/default/transmission-daemon
/etc/init.d/transmission-daemon
仅由 Upstart 脚本( )和 SysV 脚本( )使用/etc/init/transmission-daemon.conf
,因此如果您使用 Systemd init 系统,那么您可以忽略所有这些文件。
关于权限和包更新的可选/附加信息:
注意:以下内容可能仅适用于 Upstart 和 SysV init 系统
更改 Transmission 配置文件的权限
如果您没有使用 systemd init 系统,那么您现在可能需要将 Transmission 配置文件的权限从user=debian-transmission
更改为user=some_user
并将 从 更改group=debian-transmission
为group=some_group
。
检查您的 Transmission 配置目录的位置。您可以在文件中找到
/etc/default/transmission-daemon
如下行:CONFIG_DIR="/var/lib/transmission-daemon/info"
假设您的配置目录是
/var/lib/transmission-daemon/info
,更改配置文件的所有权:sudo chown some_user:some_group /var/lib/transmission-daemon/downloads sudo chown some_user:some_group /var/lib/transmission-daemon/info sudo chown some_user:some_group /var/lib/transmission-daemon/info/blocklists sudo chown some_user:some_group /var/lib/transmission-daemon/info/dht.dat sudo chown some_user:some_group /var/lib/transmission-daemon/info/resume sudo chown some_user:some_group /var/lib/transmission-daemon/info/torrents
更改其他文件的所有权:
sudo chown :some_group /etc/transmission-daemon sudo chown some_user:some_group /etc/transmission-daemon/settings.json
额外信息(更新传输):
因为您更改了默认用户,您可能会发现使用存储库更新 Transmission(例如:apt-get upgrade)后,Transmission 守护进程不再运行。
运行“sudo apt-get -f install”出现以下错误:
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up transmission-daemon (2.84-0ubuntu0.12.04.1) ...
* Starting bittorrent daemon transmission-daemon
invoke-rc.d: initscript transmission-daemon, action "start" failed.
dpkg: error processing transmission-daemon (--configure):
subprocess installed post-installation script returned error exit status 255
Errors were encountered while processing:
transmission-daemon
E: Sub-process /usr/bin/dpkg returned an error code (1)
守护进程无法启动的原因(“invoke-rc.d: initscript transmission-daemon,操作“start”失败。”)是因为我们将权限从“debian-transmission”更改为“some_user”,更新后这些权限被重置。因此,要修复,只需执行以下操作:
停止守护进程并编辑配置文件:
sudo service transmission-daemon stop sudo nano /etc/init.d/transmission-daemon
...并更改
USER=some_user
为USER=debian-transmission
通过运行以下命令重新尝试修复更新:
sudo apt-get -f install
如果更新成功,Transmission 守护进程现在应该正在运行。您现在可以按照上述步骤再次更改用户/组。
答案3
这不是完整的故事。除了改变
setgid <groupname>
和
setuid <username>
在
/etc/init/transmission-daemon.conf
您还需要更改 transmission-daemon 配置文件的权限。否则它将无法将设置重写到此文件,并且守护进程将重新启动,直到 upstart 认为它有足够的机会(init:transmission-daemon 重生太快,已停止)
sudo chown <user>:<group> /etc/transmission-daemon/settings.json
sudo chown -R <user>:<group> /var/lib/transmission-daemon/
答案4
在使用 systemd 的系统上,您要编辑的文件实际上可能是:
/etc/systemd/system/multi-user.target.wants/transmission-daemon.service
后续编辑如下:
sudo systemctl daemon-reload