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=~/servicedi profil shell (~/.bashrcatau~/.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-readydibuat 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
| Aspek | runsvdir | turnstile |
|---|---|---|
| Mulai saat | Boot sistem | Login pengguna |
| Akses sesi grafis | ❌ Tidak | ✅ Ya |
| Akses D-Bus session bus | ❌ Tidak | ✅ Ya (bisa dikonfigurasi) |
| Kompleksitas setup | Sederhana | Lebih lengkap |
| Lokasi service | ~/service/ | ~/.config/service/ |