fix(kiosk): laptop eDP corruption — i915 stability params + panel-sized Chromium window

ThinkPad X250 (Broadwell HD 5500) internal panels show horizontal corruption
bands at the kiosk; known i915 eDP power-feature issue. Boot installed and
live systems with i915.enable_ips=0 enable_psr=0 enable_fbc=0 (no-ops off
Intel, nothing lost on a kiosk). Debug boot entries stay stock for A/B.
Also size the Chromium kiosk window from the detected mode instead of a
hardcoded 1920x1080 that clips on 1366x768 panels.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dorian 2026-07-13 21:59:41 +01:00
parent 7a08ed6687
commit 7e996d6244
2 changed files with 15 additions and 4 deletions

View File

@ -2979,7 +2979,10 @@ if [ -d "$BOOT_MEDIA/archipelago/plymouth-theme" ]; then
ln -sf /usr/share/plymouth/themes/archipelago/archipelago.plymouth \ ln -sf /usr/share/plymouth/themes/archipelago/archipelago.plymouth \
/mnt/target/etc/alternatives/default.plymouth 2>/dev/null || true /mnt/target/etc/alternatives/default.plymouth 2>/dev/null || true
# Configure clean boot: splash, suppress kernel noise, hide cursor # Configure clean boot: splash, suppress kernel noise, hide cursor
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=".*"/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash loglevel=0 rd.systemd.show_status=false vt.global_cursor_default=0 acpi=force"/' \ # i915.enable_ips/psr/fbc=0: Broadwell-era eDP panels (e.g. ThinkPad X250
# HD 5500) show horizontal corruption bands with these power features on;
# a kiosk box gains nothing from them. Harmless no-ops on non-Intel.
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=".*"/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash loglevel=0 rd.systemd.show_status=false vt.global_cursor_default=0 acpi=force i915.enable_ips=0 i915.enable_psr=0 i915.enable_fbc=0"/' \
/mnt/target/etc/default/grub 2>/dev/null || true /mnt/target/etc/default/grub 2>/dev/null || true
echo " Installed Archipelago Plymouth theme on target" echo " Installed Archipelago Plymouth theme on target"
fi fi
@ -3479,7 +3482,7 @@ else
fi fi
menuentry "Install Archipelago" --hotkey=i { menuentry "Install Archipelago" --hotkey=i {
linux ($root)/live/vmlinuz boot=live components quiet splash loglevel=0 rd.systemd.show_status=false vt.global_cursor_default=0 acpi=force console=ttyS0,115200 console=tty0 linux ($root)/live/vmlinuz boot=live components quiet splash loglevel=0 rd.systemd.show_status=false vt.global_cursor_default=0 acpi=force i915.enable_ips=0 i915.enable_psr=0 i915.enable_fbc=0 console=ttyS0,115200 console=tty0
initrd ($root)/live/initrd.img initrd ($root)/live/initrd.img
} }
@ -3547,7 +3550,7 @@ DEFAULT install
LABEL install LABEL install
MENU LABEL Install Archipelago MENU LABEL Install Archipelago
KERNEL /live/vmlinuz KERNEL /live/vmlinuz
APPEND initrd=/live/initrd.img boot=live components quiet loglevel=0 rd.systemd.show_status=false vt.global_cursor_default=0 acpi=force APPEND initrd=/live/initrd.img boot=live components quiet loglevel=0 rd.systemd.show_status=false vt.global_cursor_default=0 acpi=force i915.enable_ips=0 i915.enable_psr=0 i915.enable_fbc=0
MENU DEFAULT MENU DEFAULT
LABEL install-verbose LABEL install-verbose

View File

@ -25,6 +25,12 @@ fi
KIOSK_SAFE_AREA_X_PX=${ARCHIPELAGO_KIOSK_SAFE_AREA_X_PX:-} KIOSK_SAFE_AREA_X_PX=${ARCHIPELAGO_KIOSK_SAFE_AREA_X_PX:-}
KIOSK_SAFE_AREA_Y_PX=${ARCHIPELAGO_KIOSK_SAFE_AREA_Y_PX:-} KIOSK_SAFE_AREA_Y_PX=${ARCHIPELAGO_KIOSK_SAFE_AREA_Y_PX:-}
# Actual mode of the kiosk output — configure_display overwrites these so
# Chromium's window matches the panel instead of assuming 1080p (a 1366x768
# laptop panel otherwise gets a clipped oversized window).
KIOSK_MODE_W=1920
KIOSK_MODE_H=1080
configure_display() { configure_display() {
command -v xrandr >/dev/null 2>&1 || return 0 command -v xrandr >/dev/null 2>&1 || return 0
@ -65,6 +71,8 @@ configure_display() {
width=${mode%x*} width=${mode%x*}
height=${mode#*x} height=${mode#*x}
case "$width:$height" in *[!0-9:]*|:*) width=1920; height=1080 ;; esac case "$width:$height" in *[!0-9:]*|:*) width=1920; height=1080 ;; esac
KIOSK_MODE_W=$width
KIOSK_MODE_H=$height
# Browser safe-area fallback for TVs that crop edges. Driver underscan is # Browser safe-area fallback for TVs that crop edges. Driver underscan is
# preferable, but many Intel HDMI outputs do not expose that property. # preferable, but many Intel HDMI outputs do not expose that property.
@ -116,7 +124,7 @@ while true; do
--disable-component-update \ --disable-component-update \
$GPU_FLAGS \ $GPU_FLAGS \
--renderer-process-limit=2 \ --renderer-process-limit=2 \
--window-size=1920,1080 \ --window-size=${KIOSK_MODE_W},${KIOSK_MODE_H} \
--window-position=0,0 \ --window-position=0,0 \
--start-fullscreen \ --start-fullscreen \
--force-device-scale-factor=1 \ --force-device-scale-factor=1 \