GDM Dapat Berjalan Di Slackware

Submitted by w41lf0x on Mon, 08/01/2016 - 00:27

gnome-logo-hitamAkhirnya 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 elogin, 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: https://mail.gnome.org/archives/gdm-list/2013-March/msg00016.html

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:
IMG_20160731_195622

Perbaikan pada elogind dan pam untuk GNOME3 dari wlsbuild sudah saya unggah di github saya dengan commit 287663d. Pastikan untuk memperbarui wlsbuild gnome anda.