d2e11be430
Source-level verdict: no browser in the matrix has a code path to hand NV12 to the X server for plane scanout. Chromium ozone-x11 wires StubOverlayManager (ozone_platform_x11.cc:262); Brave 147 + chromium-fourier 149 inherit unchanged. Firefox WindowSurfaceX11 is RGB-only. The campaign's load-bearing hypothesis is structurally weakened — what the X11 cells will measure for browsers is KWin's per-frame RGB-recomposite cost, not the original "force-GL-composite of NV12" framing. mpv --vo=xv becomes the matrix's only direct test of the operator-supplied mechanism. Matrix updated: 12 cells -> 16 cells (+8 mpv VO sub-points). revert.log entries 1-5 capture all package + per-user state mutations from this turn (measurement tools, openbox, XFCE + xfwm4-no-comp pre-seed, firefox + AUR xtrace, XFCE rotation + touchscreen mapping); single SSH-driveable revert chain returns ohm to its pre-campaign 1169-package state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
484 lines
19 KiB
Plaintext
484 lines
19 KiB
Plaintext
# revert.log — campaign-installed state on ohm
|
||
|
||
This file lists every change this campaign made to ohm's *system
|
||
state* during Phase 0 inventory work that was done **purely for
|
||
testing and analysis**. To return ohm to the state it was in
|
||
before this campaign opened, run the "Revert" commands at the
|
||
bottom of this file in order.
|
||
|
||
This file is updated whenever the campaign installs a package or
|
||
mutates a sysctl/service/config. Closing the campaign without
|
||
reverting is a deliberate operator decision; if reverted, this
|
||
file is the authoritative record of what to undo.
|
||
|
||
Inherited state from the predecessor (`kwin_overlay_subsurface`)
|
||
is **not** in scope here — those carry-overs are documented in
|
||
`README.md` § "Carry-overs from predecessor (system state, not
|
||
data)" and would be reverted via that campaign's
|
||
`phase1_evidence/ohm_tooling_revert_log.md` instead.
|
||
|
||
---
|
||
|
||
## Entry 1 — 2026-05-03 ~09:20 CEST
|
||
|
||
**Trigger:** Phase 0 deliverables 2 + 4 (`x11_inventory_2026-05-03/inventory.md`)
|
||
identified missing measurement tools and the absence of a
|
||
non-compositing WM. Operator instructed: "fire the installs."
|
||
|
||
**Driven from:** `mfritsche@noether` over SSH to `ohm.fritz.box`,
|
||
passwordless `sudo` (verified before firing).
|
||
|
||
**Pre-install snapshot:** `pkglist.pre.txt` (1169 packages,
|
||
sha256 `fd72bcf6a7289d2f2dd6ce02706240006b534731540bf63f56ee9b666e7be68f`).
|
||
**Post-install snapshot:** `pkglist.post.txt` (1180 packages).
|
||
**Full pacman transaction log:** `pacman.install.log`.
|
||
|
||
### What was installed
|
||
|
||
Single transaction: `sudo pacman -Sy && sudo pacman -S --needed
|
||
xorg-xrandr xorg-xev xorg-xinput xorg-xwininfo xorg-xkill sysprof openbox`
|
||
|
||
| Package | Version | Reason |
|
||
|---|---|---|
|
||
| xorg-xrandr | 1.5.4-1 | explicit — RandR CLI for output/vblank probing |
|
||
| xorg-xev | 1.2.6-2 | explicit — per-window event capture |
|
||
| xorg-xinput | 1.6.4-2 | explicit — input-device probe (touchscreen confound) |
|
||
| xorg-xwininfo | 1.1.6-2 | explicit — get browser window geometry/wid |
|
||
| xorg-xkill | 1.0.7-1 | explicit — clean kill of stuck X clients between reps |
|
||
| sysprof | 50.0-2 | explicit — kernel perf alternative w/ flamegraph default |
|
||
| openbox | 3.6.1-14 | explicit — non-compositing WM for the without-KWin matrix cell |
|
||
| libadwaita | 1:1.9.0-1 | dep of sysprof |
|
||
| libdex | 1.1.0-1 | dep of sysprof |
|
||
| libpanel | 1.10.4-1 | dep of sysprof |
|
||
| startup-notification | 0.12-9 | dep of openbox |
|
||
|
||
11 added, 0 removed. Cross-checked via `comm -13
|
||
pkglist.pre.txt pkglist.post.txt` — exact same 11.
|
||
|
||
### What was changed (config, not packages)
|
||
|
||
- **`/etc/sysctl.d/90-x11-research-perf.conf` was created with
|
||
`kernel.perf_event_paranoid = 1`, then reverted same session.**
|
||
- Created: applied via `sudo sysctl --system`; effective
|
||
value went 2 → 1.
|
||
- Verification probe revealed the tweak was **not delivering
|
||
the promised behavior**: even with `task-clock` (a software
|
||
event that should be allowed at paranoid=1), `perf record
|
||
-p <Xorg_pid>` on this aarch64 kernel still failed with
|
||
"Failure to open any events for recording". Predecessor
|
||
pattern confirmed in
|
||
`kwin_overlay_subsurface/phase3_protocol.md:121,158,216`:
|
||
they used **`sudo perf record`** per-rep, not a sysctl
|
||
tweak. Passwordless sudo over SSH already works on ohm so
|
||
this is unattended-friendly.
|
||
- Reverted: `sudo rm /etc/sysctl.d/90-x11-research-perf.conf`
|
||
and `sudo sysctl kernel.perf_event_paranoid=2` (the
|
||
`--system` reapply does not reset removed-file values; an
|
||
explicit set was required).
|
||
- Net state change: **none** (paranoid back at kernel
|
||
default 2; `/etc/sysctl.d/` empty again).
|
||
- Lesson: the inventory's "set paranoid=1" recommendation
|
||
was wrong. Updated `inventory.md` will reflect that the
|
||
actual pattern is `sudo perf record -p <pid>` per-rep.
|
||
|
||
### What was created as a side effect (no operator action)
|
||
|
||
- `/usr/share/xsessions/openbox.desktop` (shipped by the
|
||
`openbox` package). SDDM will list "Openbox" as a session
|
||
choice on next greet. Removing the openbox package removes
|
||
the .desktop file.
|
||
|
||
### What was *not* installed (deliberate, operator-decision-pending)
|
||
|
||
- **firefox** — 2 of the 6 matrix cells reference Firefox
|
||
(`C-W-ff-*`, `C-X-ff-*`). Operator decides whether to install
|
||
or to mark those cells N/A. If installed later, append a new
|
||
entry below.
|
||
- **xtrace (X protocol tracer, AUR)** — explicitly marked
|
||
optional in `inventory.md`. The matrix's primary metrics
|
||
(effective_fps / drops / latency / CPU%) don't require it.
|
||
If installed later, append a new entry below.
|
||
|
||
---
|
||
|
||
## Entry 2 — 2026-05-03 ~09:30 CEST
|
||
|
||
**Trigger:** Operator preference for a desktop-environment-flavored
|
||
without-KWin testbed alongside the bare openbox cell ("I like
|
||
desktop environments. With respect to the test - should xfce or
|
||
cinnamon be our test bed?" → "yes add xfce with goodies").
|
||
Cinnamon was excluded because Muffin is a mandatory compositor;
|
||
XFCE qualifies if `xfwm4`'s built-in compositor is left disabled.
|
||
|
||
**Driven from:** `mfritsche@noether` over SSH to `ohm.fritz.box`,
|
||
passwordless `sudo`.
|
||
|
||
**Pre-install snapshot:** `pkglist.entry2.pre.txt` (1180 packages,
|
||
sha256 `1f72c7ed2f9d476d24d0dfb53fcb387ea39f882c89375d68fc21298313252d78`).
|
||
**Post-install snapshot:** `pkglist.entry2.post.txt` (1250 packages).
|
||
**Full pacman transaction log:** `pacman.entry2.log`.
|
||
|
||
### What was installed
|
||
|
||
Single transaction: `sudo pacman -S --needed xfce4 xfce4-goodies`
|
||
(both are package groups; pacman expanded them).
|
||
|
||
- **50 explicit packages** (the union of the `xfce4` group's 14
|
||
members and the `xfce4-goodies` group's 36 members):
|
||
exo, garcon, mousepad, parole, ristretto, thunar, thunar-archive-plugin,
|
||
thunar-media-tags-plugin, thunar-volman, tumbler, xfburn,
|
||
xfce4-appfinder, xfce4-battery-plugin, xfce4-clipman-plugin,
|
||
xfce4-cpufreq-plugin, xfce4-cpugraph-plugin, xfce4-dict,
|
||
xfce4-diskperf-plugin, xfce4-eyes-plugin, xfce4-fsguard-plugin,
|
||
xfce4-genmon-plugin, xfce4-mailwatch-plugin, xfce4-mount-plugin,
|
||
xfce4-mpc-plugin, xfce4-netload-plugin, xfce4-notes-plugin,
|
||
xfce4-notifyd, xfce4-panel, xfce4-places-plugin,
|
||
xfce4-power-manager, xfce4-pulseaudio-plugin, xfce4-screensaver,
|
||
xfce4-screenshooter, xfce4-sensors-plugin, xfce4-session,
|
||
xfce4-settings, xfce4-smartbookmark-plugin, xfce4-systemload-plugin,
|
||
xfce4-taskmanager, xfce4-terminal, xfce4-time-out-plugin,
|
||
xfce4-timer-plugin, xfce4-verve-plugin, xfce4-wavelan-plugin,
|
||
xfce4-weather-plugin, xfce4-whiskermenu-plugin, xfce4-xkb-plugin,
|
||
xfconf, xfdesktop, xfwm4
|
||
- **20 transitive deps**:
|
||
dbus-glib, elementary-icon-theme, gnome-themes-extra,
|
||
gtk-layer-shell, gtksourceview4, libburn, libgtop, libisofs,
|
||
libkeybinder3, libmpd, libwnck3, libxfce4ui, libxfce4util,
|
||
libxfce4windowing, libxklavier, libxres, polkit-gnome,
|
||
xorg-iceauth, xorg-xinit, xorg-xmodmap
|
||
|
||
70 added, 0 removed. Cross-checked via
|
||
`comm -13 pkglist.entry2.pre.txt pkglist.entry2.post.txt` — full
|
||
list in `entry2.added.list` (sourced from same diff).
|
||
|
||
### What was changed (config)
|
||
|
||
- **`~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml` created**
|
||
(208 bytes), pre-seeding `general/use_compositing = false`. This
|
||
ensures the **first XFCE login lands with xfwm4's built-in GL
|
||
compositor disabled**, matching the matrix's "without-KWin =
|
||
no compositor in the display path" definition. Without this
|
||
pre-seed, `xfwm4` would default to `use_compositing=true` and
|
||
the operator would have to remember to toggle it via *Settings
|
||
→ Window Manager Tweaks → Compositor* before every measurement
|
||
rep — a confound waiting to happen.
|
||
|
||
The directory tree `~/.config/xfce4/` did not exist before this
|
||
write; the entire tree is removable.
|
||
|
||
### What was created as a side effect (no operator action)
|
||
|
||
- `/usr/share/xsessions/xfce.desktop` (shipped by `xfce4-session`).
|
||
SDDM now lists three X11 sessions: openbox.desktop (entry 1),
|
||
plasmax11.desktop (pre-existing), xfce.desktop (this entry).
|
||
|
||
### After-revert verification
|
||
|
||
The first-login compositor pre-seed is per-user state in
|
||
`~/.config/xfce4/`. The revert procedure deletes the entire
|
||
xfce4 user-config tree if (and only if) it contains nothing but
|
||
the pre-seeded xfwm4.xml. If the operator logs into XFCE before
|
||
revert, xfconfd will populate that tree with other settings
|
||
files; the revert then becomes a manual decision.
|
||
|
||
---
|
||
|
||
## Entry 3 — 2026-05-03 ~09:45 CEST
|
||
|
||
**Trigger:** Operator instructed "install both" — closing the two
|
||
operator-decision items left open in entry 1's "What was *not*
|
||
installed" section: firefox (matrix completeness — 2 of 6 cells
|
||
need it) and the X-protocol tracer xtrace.
|
||
|
||
**Driven from:** `mfritsche@noether` over SSH to `ohm.fritz.box`,
|
||
passwordless `sudo` for pacman, regular user for `yay` /
|
||
`makepkg`.
|
||
|
||
**Pre-install snapshot:** `pkglist.entry3.pre.txt` (1250 packages,
|
||
sha256 `e73ffdd41b683aaba2ad18efa5ce3e7252577c13b4f0bb14e9de7bdfbfd5e26e`).
|
||
**Post-install snapshot:** `pkglist.entry3.post.txt` (1253 packages).
|
||
**Transaction logs:** `pacman.entry3a.firefox.log`,
|
||
`pacman.entry3b.xtrace.log`.
|
||
|
||
### What was installed
|
||
|
||
Two transactions in one entry:
|
||
|
||
| Package | Version | Source | Reason |
|
||
|---|---|---|---|
|
||
| firefox | 150.0.1-1 | extra | explicit — matrix's `C-W-ff-*` and `C-X-ff-*` cells |
|
||
| mailcap | 2.1.54-2 | extra | dep of firefox |
|
||
| xtrace | 1.4.0-2 | AUR | explicit — X protocol tracer (parallel to `WAYLAND_DEBUG=1`) |
|
||
|
||
3 added, 0 removed.
|
||
|
||
Firefox was a clean `pacman -S firefox`. xtrace went via
|
||
`yay -G xtrace; cd ~/.cache/yay/xtrace; makepkg -s --noconfirm
|
||
--ignorearch; sudo pacman -U --noconfirm xtrace-1.4.0-2-aarch64.pkg.tar.zst`.
|
||
The `--ignorearch` was needed because the AUR PKGBUILD declares
|
||
`arch=('i686' 'x86_64')` only — the package builds cleanly on
|
||
aarch64, the maintainer just hasn't updated the array.
|
||
|
||
### File-conflict probe (no actual conflict)
|
||
|
||
A pre-install probe suggested AUR `xtrace` would conflict with
|
||
glibc's `/usr/bin/xtrace` (glibc ships a syscall-tracer shell
|
||
script under that path). Investigation showed the **Arch AUR
|
||
PKGBUILD renames the binary to `/usr/bin/x11trace`** specifically
|
||
to avoid this collision. Both binaries now coexist:
|
||
|
||
- `/usr/bin/xtrace` — glibc's syscall/function tracer (5 KB
|
||
bash script). Unchanged.
|
||
- `/usr/bin/x11trace` — the X protocol tracer (133 KB aarch64
|
||
ELF, AUR `xtrace` 1.4.0). New.
|
||
|
||
The early `pacman -U --overwrite '/usr/bin/xtrace'` flag turned
|
||
out to be unnecessary; pacman would have allowed the install
|
||
without it because nothing actually overlapped on disk. No
|
||
state was overwritten.
|
||
|
||
### Verification
|
||
|
||
- `firefox --version` → `Mozilla Firefox 150.0.1`
|
||
- `x11trace --version` → `xtrace version 1.4.0`
|
||
- `x11trace --help` confirms X-protocol semantics
|
||
("Dump all X protocol data being tunneled from a fake X
|
||
display to a real one")
|
||
- `head -3 /usr/bin/xtrace` still shows the GNU libc copyright
|
||
banner — glibc's xtrace untouched.
|
||
|
||
### What is now fully resolved from earlier "operator-decision-pending"
|
||
|
||
- ✅ firefox installed → all 6 matrix cells now have a binary
|
||
available.
|
||
- ✅ xtrace (X protocol tracer) installed at `/usr/bin/x11trace`
|
||
→ if any Phase 1 cell wants protocol-level evidence parallel
|
||
to the predecessor's `WAYLAND_DEBUG=1`, the instrument is
|
||
ready.
|
||
|
||
---
|
||
|
||
## Entry 4 — 2026-05-03 ~10:25 CEST
|
||
|
||
**Trigger:** Operator was in the freshly-switched XFCE session
|
||
("Can you rotate the xfce session for me? Right now, left is up
|
||
and right is down"). The PineTab2 panel is mounted portrait
|
||
(native mode 800×1280@59.98) and XFCE's default rotation
|
||
("normal") shows it that way; Plasma X11 / Plasma Wayland have
|
||
historically used `right` rotation to present landscape
|
||
1280×800. This entry brings XFCE in line.
|
||
|
||
**Driven from:** `mfritsche@noether` over SSH to `ohm.fritz.box`,
|
||
regular user (no sudo needed; per-user state only).
|
||
|
||
### What was changed
|
||
|
||
1. **Live rotation applied** to the active XFCE session (session
|
||
id 395, Xorg pid 32073, DISPLAY=:0,
|
||
XAUTHORITY=/run/user/1001/xauth_QctOSR):
|
||
```
|
||
xrandr --output DSI-1 --rotate right
|
||
```
|
||
Result: `Screen 0 ... current 1280 x 800` and `DSI-1
|
||
connected 1280x800+0+0 right`. Matches the Plasma X11
|
||
orientation.
|
||
|
||
2. **Persistence: `~/.config/autostart/99-rotate-dsi1.desktop`
|
||
created** so every future XFCE login runs the rotation
|
||
immediately. File contents:
|
||
```
|
||
[Desktop Entry]
|
||
Type=Application
|
||
Name=Rotate DSI-1 to landscape (right)
|
||
Comment=Created 2026-05-03 by x11-session-research campaign —
|
||
see phase0_evidence/x11_inventory_2026-05-03/revert.log entry 4
|
||
Exec=sh -c "xrandr --output DSI-1 --rotate right"
|
||
OnlyShowIn=XFCE;
|
||
Terminal=false
|
||
```
|
||
`OnlyShowIn=XFCE` keeps it from running under Plasma X11 /
|
||
openbox — those handle their own rotation state.
|
||
|
||
### Why not via xfconf
|
||
|
||
XFCE's `displays` xfconf channel was empty
|
||
(`xfconf-query -c displays -lv` showed only `/ActiveProfile`
|
||
= `Default` with no per-monitor data). xfce4-display-settings
|
||
populates that profile on first GUI use; without that population,
|
||
writing rotation codes by hand into xfconf is brittle (the
|
||
encoding of "right" depends on xfce4-settings version). An
|
||
autostart .desktop file is version-independent and easy to
|
||
inspect.
|
||
|
||
If the operator subsequently runs *Settings → Display* in the
|
||
XFCE GUI and clicks Save / Apply, xfconf will write a real
|
||
profile and the autostart file becomes redundant — at that
|
||
point either can stay (no conflict) or the autostart can be
|
||
removed.
|
||
|
||
### What is NOT changed
|
||
|
||
- No system-wide config touched.
|
||
- No package install.
|
||
- Plasma X11 and openbox sessions unaffected — `OnlyShowIn=XFCE`
|
||
scopes the autostart to XFCE only.
|
||
- Touchscreen orientation: **NOT** auto-corrected by this entry.
|
||
After rotation, the Goodix Capacitive TouchScreen will likely
|
||
report touches in the panel's native (portrait) coordinate
|
||
space, so taps land on the wrong screen position. Fix when
|
||
it becomes a concern:
|
||
```
|
||
xinput map-to-output "Goodix Capacitive TouchScreen" DSI-1
|
||
```
|
||
This is **not auto-applied** in this entry because the matrix
|
||
cells use mouse + keyboard for navigation, not touch — and
|
||
also because mapping the touchscreen would itself need
|
||
another autostart entry. If touch becomes relevant later,
|
||
add it as entry 5.
|
||
|
||
---
|
||
|
||
## Entry 5 — 2026-05-03 ~10:29 CEST
|
||
|
||
**Trigger:** Operator confirmed XFCE session alive after entry 4
|
||
("xfce-session alive"), then accepted the touchscreen-mapping
|
||
follow-up offered in entry 4's "What is NOT changed" note.
|
||
|
||
**Driven from:** `mfritsche@noether` over SSH to `ohm.fritz.box`,
|
||
regular user.
|
||
|
||
### What was changed
|
||
|
||
1. **Live mapping applied:**
|
||
```
|
||
xinput map-to-output "pointer:Goodix Capacitive TouchScreen" DSI-1
|
||
```
|
||
The `pointer:` prefix is required because the Goodix exposes
|
||
both a pointer device (id 13) and a keyboard subdevice
|
||
(id 15) — `xinput` needs the disambiguation. Verified by
|
||
`xinput list-props`: Coordinate Transformation Matrix
|
||
updated to `[0 1 0 / -1 0 1 / 0 0 1]` — the homogeneous
|
||
90°-clockwise rotation matrix matching the screen.
|
||
|
||
2. **Persistence:
|
||
`~/.config/autostart/99-rotate-touchscreen.desktop` created**.
|
||
Same `OnlyShowIn=XFCE` scoping. The Exec uses `sh -c "sleep 2;
|
||
xinput ..."` because XFCE may launch this autostart before
|
||
entry 4's xrandr rotation has finished applying — without
|
||
the sleep, the xinput remap can race against an unrotated
|
||
screen state.
|
||
|
||
### What is NOT changed
|
||
|
||
- Other input devices (touchpad, USB mouse, USB keyboard)
|
||
unchanged — they don't report panel-relative coordinates so
|
||
rotation doesn't affect them.
|
||
- Plasma X11 / openbox sessions unaffected
|
||
(`OnlyShowIn=XFCE`).
|
||
- Wayland sessions unaffected (xinput is X11-only). When KDE
|
||
Plasma Wayland next runs, it uses its own
|
||
`kwriteconfig5 --file kwinrc` mapping — that's predecessor
|
||
state, not touched here.
|
||
|
||
---
|
||
|
||
## How to revert this campaign's installs
|
||
|
||
Entries reverted in **reverse order** (entry 5 → 4 → 3 → 2 → 1):
|
||
|
||
```sh
|
||
ssh ohm.fritz.box '
|
||
set -e
|
||
|
||
# ----- Entry 5 revert: touchscreen mapping -----
|
||
rm -f ~/.config/autostart/99-rotate-touchscreen.desktop
|
||
# Live revert: reset Coordinate Transformation Matrix to identity.
|
||
# Only meaningful in an X11 session; harmless if no XFCE running.
|
||
if pgrep -x xfwm4 >/dev/null; then
|
||
DISPLAY=:0 XAUTHORITY=$(ls /run/user/$(id -u)/xauth_* 2>/dev/null | head -1) \
|
||
xinput set-prop "pointer:Goodix Capacitive TouchScreen" \
|
||
"Coordinate Transformation Matrix" \
|
||
1 0 0 0 1 0 0 0 1 || true
|
||
fi
|
||
|
||
# ----- Entry 4 revert: XFCE rotation -----
|
||
rm -f ~/.config/autostart/99-rotate-dsi1.desktop
|
||
# Live rotation revert (only if currently in XFCE):
|
||
if pgrep -x xfwm4 >/dev/null; then
|
||
DISPLAY=:0 XAUTHORITY=$(ls /run/user/$(id -u)/xauth_* 2>/dev/null | head -1) \
|
||
xrandr --output DSI-1 --rotate normal || true
|
||
fi
|
||
|
||
# ----- Entry 3 revert: firefox + xtrace -----
|
||
sudo pacman -Rsn --noconfirm firefox xtrace
|
||
# mailcap was pulled as a firefox dep; -Rs cleans it up if no other
|
||
# dependent remains.
|
||
|
||
# ----- Entry 2 revert: XFCE -----
|
||
sudo pacman -Rsn --noconfirm \
|
||
exo garcon mousepad parole ristretto thunar \
|
||
thunar-archive-plugin thunar-media-tags-plugin thunar-volman tumbler \
|
||
xfburn xfce4-appfinder xfce4-battery-plugin xfce4-clipman-plugin \
|
||
xfce4-cpufreq-plugin xfce4-cpugraph-plugin xfce4-dict \
|
||
xfce4-diskperf-plugin xfce4-eyes-plugin xfce4-fsguard-plugin \
|
||
xfce4-genmon-plugin xfce4-mailwatch-plugin xfce4-mount-plugin \
|
||
xfce4-mpc-plugin xfce4-netload-plugin xfce4-notes-plugin \
|
||
xfce4-notifyd xfce4-panel xfce4-places-plugin xfce4-power-manager \
|
||
xfce4-pulseaudio-plugin xfce4-screensaver xfce4-screenshooter \
|
||
xfce4-sensors-plugin xfce4-session xfce4-settings \
|
||
xfce4-smartbookmark-plugin xfce4-systemload-plugin xfce4-taskmanager \
|
||
xfce4-terminal xfce4-time-out-plugin xfce4-timer-plugin \
|
||
xfce4-verve-plugin xfce4-wavelan-plugin xfce4-weather-plugin \
|
||
xfce4-whiskermenu-plugin xfce4-xkb-plugin xfconf xfdesktop xfwm4
|
||
|
||
# Per-user xfconf tree: only safe to remove if the operator never
|
||
# logged into XFCE (otherwise xfconfd may have written other settings
|
||
# the operator would lose). Manual check:
|
||
if [ "$(find ~/.config/xfce4 -type f | sort)" = "$HOME/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml" ]; then
|
||
rm -rf ~/.config/xfce4
|
||
echo " ~/.config/xfce4 removed (only the pre-seeded xfwm4.xml was there)"
|
||
else
|
||
echo " ~/.config/xfce4 contains operator-added files; manual review required"
|
||
find ~/.config/xfce4 -type f
|
||
fi
|
||
|
||
# ----- Entry 1 revert: measurement tools + openbox -----
|
||
sudo pacman -Rsn --noconfirm \
|
||
openbox sysprof \
|
||
xorg-xrandr xorg-xev xorg-xinput xorg-xwininfo xorg-xkill
|
||
|
||
# Sysctl: nothing to undo (entry 1's paranoid=1 was already reverted
|
||
# in-session — see entry 1 § "What was changed").
|
||
|
||
# ----- Verification -----
|
||
echo "expected pkg count after revert: 1169"
|
||
pacman -Qq | wc -l
|
||
|
||
echo "expected sysctl: kernel.perf_event_paranoid = 2"
|
||
sysctl kernel.perf_event_paranoid
|
||
|
||
echo "expected sessions: only plasmax11.desktop"
|
||
ls /usr/share/xsessions/
|
||
|
||
echo "expected /etc/sysctl.d/: empty"
|
||
ls /etc/sysctl.d/
|
||
'
|
||
```
|
||
|
||
Sanity-check: `pacman -Qq | wc -l` should report **1169**, matching
|
||
`pkglist.pre.txt`. If it reports anything else, the operator
|
||
added/removed a package between an entry and the revert;
|
||
investigate before declaring revert complete.
|
||
|
||
---
|
||
|
||
## Adding a new entry
|
||
|
||
When a future Phase install/mutation happens, append a new
|
||
`## Entry N — YYYY-MM-DD` section above the "How to revert"
|
||
section. Re-snapshot `pacman -Qq` into a new
|
||
`pkglist.entryN.{pre,post}.txt` so each entry is independently
|
||
revertible. Prepend the new entry's revert step to the
|
||
"How to revert" block (entries revert in reverse install
|
||
order — newest first).
|