diff --git a/iso/builder/config/hooks/normal/9001-wallpaper.hook.chroot b/iso/builder/config/hooks/normal/9001-wallpaper.hook.chroot new file mode 100755 index 0000000..88ee77a --- /dev/null +++ b/iso/builder/config/hooks/normal/9001-wallpaper.hook.chroot @@ -0,0 +1,72 @@ +#!/bin/sh +# 9001-wallpaper.hook.chroot — generate /usr/share/bee/wallpaper.png inside chroot +set -e +echo "=== generating bee wallpaper ===" +mkdir -p /usr/share/bee + +python3 - <<'PYEOF' +from PIL import Image, ImageDraw, ImageFont +import os + +W, H = 1920, 1080 + +LOGO = """\ + \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 + \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u255a\u2588\u2588\u2557 \u2588\u2588\u2554\u255d \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d + \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u255a\u2588\u2588\u2588\u2588\u2554\u255d \u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 + \u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551 \u255a\u2588\u2588\u2554\u255d \u255a\u2550\u2550\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u255d \u2588\u2588\u2554\u2550\u2550\u255d + \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 + \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d + Hardware Audit LiveCD""" + +# Find a monospace font that supports box-drawing characters +FONT_CANDIDATES = [ + '/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf', + '/usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf', + '/usr/share/fonts/truetype/freefont/FreeMono.ttf', + '/usr/share/fonts/truetype/noto/NotoMono-Regular.ttf', +] + +font_path = None +for p in FONT_CANDIDATES: + if os.path.exists(p): + font_path = p + break + +SIZE = 22 +if font_path: + font_logo = ImageFont.truetype(font_path, SIZE) + font_sub = ImageFont.truetype(font_path, SIZE) +else: + font_logo = ImageFont.load_default() + font_sub = font_logo + +img = Image.new('RGB', (W, H), (0, 0, 0)) +draw = ImageDraw.Draw(img) + +# Measure logo block +lines = LOGO.split('\n') +bbox = draw.textbbox((0, 0), LOGO, font=font_logo) +text_w = bbox[2] - bbox[0] +text_h = bbox[3] - bbox[1] + +x = (W - text_w) // 2 +y = (H - text_h) // 2 + +# Draw logo lines: first 6 in amber, last line (subtitle) dimmer +logo_lines = lines[:6] +sub_line = lines[6] if len(lines) > 6 else '' + +cy = y +for line in logo_lines: + draw.text((x, cy), line, font=font_logo, fill=(0xf6, 0xc9, 0x0e)) + cy += SIZE + 2 +cy += 8 +if sub_line: + draw.text((x, cy), sub_line, font=font_sub, fill=(0x80, 0x68, 0x18)) + +img.save('/usr/share/bee/wallpaper.png', optimize=True) +print('wallpaper written: /usr/share/bee/wallpaper.png') +PYEOF + +echo "=== wallpaper done ===" diff --git a/iso/builder/config/package-lists/bee.list.chroot b/iso/builder/config/package-lists/bee.list.chroot index 567737c..40c965f 100644 --- a/iso/builder/config/package-lists/bee.list.chroot +++ b/iso/builder/config/package-lists/bee.list.chroot @@ -60,6 +60,8 @@ qrencode # Local desktop (openbox + chromium kiosk) openbox tint2 +feh +python3-pil xorg xterm chromium diff --git a/iso/overlay/usr/local/bin/bee-openbox-session b/iso/overlay/usr/local/bin/bee-openbox-session index d543c34..51bfc2c 100755 --- a/iso/overlay/usr/local/bin/bee-openbox-session +++ b/iso/overlay/usr/local/bin/bee-openbox-session @@ -7,8 +7,12 @@ xset s off xset -dpms xset s noblank -# Set desktop background: dark with amber tint matching web UI palette. -xsetroot -solid '#12100a' +# Set desktop background. +if [ -f /usr/share/bee/wallpaper.png ]; then + feh --bg-fill /usr/share/bee/wallpaper.png +else + xsetroot -solid '#000000' +fi tint2 &