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.

mkaito
sumber

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
Gadai
sumber
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