Kök olmayan bir kullanıcı tarafından başlatılacak bir sistem hizmetini kullanıcı arka planı olarak nasıl ayarlarım?


20

Arch-linux sistemimdeki systemd kurulum ve kurulum işlemlerini yeni bitirdim (2012.09.07). Kaldırma initscripts(ve yapılandırma dosyalarını kaldırdım).

Yapmak istediğim kök olmayan bir kullanıcı tarafından başlatılıp durdurulabilen bir hizmet oluşturmak. Hizmet, rtorrent çalıştıran ayrılmış bir ekran oturumu başlatmaktır. Ancak, bu hizmeti ayarlamış olan sistemdeki her kullanıcının, belirli bir örnek için özel olarak başlatılmasını (etkin) başlatmasını istiyorum. Bir insan bunu nasıl yapacak?

Sistemin kullanıcı servislerini desteklediğini okuduğumu hatırlıyorum, ancak bunun nasıl kurulacağı ya da aradığım şeyle ilgili olup olmadığı hakkında herhangi bir bilgi bulamadım.

Sistem için kullandığım servis dosyası:

[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

GÜNCELLEME # 1 :

Buradaki ve buradaki man sayfalarını okuduktan sonra , sistemin nasıl daha iyi çalıştığını biliyorum. Özellikle User=ve WorkingDirectory=seçeneklerinin kullanılması, kullanıcının bir oturumda hizmetin başlatılmasına izin verir. Ancak sorun devam kullanıcı kendileri olmayanlar şeklinde kalır start, stop, enable, veya disablehizmet. Bir erişim engellendi hatası verilir systemctl.

GÜNCELLEME # 2 :

Öncelikle, sadeleştirmek ve systemd'nin kullanıcı oturumu (yine de tamamlanmamış) özelliğinin daha iyi kullanılması için sofar'ın kullanıcı oturumu-birimlerini kullandım ve yapılandırma tavsiyesine uydum.

DBus'un şu anki sürümünde (1.6.4-1) komut hatalarını DBUS_SESSION_BUS_ADDRESSkullanarak ortam değişkeninin anlamını ayarlamadığı bir hata varmış gibi görünüyor systemctl --user:

Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

Değişken şöyle görünmelidir:

DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"

nerede USERUID belirli bir kullanıcının UID olması gerekiyor.


Birinin kullanıcı başına ayrı bir servis dosyası oluşturabildiğini ve basitçe etkinleştirebileceğinin farkındayım. Bununla birlikte, yukarıda anlattığım gibi mümkün olup olmadığını bilmek istiyorum.
Hans

Yeterince adil sudo, kullanıcılar için basit bir kurulum yapabilir ve yukarıdaki yorumumda da belirtildiği gibi kendi servis dosyalarını kontrol etmelerini sağlayabilirim. Ancak bu çözüm, kullanıcının diğer birçok hizmeti de kontrol etmesine izin verir ...
Hans

Bu, eğer sudobelgelerini okumuş olsaydınız, sudoers (5) , bir komutun argümanlarını kısıtlamak için birçok örneğe sahipti .
Grawity

Yanıtlar:


19

systemd normalde sıradan kullanıcıların sistem servislerini başlatmalarına izin vermez. Polkit üzerinden erişim sağlamayı desteklese de, bu bölüm hala biraz eksiktir ve yalnızca belirli bir hizmete izin veremezsiniz.

Rtorrent aslında bir sistem hizmeti olmadığından ve her kullanıcının kendi rtorrent örneğine sahip olmasını istediğiniz için, systemd'nin "kullanıcı" modunu deneyin.

Giriş user@<uid>.serviceyaptığınızda, sistem sizin için bir sistem birimi başlatacak ve sistemd'in ayrı bir "--user" örneğini başlatacak. Yeni kullanıcı systemd (ile başlayan birim dosyaları okuyacak default.targetitibaren) ~/.config/systemd/user/, /etc/systemd/user/ve /usr/lib/systemd/user/.


1
Şükürler olsun, temelde eksik olan buydu. Bununla birlikte, aynı zamanda bir DBus problemi olduğu da ortaya çıkıyor: dbuse'da DBUS_SESSION_BUS_ADDRESSbelirli bir kullanıcı için doğru global değişkeni ayarlamayan bir hata var gibi görünüyor , bu yüzden systemctl kullanıcı oturumuna erişemiyor, bizim hatalarımızı yapıyor. Bir kez bu küçük sorunu çözdüğümde her şey çok güzel çalışıyor!
Hans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.