2015-12-08 13 views
13

Sistem başlatmayla başlamak istediğim bir hizmetim var. Bunun için şablon olarak ap @ .service tanımı oluşturdum, çünkü çok sayıda örnek olabilirdi. Kök systemd tanımlanmıştırSudo su - myuser'dan sonra 'systemctl --user' kullanarak bir kullanıcı sistemini kontrol edebilir miyim?

, bu iyi çalışıyor ve başlar ve sistemle hizmet durdurur. Hizmet örneği, beklendiği gibi systemctl enable [email protected] ile yüklenir. Kök ayrıca hizmeti sorunsuz bir şekilde başlatıp durdurabilir. Servis, kullanıcı tarafından kontrol edilen kendi hesabımda (myuser) çalışır, kullanıcı @ myuser, ap @ .service şablonunda kontrol edilir.

Ama kullanıcı 'myuser' sistem güvenliğini tehlikeye atmadan, başlangıç ​​ve kendi hizmetini durdurmak isterler.

Bir kullanıcı systemd kullanarak geçiş ve loginctl enable-linger myuser ile kalıcı sağladı. Daha sonra ~ myuser/.config/systemd/user dizininde tanımlanan hizmeti etkinleştiririm. Servis şimdi tasarlandığı gibi sistemle başlıyor ve temiz duruyor. Bir terminale 'myuser' olarak girersem systemctl --user start [email protected] ve systemctl --user stop [email protected] her ikisi de mükemmel çalışır.

Ancak, farklı bir kullanıcı (kullanıcı2) olarak oturum açıp bir terminalde sudo su - myuser gerçekleştirirseniz, systemctl --user komutları artık "D-Bus bağlantısı alınamadı: böyle bir dosya veya dizin yok" hata iletisiyle başarısız oluyor.

nasıl kullanıcıyı geçmek için bir sudo su - myuser komuta sonra işe systemctl --user etkinleştirebilirim?

+0

CWD'niz hala diğer kullanıcının ana dizini mi? Çağıran kullanıcının geçerli dizini görmesi için izninin olmaması durumunda, bazı yardımcı programların sorunları vardır. – Dave

+0

Merhaba Dave ... ev dizini, - tarafından sudo komutunda zorlandı. CWD, yeni kullanıcının ana dizinine değişti. – NeilCasey

+0

Ah Tamam. Beni görmezden gelin. – Dave

cevap

13

Diğer terimleri kullanarak farklı terimleri kullanarak başka bir sitede yanıt buldum.

Gerekli çözümler, kullanıcıya bilgi için doğru DBUS'a ulaşması için bilgi sağlamaktır. systemctl --user çalıştırmadan önce kabuk şu ortam değişkenleri ekleyerek

, DBUS sorunu ortadan kaldırılır ve systemctl doğru çalışır.
export XDG_RUNTIME_DIR="/run/user/$UID" 
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" 

DBUS_SESSION_BUS_ADDRESS Sudo kabuk içinde mevcut olduğundan emin olmak için, bir hedef kimliği arasında ~/.bash_profile Ortam değişkenlerini ilave edildi. Bu, doğru ortamı oluşturmak için giriş kabuğunun ( sudo su - myuser veya sudo -l myuser) oluşturulmasını gerektirir.

Alternatif olarak, ~/.bashrc çevre değişkeninde oluşturulmasını ekleyin (ya da diğer gövdeler için eşdeğeri). Çevre tüm kabuk yaratımları için yeniden oluşturulacak.

İlgili konular