|
| 1 | +# Devlog Entry 04 — Qtile Installation |
| 2 | + |
| 3 | +**Date**: 2025-June-08 |
| 4 | +**Author**: Emile Avoscan |
| 5 | +**Entry ID**: #04 |
| 6 | +**Target Version**: 0.2.0 |
| 7 | + |
| 8 | +### Objective |
| 9 | + |
| 10 | +Install and configure the Qtile window manager on a fresh AlmaLinux 9 minimal install, integrating LightDM as the display manager and ensuring a reproducible, automated script. |
| 11 | + |
| 12 | +### 🛠 Steps Taken |
| 13 | + |
| 14 | +1. **Repository preparation** |
| 15 | + * Enabled `baseos`, `appstream`, `crb`, `extras`. |
| 16 | + * Installed EPEL (`epel-release`). |
| 17 | + * Imported and enabled RPM Fusion (free + non-free) with GPG keys. |
| 18 | +2. **X11 & LightDM setup** |
| 19 | + * Installed `base-x` group, `lightdm`, and `lightdm-gtk-greeter`. |
| 20 | + * Applied cosmetic fix: created `/etc/rc.d/rc.local` and made it executable to silence systemd generator warnings. |
| 21 | + * Enabled `lightdm` service and set default target to `graphical.target`. |
| 22 | +3. **Python environment** |
| 23 | + * Installed Python 3.11 and development tools (`python3.11-devel`, `pip`, `setuptools`, `gcc`, `pkg-config`, `libffi-devel`). |
| 24 | + * Managed multiple Python versions side-by-side, preserving system Python 3.9. |
| 25 | +4. **C library dependencies** |
| 26 | + * Installed XCB, X11, Cairo/Pango, GLib/GObject introspection, and DBus devel headers (`xcb-util-devel`, `cairo-gobject-devel`, `gobject-introspection-devel`, etc.). |
| 27 | +5. **Python bindings & Qtile** |
| 28 | + * Upgraded `pip` under Python 3.11. |
| 29 | + * Installed `xcffib`, `cairocffi`, `pangocairocffi`, `dbus-python`. |
| 30 | + * Pinned `PyGObject==3.50.1` for GLib 2.68 compatibility. |
| 31 | + * Installed Qtile (`qtile`) system-wide for Python 3.11. |
| 32 | +6. **Session file & automation** |
| 33 | + * Created `/usr/share/xsessions/qtile.desktop` with `Exec=dbus-run-session qtile start`. |
| 34 | + * Developed a comprehensive `installation.sh` script: she-bang, `set -e`, root-check, non-interactive flags, grouping of commands, reboot prompt. |
| 35 | +7. **Testing & validation** |
| 36 | + * Verified `which qtile`, version output, and PATH resolution. |
| 37 | + * Conducted manual TTY test (`dbus-run-session qtile start`). |
| 38 | + * Confirmed LightDM login loop resolved by using `Exec=qtile start`. |
| 39 | + * Tested `installation.sh` on a fresh AlmaLinux 9.6 minimal installation. |
| 40 | +8. **Documentation** |
| 41 | + * Modified all the documentation of the project to reflect the changes. |
| 42 | + |
| 43 | +### 🐞 Challenges & Errors |
| 44 | + |
| 45 | +* **Package naming differences**: RHEL-style `xcb-util-devel`, `dbus-devel` instead of upstream names. |
| 46 | +* **Python version mismatch**: Qtile 0.31+ requires Python 3.10+ (PEP 604 syntax) → installed Python 3.11. |
| 47 | +* **GIR version mismatch**: PyGObject 3.52+ requires GIRepository 2.0 → pinned PyGObject 3.50.1. |
| 48 | +* **Missing headers**: `cairo-gobject.h` fixed by installing `cairo-gobject-devel`. |
| 49 | +* **User-site vs. system-site pip confusion**: module import errors resolved by system-wide `pip install` under Python 3.11 and PATH adjustments. |
| 50 | +* **LightDM session misconfiguration**: initial `Exec=python3.11 -m qtile start` failed under LightDM’s sanitized environment → simplified to `dbus-run-session qtile start`. |
| 51 | + |
| 52 | +### 💡 Reflections |
| 53 | + |
| 54 | +* **Dependency management** on RHEL-based distros requires deep understanding of DNF group names, repository scopes, and package aliasing. |
| 55 | +* **Python ecosystem** on enterprise distributions often lags; side-by-side installations are essential for modern Python apps. |
| 56 | +* **Automation** must handle edge cases (SELinux, rc-local warnings, display‐manager quirks) to be truly reproducible. |
| 57 | +* **Persistence** and iterative debugging paid off—complex failures became solvable steps rather than blockers. |
0 commit comments