Akhirnya saya berhasil menggunakan GDM di Slackware 14.2. Permasalahan mengenai mogoknya servis gdm ternyata terkait dengan elogind dan pam. Ya, jangan lupa bahwa GNOME 3 mewajibkan pam. Jadi saya terpaksa memasang pam di Slackware. Saya juga baru tahu setelah melakukan debug pada servis gdm.
Setelah kemarin berhasil mengaktifkan servis logind dari elogind, saya mencoba untuk memperbaiki konfigurasi untuk gdm yang selalu mogok kerja. Jika dijalankan, gdm akan menyebabkan layar berkedip secara terus menerus tanpa ada perubahan tampilan di layar yang artinya gdm gagal menginisialisasi display server. Setelah mengaktifkan opsi debug pada custom.conf, diperoleh informasi seperti ini:
Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: start program: /usr/libexec/gdm-x-session "/usr/bin/gnome-session --autostart /usr/share/gdm/greeter/autostart --debug" Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: attempting to change state to SESSION_STARTED Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: opening session for program '/usr/libexec/gdm-x-session' Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: jumping to VT 7 Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: first setting graphics mode to prevent flicker Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: VT mode did not need to be fixed Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: session opened creating reply... Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: state SESSION_STARTED Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSession worker: watching pid 8412 Jul 31 18:52:09 wls-lm gdm: GdmSession: Emitting 'session-started' signal with pid '8412' Jul 31 18:52:09 wls-lm gdm: GdmDisplay: Greeter started Jul 31 18:52:09 wls-lm gdm-x-session: Enabling debugging Jul 31 18:52:09 wls-lm gdm-x-session: Preparing auth file for X server Jul 31 18:52:09 wls-lm gdm-x-session: Running X server Jul 31 18:52:09 wls-lm gdm-x-session: Running session message bus Jul 31 18:52:09 wls-lm gdm: GdmManager: trying to register new display Jul 31 18:52:09 wls-lm gdm: GdmManager: Error while retrieving session id for sender: Error getting session id from systemd: No such file or directory Jul 31 18:52:09 wls-lm gdm-x-session: Could not register display: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: No display available Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: child (pid:8412) done (status:70) Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: uninitializing PAM Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: jumping to VT 1 Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: couldn't finalize jump to VT 1: Interrupted system call Jul 31 18:52:09 wls-lm gdm-launch-environment]: GdmSessionWorker: state NONE Jul 31 18:52:09 wls-lm gdm: GdmSession: Emitting 'session-exited' signal with exit code '70' Jul 31 18:52:09 wls-lm gdm: GdmSession: stopping conversation gdm-launch-environment Jul 31 18:52:09 wls-lm gdm: GdmSessionWorkerJob: Stopping job pid:8409 Jul 31 18:52:09 wls-lm gdm: GdmCommon: sending signal 15 to process 8409 Jul 31 18:52:09 wls-lm gdm: GdmDisplay: Greeter exited: 70 Jul 31 18:52:09 wls-lm gdm-launch-environment]: Worker finished
Ternyata gdm tidak mendapatkan ijin untuk mengaktifkan display server. Setelah ditelusuri, ternyata pam-lah yang tidak mengijinkannya. Mengapa? Karena ada elogind. Huwehehehehe, lagi-lagi dia yang menjadi biang :-D .
Jadi begini, setelah ada servis logind maka semua kontrol terhadap sesi user akan diatur oleh logind. User gdm yang menjadi pemilik servis gdm juga harus menggunakan servis logind untuk dapat mengakses dan mengaktifkan sesi display server. Tetapi sebagai servis untuk user lainnya (saya misalnya), gdm juga berkomunikasi dengan pam untuk masalah otentikasi user. Nah, namanya juga barang baru, saya tidak tahu bahwa konfigurasi pam.d untuk gdm (terutama gdm-launch-environment) harus diperbarui untuk mengakomodasi adanya elogind.
Saat dibangun, elogind mengaktifkan dukungan pam yang menghasilkan modul pam bernama pam_elogind.so. Sebagai kontrol sesi user, maka pam_elogind.so harus dipanggil melalui pam untuk mengaudit status sesi user. Saya menemukan jawaban dari permasalahan ini di diskusi dengan topik sama di sini.
Jadi saya harus memasukkan pam_elogind.so ke konfigurasi /etc/pam.d/system-session supaya pam dapat menjalankan tugasnya sebagai auditor:
# Begin /etc/pam.d/system-session session required pam_unix.so session optional pam_elogind.so # End /etc/pam.d/system-session
Berikutnya saya harus mengikutsertakan system-session ke dalam konfigurasi gdm seperti ini:
# Begin /etc/pam.d/gdm-launch-environment auth required pam_succeed_if.so audit quiet_success user = gdm auth required pam_env.so auth optional pam_permit.so account required pam_succeed_if.so audit quiet_success user = gdm account include system-account password required pam_deny.so session required pam_succeed_if.so audit quiet_success user = gdm -session optional pam_elogind.so session include system-session session optional pam_keyinit.so force revoke session optional pam_permit.so # End /etc/pam.d/gdm-launch-environment
Akhirnya gdm dapat berjalan dengan normal dan saya dapat login ke desktop gnome melalui gdm:
Perbaikan pada elogind dan pam untuk GNOME3 dari wlsbuild sudah saya unggah di github saya dengan commit 287663d. Pastikan untuk memperbarui wlsbuild gnome anda.