Layanan Per-Pengguna

Layanan per-pengguna berguna untuk menjalankan proses secara otomatis atas nama pengguna tertentu, seperti:

  • Membuka SSH tunnel.
  • Menjalankan virtual machine.
  • Menjalankan daemon secara berkala.

Metode 1: runsvdir

Cara paling dasar adalah membuat layanan sistem yang menjalankan runsvdir sebagai pengguna tertentu.

Keterbatasan: Layanan ini dimulai saat boot, sehingga tidak memiliki akses ke sesi grafis atau session bus D-Bus pengguna.

Membuat Layanan

Buat direktori layanan /etc/sv/runsvdir-<username> dengan script run berikut (pastikan executable):

#!/bin/sh

export USER="<username>"
export HOME="/home/<username>"

groups="$(id -Gn "$USER" | tr ' ' ':')"
svdir="$HOME/service"

exec chpst -u "$USER:$groups" runsvdir "$svdir"

Script ini menggunakan chpst untuk menjalankan runsvdir sebagai pengguna yang ditentukan. Variabel $USER dan $HOME diekspor karena beberapa layanan membutuhkannya.

Jadikan executable lalu aktifkan:

chmod +x /etc/sv/runsvdir-<username>/run
ln -s /etc/sv/runsvdir-<username> /var/service/

Menambahkan Layanan Pengguna

Buat direktori layanan di home folder, lalu tambahkan service di sana:

mkdir -p ~/service
# Tambahkan layanan atau symlink ke direktori ini

Mengontrol Layanan

# Cek status semua layanan pengguna
sv status ~/service/*

# Restart layanan tertentu menggunakan path
sv restart ~/service/gpg-agent

# Atau gunakan SVDIR agar tidak perlu menulis path lengkap
SVDIR=~/service sv restart gpg-agent

Tambahkan export SVDIR=~/service di profil shell (~/.bashrc atau ~/.zshrc) agar tidak perlu menulisnya setiap saat.

Metode 2: turnstile

turnstile mendukung layanan per-pengguna yang dimulai bersama sesi pengguna, menggunakan backend runit atau dinit.

Lokasi Service Directory

Jika menggunakan backend runit, simpan layanan pengguna di:

~/.config/service/

Layanan yang Wajib Jalan Sebelum Login

Untuk memastikan layanan tertentu sudah berjalan sebelum proses login selesai, daftarkan di ~/.config/service/turnstile-ready/conf:

core_services="dbus foo"

File turnstile-ready dibuat otomatis oleh turnstile pada login pertama.

Berbagi Environment Variables

Untuk memberikan akses environment variable ke layanan pengguna, gunakan fitur envdir dari chpst. Di dalam service, gunakan variabel TURNSTILE_ENV_DIR:

exec chpst -e "$TURNSTILE_ENV_DIR" nama-program

Untuk memperbarui variabel di envdir bersama:

turnstile-update-runit-env DISPLAY XAUTHORITY FOO=bar BAZ=

Menjalankan D-Bus Session Bus

Untuk menjalankan D-Bus session bus sebagai layanan yang dikelola turnstile:

mkdir -p ~/.config/service/dbus
ln -s /usr/share/examples/turnstile/dbus.run   ~/.config/service/dbus/run
ln -s /usr/share/examples/turnstile/dbus.check ~/.config/service/dbus/check

Perbandingan Metode

Aspekrunsvdirturnstile
Mulai saatBoot sistemLogin pengguna
Akses sesi grafis❌ Tidak✅ Ya
Akses D-Bus session bus❌ Tidak✅ Ya (bisa dikonfigurasi)
Kompleksitas setupSederhanaLebih lengkap
Lokasi service~/service/~/.config/service/

@T4n-Labs · @Gh0sT4n