Mengelola unit systemd pengguna lain


10

Bisakah satu pengguna, atau mungkin melakukan root, mengontrol layanan systemd tingkat pengguna lain?

Saya sudah mencoba sudo -u <some user> systemctl --user restart <some service>, tapi itu mengeluh tentang dbus: Failed to get D-Bus connection: Connection refused.

Jawaban:


4

Saya memiliki masalah yang sama ketika saya login ke kotak gentoo saya dari jarak jauh melalui ssh. Dalam kasus saya ini karena variabel lingkungan XDG_RUNTIME_DIRdan DBUS_SESSION_BUS_ADDRESStidak ada. Jalankan perintah berikut dan coba lagi:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

Jika ini membantu, Anda bisa memasukkan perintah-perintah itu ke dalam .bashrc Anda. Saya kira pasti ada solusi yang lebih elegan daripada .bashrc tetapi itu tergantung pada distro Anda.

Di sinilah saya menemukan solusi itu.

Edit:

login sebagai root, saya berhasil berjalan systemctl --usersebagai pengguna lain menggunakan susebagai berikut:

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

atau menggunakan sudo(perhatikan, saya harus secara eksplisit menambahkan masing-masing pengguna UID (1000) ke jalur '/ run / user /', tetapi jika Anda menjalankannya dari skrip bash, Anda dapat menggunakan $ SUDO_UID sebagai gantinya):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

1
Aku punya itu /etc/profile.d/dbus.sh. Saya kira sudoperlu yang masuk daftar putih, karena membersihkan lingkungan secara default. Saya tidak yakin apakah itu hanya akan mentransfer dir runtime pengguna saat ini.
mkaito
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.