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.