Saya baru saja menyelesaikan proses instalasi dan pengaturan systemd pada sistem arch-linux saya (2012.09.07). Saya mencopot pemasangan initscripts
(dan menghapus file konfigurasi).
Yang ingin saya lakukan adalah membuat layanan yang dapat dimulai dan dihentikan oleh pengguna non-root. Layanan ini untuk memulai sesi layar terpisah menjalankan rtorrent. Namun saya ingin setiap pengguna pada sistem yang telah mengatur layanan ini untuk memulai (diaktifkan) untuk memiliki contoh khusus dimulai untuk mereka secara khusus. Bagaimana cara melakukan ini?
Saya ingat membaca bahwa systemd mendukung contoh layanan pengguna, namun saya tidak dapat menemukan informasi tentang cara mengatur ini, atau apakah itu berkaitan dengan apa yang saya cari.
File layanan yang saya gunakan untuk sistem:
[Unit]
Description=rTorrent
[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent
PEMBARUAN # 1 :
Setelah membaca halaman manual di sini dan di sini , saya mengerti bagaimana systemd bekerja sedikit lebih baik. Khususnya bahwa menggunakan opsi User=
dan WorkingDirectory=
memungkinkan layanan untuk dimulai pada sesi pengguna. Namun masalah masih tetap bahwa pengguna sendiri tidak bisa start
, stop
, enable
, atau disable
layanan. Sebuah Akses ditolak kesalahan diberikan oleh systemctl
.
PEMBARUAN # 2 :
Pertama, untuk penyederhanaan dan untuk penggunaan yang lebih baik dari sesi pengguna systemd (masih agak tidak lengkap), saya menggunakan unit sesi pengguna-sofar dan mengikuti saran konfigurasi.
Tampaknya ada bug dalam versi DBus saat ini (1.6.4-1) di mana ia tidak mengatur DBUS_SESSION_BUS_ADDRESS
makna variabel lingkungan menggunakan systemctl --user
kesalahan perintah dengan:
Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Variabel akan terlihat seperti ini:
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"
di mana USERUID perlu menjadi UID dari pengguna yang diberikan.
sumber
sudo
untuk pengguna dan meminta mereka, sebagaimana disebutkan dalam komentar saya di atas, mengontrol file layanan mereka sendiri. Namun solusi ini akan memungkinkan pengguna untuk mengontrol sebagian besar layanan lainnya juga ...sudo
dokumentasi - sudoers (5) memiliki banyak contoh untuk membatasi argumen perintah.Jawaban:
systemd biasanya tidak memungkinkan pengguna biasa untuk memulai layanan sistem. Meskipun mendukung memberikan akses melalui polkit, bagian itu masih kurang, dan Anda belum dapat mengizinkan hanya satu layanan tertentu.
Karena rtorrent sebenarnya bukan layanan sistem, dan karena Anda ingin setiap pengguna memiliki instance rtorrent sendiri, bereksperimenlah dengan mode "pengguna" systemd.
Ketika Anda masuk, sistem akan memulai
user@<uid>.service
unit sistem untuk Anda, yang akan meluncurkan instance "--user" terpisah dari systemd. User-systemd baru akan membaca file unit (dimulai dengandefault.target
) dari~/.config/systemd/user/
,/etc/systemd/user/
dan/usr/lib/systemd/user/
.sumber
DBUS_SESSION_BUS_ADDRESS
untuk pengguna tertentu, jadi systemctl tidak dapat mengakses sesi pengguna, itu kesalahan kami. Setelah saya menemukan masalah kecil ini, semuanya berjalan dengan baik!