Pertama di 2020

 Widya Walesa  |  2020/01/10 16:19:42 WIB  |  2020/01/22 23:16:14 WIB

Setelah hiatus dalam waktu yang lumayan lama,

SamW41l muncul kembali di tahun 2020.

Mohon tunggu tulisan2 berikutnya.

WLSBuild Update: LXQt 0.11.0

 Widya Walesa  |  2016/09/26 10:07:02 WIB  |  2016/09/26 10:22:11 WIB

lxqt-logoKabar ini buat pengguna Slackware yang ingin memakai desktop ringan berbasis Qt5, LXQt. Saya telah menyusun skrip SlackBuild untuk LXQt yang bisa diunduh di:

https://github.com/w41l/wlslxqt/releases/tag/wlslxqt-0.11.0

Harap diingat bahwa terdapat beberapa berkas yang perlu dibersihkan tetapi tidak mengganggu proses pembangunan paket LXQt. Beberapa berkas tersebut adalah daftar2 paket dari instalasi LXQt versi lama dan daftar kebutuhan jika anda ingin menggunakan #KWIN #KDE5 sebagai window manager.

Sila dikloning, dicoba, dan kalau perlu diubah jika ada kesalahan atau tidak sesuai dengan kebutuhan anda, serta jangan lupa untuk melaporkannya kepada saya agar dapat diperbaiki untuk rilis berikutnya.

Terima kasih dan selamat mencoba.

GDM Dapat Berjalan Di Slackware

 Widya Walesa  |  2016/08/01 00:27:09 WIB  |  2020/08/14 09:29:44 WIB

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 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.

Elogind dan Cgroup di Slackware 14.2

 Widya Walesa  |  2016/07/31 14:11:50 WIB  |  2016/08/01 01:18:48 WIB

gnome-logo-hitamPada tulisan saya sebelumnya, WLSBuild Untuk GNOME 3.18, sudah terbukti bahwa GNOME3 dapat berjalan normal di Slackware 14.2. Yang belum saya tulis adalah bagaimana cara saya menjalankan servis logind dari elogind yang merupakan percabangan dari pengembangan systemd untuk sistem yang membutuhkan komponen logind tetapi tidak ingin memasang systemd. Sila kunjungi website pengembang elogind untuk informasi lebih lanjut mengenai elogind di https://github.com/wingo/elogind.

Logind merupakan kebutuhan yang wajib ada untuk gdm GNOME3. Logind merupakan sebuah servis yang akan dijalankan untuk menyediakan informasi dan fasilitas manajemen sesi user melalui servis dbus. Yang saya baru tahu adalah, systemd adalah sebuah init sistem yang mengontrol servis melalui cgroup. Anda tidak dapat menjalankan systemd di sistem yang tidak memiliki fasilitas cgroup. Apa itu cgroup? Sila kunjungi website RedHat ini https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html.

Dalam sistem yang tidak menggunakan systemd, misalnya Slackware, tidak akan ada mount point untuk systemd yang seharusnya berada /sys/fs/cgroup/systemd. Kontrol servis logind seharusnya berada di dalam mount point tersebut. Hal ini menyebabkan servis logind tidak dapat berjalan. Jadi untuk menyelesaikan permasalahan ini, saya menjalankan skrip untuk menautkan elogind ke /sys/fs/cgroup/elogind. Saya letakkan skrip tersebut di dalam rc.S di baris setelah mount cgroup:

# Mount Control Groups filesystem interface:
if grep -wq cgroup /proc/filesystems ; then
  if [ -d /sys/fs/cgroup ]; then
    # See linux-*/Documentation/cgroups/cgroups.txt (section 1.6)
    # Check if we have some tools to autodetect the available cgroup controllers
    if [ -x /bin/cut -a -x /bin/tail ]; then
      # Mount a tmpfs as the cgroup filesystem root
      mount -t tmpfs -o mode=0755 cgroup_root /sys/fs/cgroup
      # Autodetect available controllers and mount them in subfolders
      controllers="$(/bin/cut -f 1 /proc/cgroups | /bin/tail -n +2)"
      for i in $controllers; do
        mkdir /sys/fs/cgroup/$i
        mount -t cgroup -o $i $i /sys/fs/cgroup/$i
      done
      unset i controllers
      # Add elogind cgroup controller
      mkdir -p /sys/fs/cgroup/elogind
      mount -t cgroup -o none,name=elogind cgroup /sys/fs/cgroup/elogind
    else
      # We can't use autodetection so fall back mounting them all together
      mount -t cgroup cgroup /sys/fs/cgroup
    fi
  else
    mkdir -p /dev/cgroup
    mount -t cgroup cgroup /dev/cgroup
  fi
fi

Hasilnya adalah seperti ini:

root@wls-lm:~# ls -lha /sys/fs/cgroup/
total 0
drwxr-xr-x 15 root root 300 Jul 31 13:50 ./
drwxr-xr-x  9 root root   0 Jul 31  2016 ../
dr-xr-xr-x  2 root root   0 Jul 31  2016 blkio/
drwxr-xr-x  2 root root  60 Jul 31 13:50 cgmanager/
dr-xr-xr-x  2 root root   0 Jul 31  2016 cpu/
dr-xr-xr-x  2 root root   0 Jul 31  2016 cpuacct/
dr-xr-xr-x  2 root root   0 Jul 31  2016 cpuset/
dr-xr-xr-x  2 root root   0 Jul 31  2016 devices/
dr-xr-xr-x  2 root root   0 Jul 31  2016 elogind/
dr-xr-xr-x  2 root root   0 Jul 31  2016 freezer/
dr-xr-xr-x  2 root root   0 Jul 31  2016 memory/
dr-xr-xr-x  2 root root   0 Jul 31  2016 net_cls/
dr-xr-xr-x  2 root root   0 Jul 31  2016 net_prio/
dr-xr-xr-x  2 root root   0 Jul 31  2016 perf_event/
dr-xr-xr-x  2 root root   0 Jul 31  2016 pids/
root@wls-lm:~# ls -lha /sys/fs/cgroup/elogind/
total 0
dr-xr-xr-x  2 root root   0 Jul 31 14:07 ./
drwxr-xr-x 15 root root 300 Jul 31 13:50 ../
-rw-r--r--  1 root root   0 Jul 31 14:07 cgroup.clone_children
-rw-r--r--  1 root root   0 Jul 31 13:54 cgroup.procs
-r--r--r--  1 root root   0 Jul 31 14:07 cgroup.sane_behavior
-rw-r--r--  1 root root   0 Jul 31 13:54 notify_on_release
-rw-r--r--  1 root root   0 Jul 31 13:54 release_agent
-rw-r--r--  1 root root   0 Jul 31 13:50 tasks

Setelah itu servis logind dapat dijalankan oleh dbus tiap kali GNOME3 saya jalankan. Ini adalah output dari debug dbus untuk servis logind:

root@wls-lm:~# gdbus introspect --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1
node /org/freedesktop/login1 {
  interface org.freedesktop.DBus.Peer {
    methods:
      Ping();
      GetMachineId(out s machine_uuid);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Introspectable {
    methods:
      Introspect(out s data);
    signals:
    properties:
  };
  interface org.freedesktop.DBus.Properties {
    methods:
      Get(in  s interface,
          in  s property,
          out v value);
      GetAll(in  s interface,
             out a{sv} properties);
      Set(in  s interface,
          in  s property,
          in  v value);
    signals:
      PropertiesChanged(s interface,
                        a{sv} changed_properties,
                        as invalidated_properties);
    properties:
  };
  interface org.freedesktop.login1.Manager {
    methods:
      GetSession(in  s arg_0,
                 out o arg_1);
      GetSessionByPID(in  u arg_0,
                      out o arg_1);
      GetUser(in  u arg_0,
              out o arg_1);
      GetUserByPID(in  u arg_0,
                   out o arg_1);
      GetSeat(in  s arg_0,
              out o arg_1);
      ListSessions(out a(susso) arg_0);
      ListUsers(out a(uso) arg_0);
      ListSeats(out a(so) arg_0);
      ListInhibitors(out a(ssssuu) arg_0);
      @org.freedesktop.systemd1.Privileged("true")
      CreateSession(in  u arg_0,
                    in  u arg_1,
                    in  s arg_2,
                    in  s arg_3,
                    in  s arg_4,
                    in  s arg_5,
                    in  s arg_6,
                    in  u arg_7,
                    in  s arg_8,
                    in  s arg_9,
                    in  b arg_10,
                    in  s arg_11,
                    in  s arg_12,
                    in  a(sv) arg_13,
                    out s arg_14,
                    out o arg_15,
                    out s arg_16,
                    out h arg_17,
                    out u arg_18,
                    out s arg_19,
                    out u arg_20,
                    out b arg_21);
      @org.freedesktop.systemd1.Privileged("true")
      ReleaseSession(in  s arg_0);
      ActivateSession(in  s arg_0);
      ActivateSessionOnSeat(in  s arg_0,
                            in  s arg_1);
      LockSession(in  s arg_0);
      UnlockSession(in  s arg_0);
      LockSessions();
      UnlockSessions();
      KillSession(in  s arg_0,
                  in  s arg_1,
                  in  i arg_2);
      KillUser(in  u arg_0,
               in  i arg_1);
      TerminateSession(in  s arg_0);
      TerminateUser(in  u arg_0);
      TerminateSeat(in  s arg_0);
      SetUserLinger(in  u arg_0,
                    in  b arg_1,
                    in  b arg_2);
      AttachDevice(in  s arg_0,
                   in  s arg_1,
                   in  b arg_2);
      FlushDevices(in  b arg_0);
      PowerOff(in  b arg_0);
      Reboot(in  b arg_0);
      Suspend(in  b arg_0);
      Hibernate(in  b arg_0);
      HybridSleep(in  b arg_0);
      CanPowerOff(out s arg_0);
      CanReboot(out s arg_0);
      CanSuspend(out s arg_0);
      CanHibernate(out s arg_0);
      CanHybridSleep(out s arg_0);
      Inhibit(in  s arg_0,
              in  s arg_1,
              in  s arg_2,
              in  s arg_3,
              out h arg_4);
    signals:
      SessionNew(s arg_0,
                 o arg_1);
      SessionRemoved(s arg_0,
                     o arg_1);
      UserNew(u arg_0,
              o arg_1);
      UserRemoved(u arg_0,
                  o arg_1);
      SeatNew(s arg_0,
              o arg_1);
      SeatRemoved(s arg_0,
                  o arg_1);
      PrepareForShutdown(b arg_0);
      PrepareForSleep(b arg_0);
    properties:
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly as KillOnlyUsers = [];
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly as KillExcludeUsers = ['root'];
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly b KillUserProcesses = false;
      readonly b IdleHint = true;
      readonly t IdleSinceHint = 0;
      readonly t IdleSinceHintMonotonic = 0;
      readonly s BlockInhibited = '';
      readonly s DelayInhibited = '';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly t InhibitDelayMaxUSec = 5000000;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HandlePowerKey = 'poweroff';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HandleSuspendKey = 'suspend';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HandleHibernateKey = 'hibernate';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HandleLidSwitch = 'suspend';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s HandleLidSwitchDocked = 'ignore';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly t HoldoffTimeoutUSec = 30000000;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly s IdleAction = 'ignore';
      @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
      readonly t IdleActionUSec = 1800000000;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
      readonly b PreparingForShutdown = false;
      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
      readonly b PreparingForSleep = false;
  };
};

Mudah-mudahan dapat membantu

WLSBuild Untuk GNOME 3.18

 Widya Walesa  |  2016/07/30 21:49:43 WIB  |  2020/08/14 13:39:01 WIB

gnome-logo-hitamSetelah menunggu lama, akhirnya wlsbuild untuk GNOME3 bisa saya perbarui ke versi 3.18. Hal ini dimungkinkan karena Slackware 14.2 sudah mengikutsertakan gtk+3 versi 3.18.9 dalam instalasi standarnya. Beberapa dependensi dari GNOME 3.18 juga telah menjadi bagian internal dari Slackware 14.2. Artinya jika anda ingin menggunakan wlsbuild gnome3 3.18 milik saya, sila gunakan instalasi standar dari Slackware 14.2.

Perubahan di dalam daftar SBo juga semakin memudahkan instalasi GNOME 3.18. Banyak paket yang sebelumnya adalah dependensi internal dari saya sekarang sudah tersedia di SBo. Tambahan paket SBo yang merupakan dependensi GNOME 3.18 dapat dilihat dalam daftar berikut ini:

python3
py3cairo
krb5
cracklib
libpwquality
avahi
gssdp
gupnp
rarian
exempi
liboauth
perl-xml-twig
perl-net-dbus
libunique3
libgtop
vala
vte3
colord
colord-gtk
glade
gtksourceview3
libburn
libisofs
libisoburn
libgksu
gksu
gob2
libchewing
gnome-commmon
libgee1
json-glib
libskk
ibus-skk
libsunpinyin
ibus-sunpinyin
ibus-unikey
libnice
farstream
telepathy-glib
telepathy-farstream
cantarell-fonts
rest
webkit2gtk
yelp-xsl
yelp-tools
yelp
evince
seahorse

Untuk bagian dependensi internal saya menambahkan wayland, elogind dan ibus beserta subpaketnya (yang sebelumnya ada di SBo). Sementara ini wayland masih hanya sebatas dependensi untuk paket gdm. Artinya saya belum membangun ulang paket xorg-server milik Slackware dengan dukungan wayland. Jadi jika anda mencoba menjalankan gdm layar anda pasti akan berkedip karena gdm secara default akan mencoba menjalankan wayland sebagai display server, bukan xorg. Hal ini dapat menyebabkan input user terkunci. Jadi bersabar dulu ya.

Berikut ini adalah cetakan layar dari GNOME 3.18 milik saya:

Tertarik untuk mencoba? Sila kloning wlsbuild untuk GNOME 3.18 di github saya: https://github.com/w41l/gnome