yao/sandbox/docker/desktop/config/setup-xfce.sh
Max 55164c5665 Enhance VNC sandbox images with Yao branding and sudo support
- Add passwordless sudo for sandbox user in playwright and desktop images
- Configure Yao branding for Fluxbox (CUI dark theme, centered logo)
- Configure Yao branding for XFCE (panel icons, wallpaper, workspace shortcut)
- Add D-Bus support for XFCE desktop environment
- Add dynamic wallpaper generation with configurable resolution and logo size
- Hide Fluxbox toolbar for cleaner Playwright automation view
- Create chromium wrapper script using Playwright's bundled browser
- Add feh and imagemagick for wallpaper management in Fluxbox
- Update .gitignore for config scripts and TODO file

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 18:23:15 +08:00

160 lines
6.6 KiB
Bash

#!/bin/bash
# XFCE desktop configuration script
# Runs on container startup to set up Yao branding and default applications
set -e
XFCE_CONFIG_DIR="$HOME/.config/xfce4"
XFDESKTOP_DIR="$HOME/.config/xfce4/xfconf/xfce-perchannel-xml"
ICONS_DIR="$HOME/.local/share/icons/hicolor"
APPS_DIR="$HOME/.local/share/applications"
DESKTOP_DIR="$HOME/Desktop"
# Create necessary directories
mkdir -p "$XFCE_CONFIG_DIR/panel"
mkdir -p "$XFDESKTOP_DIR"
mkdir -p "$ICONS_DIR/48x48/apps"
mkdir -p "$ICONS_DIR/128x128/apps"
mkdir -p "$ICONS_DIR/256x256/apps"
mkdir -p "$APPS_DIR"
mkdir -p "$DESKTOP_DIR"
# Copy Yao logo to user icons directory
if [ -f /usr/share/yao/yao-logo-48.png ]; then
cp /usr/share/yao/yao-logo-48.png "$ICONS_DIR/48x48/apps/yao.png"
cp /usr/share/yao/yao-logo-128.png "$ICONS_DIR/128x128/apps/yao.png"
cp /usr/share/yao/yao-logo-256.png "$ICONS_DIR/256x256/apps/yao.png"
# Also copy to system location for panel icon
sudo cp /usr/share/yao/yao-logo-48.png /usr/share/pixmaps/yao.png 2>/dev/null || true
gtk-update-icon-cache "$ICONS_DIR" 2>/dev/null || true
fi
# Copy Chromium launcher to applications
if [ -f /usr/share/yao/panel-launcher-chromium.desktop ]; then
cp /usr/share/yao/panel-launcher-chromium.desktop "$APPS_DIR/chromium-browser.desktop"
fi
# Configure xfdesktop - hide default icons (File System, Home, Trash), keep only custom shortcuts
cat > "$XFDESKTOP_DIR/xfce4-desktop.xml" << 'XMLEOF'
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-desktop" version="1.0">
<property name="desktop-icons" type="empty">
<property name="style" type="int" value="2"/>
<property name="file-icons" type="empty">
<property name="show-home" type="bool" value="false"/>
<property name="show-filesystem" type="bool" value="false"/>
<property name="show-trash" type="bool" value="false"/>
<property name="show-removable" type="bool" value="false"/>
</property>
</property>
</channel>
XMLEOF
# Copy workspace shortcut to desktop (named "Workspace" with folder icon)
if [ -f /usr/share/yao/workspace.desktop ]; then
cp /usr/share/yao/workspace.desktop "$DESKTOP_DIR/workspace.desktop"
chmod +x "$DESKTOP_DIR/workspace.desktop"
fi
# Set Chromium as default browser
xdg-settings set default-web-browser chromium-browser.desktop 2>/dev/null || true
# Configure XFCE panel - set Applications menu icon to Yao logo
# This will be applied when xfce4-panel starts
cat > "$XFDESKTOP_DIR/xfce4-panel.xml" << 'XMLEOF'
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-panel" version="1.0">
<property name="configver" type="int" value="2"/>
<property name="panels" type="array">
<value type="int" value="1"/>
<value type="int" value="2"/>
<property name="dark-mode" type="bool" value="true"/>
<property name="panel-1" type="empty">
<property name="position" type="string" value="p=6;x=0;y=0"/>
<property name="length" type="uint" value="100"/>
<property name="position-locked" type="bool" value="true"/>
<property name="icon-size" type="uint" value="16"/>
<property name="size" type="uint" value="26"/>
<property name="plugin-ids" type="array">
<value type="int" value="1"/>
<value type="int" value="2"/>
<value type="int" value="3"/>
<value type="int" value="4"/>
<value type="int" value="5"/>
<value type="int" value="6"/>
<value type="int" value="7"/>
<value type="int" value="8"/>
<value type="int" value="9"/>
<value type="int" value="10"/>
<value type="int" value="11"/>
</property>
</property>
<property name="panel-2" type="empty">
<property name="autohide-behavior" type="uint" value="1"/>
<property name="position" type="string" value="p=10;x=960;y=1054"/>
<property name="length" type="uint" value="1"/>
<property name="position-locked" type="bool" value="true"/>
<property name="size" type="uint" value="48"/>
<property name="plugin-ids" type="array">
<value type="int" value="12"/>
<value type="int" value="13"/>
<value type="int" value="14"/>
<value type="int" value="15"/>
<value type="int" value="16"/>
<value type="int" value="17"/>
</property>
</property>
</property>
<property name="plugins" type="empty">
<property name="plugin-1" type="string" value="applicationsmenu">
<property name="button-icon" type="string" value="yao"/>
<property name="button-title" type="string" value=""/>
<property name="show-button-title" type="bool" value="false"/>
</property>
<property name="plugin-2" type="string" value="tasklist">
<property name="grouping" type="uint" value="1"/>
</property>
<property name="plugin-3" type="string" value="separator">
<property name="expand" type="bool" value="true"/>
<property name="style" type="uint" value="0"/>
</property>
<property name="plugin-4" type="string" value="pager"/>
<property name="plugin-5" type="string" value="separator">
<property name="style" type="uint" value="0"/>
</property>
<property name="plugin-6" type="string" value="systray">
<property name="square-icons" type="bool" value="true"/>
</property>
<property name="plugin-7" type="string" value="pulseaudio">
<property name="enable-keyboard-shortcuts" type="bool" value="true"/>
<property name="show-notifications" type="bool" value="true"/>
</property>
<property name="plugin-8" type="string" value="power-manager-plugin"/>
<property name="plugin-9" type="string" value="notification-plugin"/>
<property name="plugin-10" type="string" value="separator">
<property name="style" type="uint" value="0"/>
</property>
<property name="plugin-11" type="string" value="clock"/>
<property name="plugin-12" type="string" value="showdesktop"/>
<property name="plugin-13" type="string" value="separator"/>
<property name="plugin-14" type="string" value="launcher">
<property name="items" type="array">
<value type="string" value="xfce4-terminal.desktop"/>
</property>
</property>
<property name="plugin-15" type="string" value="launcher">
<property name="items" type="array">
<value type="string" value="thunar.desktop"/>
</property>
</property>
<property name="plugin-16" type="string" value="launcher">
<property name="items" type="array">
<value type="string" value="chromium-browser.desktop"/>
</property>
</property>
<property name="plugin-17" type="string" value="separator"/>
</property>
</channel>
XMLEOF
echo "[XFCE Setup] Configuration complete"