tuanchris 4 hónapja
szülő
commit
d4af375023

+ 164 - 0
dune-weaver-touch/check-display.sh

@@ -0,0 +1,164 @@
+#!/bin/bash
+# Check display/framebuffer status before starting kiosk mode
+
+echo "🔍 Display & Framebuffer Status Check"
+echo "======================================"
+echo ""
+
+# Check if running as root (should NOT be)
+if [ "$EUID" -eq 0 ]; then
+    echo "⚠️  WARNING: You are running this as root/sudo"
+    echo "   This is for checking only. When you run the app, do NOT use sudo!"
+    echo "   EGL/GPU access fails when running as root."
+    echo ""
+fi
+
+# Check for running display servers
+echo "🖥️  Display Servers:"
+if pgrep -x "Xorg" > /dev/null; then
+    echo "   ⚠️  X11 (Xorg) is running - PID: $(pgrep -x Xorg)"
+    echo "      This will conflict with EGLFS!"
+    echo "      💡 Stop with: sudo systemctl stop lightdm"
+elif pgrep -x "weston" > /dev/null; then
+    echo "   ⚠️  Wayland (Weston) is running - PID: $(pgrep -x weston)"
+    echo "      This will conflict with EGLFS!"
+    echo "      💡 Stop with: pkill weston"
+elif pgrep "lxsession" > /dev/null; then
+    echo "   ⚠️  LXDE desktop is running"
+    echo "      This will conflict with EGLFS!"
+    echo "      💡 Stop with: sudo systemctl stop lightdm"
+else
+    echo "   ✅ No display server detected (good for EGLFS)"
+fi
+echo ""
+
+# Check framebuffer
+echo "📺 Framebuffer Device:"
+if [ -c "/dev/fb0" ]; then
+    echo "   ✅ /dev/fb0 exists"
+
+    # Check permissions
+    if [ -r "/dev/fb0" ] && [ -w "/dev/fb0" ]; then
+        echo "   ✅ Readable and writable by current user"
+    else
+        echo "   ⚠️  Permission issue!"
+        ls -l /dev/fb0
+        echo "      Current user: $(whoami)"
+        echo "      Groups: $(groups)"
+        echo "      💡 Fix: sudo usermod -a -G video $(whoami)"
+        echo "      Then logout and login again"
+    fi
+
+    # Check if framebuffer is in use
+    if lsof /dev/fb0 2>/dev/null | grep -v "COMMAND" > /dev/null; then
+        echo "   ⚠️  Framebuffer is in use by:"
+        lsof /dev/fb0 2>/dev/null || true
+    else
+        echo "   ✅ Framebuffer is available (not in use)"
+    fi
+else
+    echo "   ❌ /dev/fb0 not found!"
+fi
+echo ""
+
+# Check DRM devices
+echo "🎨 DRM/GPU Devices:"
+if [ -d "/dev/dri" ]; then
+    echo "   ✅ /dev/dri exists"
+    ls -la /dev/dri/
+
+    # Check permissions on DRM devices
+    for device in /dev/dri/*; do
+        if [ -r "$device" ] && [ -w "$device" ]; then
+            echo "   ✅ $device is accessible"
+        else
+            echo "   ⚠️  $device has permission issues"
+            echo "      💡 Fix: sudo usermod -a -G video,render $(whoami)"
+        fi
+    done
+else
+    echo "   ℹ️  /dev/dri not found (may use legacy fb0 only)"
+fi
+echo ""
+
+# Check user groups
+echo "👤 User Groups:"
+CURRENT_USER=$(whoami)
+GROUPS=$(groups)
+echo "   User: $CURRENT_USER"
+echo "   Groups: $GROUPS"
+
+if echo "$GROUPS" | grep -q "video"; then
+    echo "   ✅ In 'video' group"
+else
+    echo "   ⚠️  NOT in 'video' group"
+    echo "      💡 Fix: sudo usermod -a -G video $CURRENT_USER"
+fi
+
+if echo "$GROUPS" | grep -q "render"; then
+    echo "   ✅ In 'render' group (good for DRM)"
+else
+    echo "   ℹ️  Not in 'render' group (may be needed for some GPUs)"
+    echo "      💡 Add with: sudo usermod -a -G render $CURRENT_USER"
+fi
+echo ""
+
+# Check console
+echo "🖥️  Console Status:"
+if [ -n "$DISPLAY" ]; then
+    echo "   ⚠️  DISPLAY=$DISPLAY is set"
+    echo "      This suggests X11 is running"
+    echo "      💡 For EGLFS, unset with: unset DISPLAY"
+else
+    echo "   ✅ DISPLAY not set (good for EGLFS)"
+fi
+
+if [ "$(tty)" = "not a tty" ]; then
+    echo "   ⚠️  Not running from a TTY"
+else
+    echo "   ✅ Running from TTY: $(tty)"
+fi
+echo ""
+
+# Recommendations
+echo "💡 Recommendations:"
+echo ""
+
+ISSUES=0
+
+if pgrep -x "Xorg\|weston\|lxsession" > /dev/null; then
+    echo "1. ⚠️  CRITICAL: Stop the desktop environment"
+    echo "   sudo systemctl stop lightdm"
+    echo "   # OR for other DMs:"
+    echo "   sudo systemctl stop gdm"
+    echo "   sudo systemctl stop sddm"
+    echo ""
+    ISSUES=$((ISSUES + 1))
+fi
+
+if ! echo "$(groups)" | grep -q "video"; then
+    echo "2. ⚠️  Add user to video group:"
+    echo "   sudo usermod -a -G video $(whoami)"
+    echo "   Then logout and login again"
+    echo ""
+    ISSUES=$((ISSUES + 1))
+fi
+
+if [ ! -r "/dev/fb0" ] || [ ! -w "/dev/fb0" ]; then
+    echo "3. ⚠️  Fix framebuffer permissions"
+    echo "   (Should be fixed by adding to video group)"
+    echo ""
+    ISSUES=$((ISSUES + 1))
+fi
+
+if [ $ISSUES -eq 0 ]; then
+    echo "✅ All checks passed! Ready to run in EGLFS mode"
+    echo ""
+    echo "Start with:"
+    echo "   ./run.sh --kiosk"
+else
+    echo "❌ Found $ISSUES issue(s) that need to be fixed"
+    echo ""
+    echo "After fixing, reboot or re-login for group changes to take effect"
+fi
+echo ""

+ 209 - 0
dune-weaver-touch/check-packages.sh

@@ -0,0 +1,209 @@
+#!/bin/bash
+# Check for required system packages for Qt EGLFS on Raspberry Pi
+
+echo "📦 System Package Check for Dune Weaver Touch"
+echo "=============================================="
+echo ""
+
+# Color codes for output
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+YELLOW='\033[1;33m'
+NC='\033[0m' # No Color
+
+MISSING_PACKAGES=()
+INSTALLED_PACKAGES=()
+
+# Function to check if package is installed
+check_package() {
+    local package=$1
+    local description=$2
+
+    if dpkg -l | grep -q "^ii  $package "; then
+        echo -e "   ${GREEN}✅${NC} $package - $description"
+        INSTALLED_PACKAGES+=("$package")
+        return 0
+    else
+        echo -e "   ${RED}❌${NC} $package - $description"
+        MISSING_PACKAGES+=("$package")
+        return 1
+    fi
+}
+
+# Core Python packages
+echo "🐍 Python & Build Tools:"
+check_package "python3" "Python 3 interpreter"
+check_package "python3-pip" "Python package installer"
+check_package "python3-venv" "Python virtual environment"
+check_package "python3-dev" "Python development headers"
+check_package "build-essential" "C/C++ compiler and build tools"
+echo ""
+
+# Qt6 and graphics libraries
+echo "🎨 Qt6 & Graphics Libraries:"
+check_package "qt6-base-dev" "Qt6 base development files"
+check_package "qt6-declarative-dev" "Qt6 QML/QtQuick development"
+check_package "libqt6core6" "Qt6 core library"
+check_package "libqt6gui6" "Qt6 GUI library"
+check_package "libqt6qml6" "Qt6 QML library"
+check_package "libqt6quick6" "Qt6 Quick library"
+check_package "qml6-module-qtquick" "Qt6 Quick QML module"
+check_package "qml6-module-qtquick-controls" "Qt6 Quick Controls"
+check_package "qml6-module-qtquick-layouts" "Qt6 Quick Layouts"
+check_package "qml6-module-qtquick-window" "Qt6 Quick Window"
+echo ""
+
+# EGL and OpenGL ES
+echo "🖼️  EGL & OpenGL ES:"
+check_package "libegl1" "EGL library"
+check_package "libgles2" "OpenGL ES 2.0 library"
+check_package "libegl1-mesa" "Mesa EGL library"
+check_package "libgles2-mesa" "Mesa OpenGL ES library" || check_package "libgles2" "OpenGL ES library (alternative)"
+check_package "libgl1-mesa-dri" "Mesa DRI drivers"
+check_package "libgbm1" "Generic Buffer Management"
+echo ""
+
+# DRM and input
+echo "🎮 DRM & Input:"
+check_package "libdrm2" "Direct Rendering Manager"
+check_package "libdrm-dev" "DRM development files"
+check_package "libgbm-dev" "GBM development files"
+check_package "libinput10" "Input device handling"
+check_package "libinput-dev" "Input development files"
+check_package "libudev1" "udev library"
+check_package "libudev-dev" "udev development files"
+check_package "libxkbcommon0" "XKB common library"
+check_package "libxkbcommon-dev" "XKB development files"
+echo ""
+
+# Qt6 Virtual Keyboard (optional but recommended)
+echo "⌨️  Qt6 Virtual Keyboard (Optional):"
+check_package "qt6-virtualkeyboard-plugin" "Qt6 virtual keyboard plugin"
+check_package "qml6-module-qtquick-virtualkeyboard" "Qt6 virtual keyboard QML module"
+echo ""
+
+# Qt6 Wayland support (for desktop testing)
+echo "🪟 Qt6 Wayland (For Desktop Testing):"
+check_package "qt6-wayland" "Qt6 Wayland platform plugin"
+echo ""
+
+# Utilities
+echo "🔧 Utilities:"
+check_package "fbset" "Framebuffer device maintenance"
+check_package "evtest" "Input device event testing"
+check_package "curl" "HTTP client for API calls"
+echo ""
+
+# Raspberry Pi specific firmware/tools
+echo "🥧 Raspberry Pi Specific:"
+if [ -f /boot/config.txt ]; then
+    echo -e "   ${GREEN}✅${NC} Raspberry Pi detected"
+
+    # Check for VC4/V3D graphics driver
+    if lsmod | grep -q "vc4"; then
+        echo -e "   ${GREEN}✅${NC} VC4 graphics driver loaded"
+    elif lsmod | grep -q "v3d"; then
+        echo -e "   ${GREEN}✅${NC} V3D graphics driver loaded"
+    else
+        echo -e "   ${YELLOW}⚠️${NC}  No VC4/V3D driver loaded (may need to enable)"
+        echo "      Check /boot/config.txt for: dtoverlay=vc4-kms-v3d"
+    fi
+
+    # Check for firmware
+    if [ -d /opt/vc ]; then
+        echo -e "   ${GREEN}✅${NC} VideoCore firmware present"
+    fi
+else
+    echo -e "   ${YELLOW}ℹ️${NC}  Not a Raspberry Pi"
+fi
+echo ""
+
+# Summary
+echo "📊 Summary:"
+echo "=========="
+echo -e "Installed packages: ${GREEN}${#INSTALLED_PACKAGES[@]}${NC}"
+echo -e "Missing packages:   ${RED}${#MISSING_PACKAGES[@]}${NC}"
+echo ""
+
+if [ ${#MISSING_PACKAGES[@]} -gt 0 ]; then
+    echo -e "${RED}❌ Missing Required Packages:${NC}"
+    for pkg in "${MISSING_PACKAGES[@]}"; do
+        echo "   - $pkg"
+    done
+    echo ""
+
+    echo "💡 Install missing packages with:"
+    echo ""
+    echo "sudo apt update"
+    echo "sudo apt install -y \\"
+    for pkg in "${MISSING_PACKAGES[@]}"; do
+        echo "    $pkg \\"
+    done | sed '$ s/ \\$//'
+    echo ""
+else
+    echo -e "${GREEN}✅ All required packages are installed!${NC}"
+    echo ""
+fi
+
+# Additional checks
+echo "🔍 Additional Checks:"
+echo ""
+
+# Check kernel modules
+echo "Kernel Modules:"
+REQUIRED_MODULES="drm vc4"
+for mod in $REQUIRED_MODULES; do
+    if lsmod | grep -q "^$mod "; then
+        echo -e "   ${GREEN}✅${NC} $mod loaded"
+    else
+        echo -e "   ${YELLOW}⚠️${NC}  $mod not loaded (may be built-in or not needed)"
+    fi
+done
+echo ""
+
+# Check GPU memory (Raspberry Pi specific)
+if command -v vcgencmd &> /dev/null; then
+    echo "GPU Memory:"
+    GPU_MEM=$(vcgencmd get_mem gpu | cut -d= -f2)
+    GPU_MEM_NUM=$(echo $GPU_MEM | sed 's/M//')
+    if [ "$GPU_MEM_NUM" -ge 128 ]; then
+        echo -e "   ${GREEN}✅${NC} GPU Memory: $GPU_MEM (sufficient)"
+    else
+        echo -e "   ${YELLOW}⚠️${NC}  GPU Memory: $GPU_MEM (recommend at least 128M)"
+        echo "      💡 Edit /boot/config.txt and add: gpu_mem=128"
+    fi
+    echo ""
+fi
+
+# Check for conflicting packages
+echo "🚫 Checking for Conflicts:"
+DESKTOP_PACKAGES="xserver-xorg lightdm gdm3 sddm lxde"
+FOUND_DESKTOP=0
+for pkg in $DESKTOP_PACKAGES; do
+    if dpkg -l | grep -q "^ii  $pkg "; then
+        echo -e "   ${YELLOW}⚠️${NC}  $pkg installed (may conflict with EGLFS kiosk mode)"
+        FOUND_DESKTOP=1
+    fi
+done
+
+if [ $FOUND_DESKTOP -eq 0 ]; then
+    echo -e "   ${GREEN}✅${NC} No conflicting desktop packages found"
+else
+    echo ""
+    echo "   💡 For kiosk mode, consider:"
+    echo "      sudo systemctl disable lightdm  # Disable desktop auto-start"
+    echo "      sudo systemctl set-default multi-user.target  # Boot to console"
+fi
+echo ""
+
+# Final recommendation
+if [ ${#MISSING_PACKAGES[@]} -eq 0 ]; then
+    echo "🎉 System is ready for Dune Weaver Touch!"
+    echo ""
+    echo "Next steps:"
+    echo "   1. Run: ./check-display.sh    # Check display/framebuffer"
+    echo "   2. Run: ./run.sh --kiosk      # Test the application"
+else
+    echo "⚠️  Install missing packages first, then run this script again"
+fi
+echo ""

+ 32 - 8
dune-weaver-touch/install.sh

@@ -31,32 +31,56 @@ install_system_packages() {
     echo "📦 Installing system dependencies..."
 
     apt-get update
+
+    # Core system packages - essential for EGLFS
+    echo "   📦 Installing core graphics libraries..."
     apt-get install -y \
         libegl1 \
         libgles2 \
+        libegl1-mesa \
         libgl1-mesa-dri \
         libgbm1 \
-        qt6-wayland \
         libgbm-dev \
+        libdrm2 \
         libdrm-dev \
+        libinput10 \
         libinput-dev \
+        libudev1 \
         libudev-dev \
+        libxkbcommon0 \
         libxkbcommon-dev \
         fbset \
-        evtest || {
-        echo "   ⚠️  Some packages may not be available, continuing..."
+        evtest \
+        curl || {
+        echo "   ⚠️  Some core packages failed to install"
+    }
+
+    # Qt6 packages - may not all be available depending on OS version
+    echo "   📦 Installing Qt6 packages..."
+    apt-get install -y \
+        qt6-base-dev \
+        qt6-declarative-dev \
+        libqt6core6 \
+        libqt6gui6 \
+        libqt6qml6 \
+        libqt6quick6 \
+        qml6-module-qtquick \
+        qml6-module-qtquick-controls \
+        qml6-module-qtquick-layouts \
+        qml6-module-qtquick-window \
+        qt6-wayland 2>/dev/null || {
+        echo "   ⚠️  Some Qt6 packages not available (may need manual installation)"
     }
 
-    # Install Qt6 virtual keyboard packages if available (optional)
+    # Qt6 virtual keyboard packages (optional)
+    echo "   📦 Installing Qt6 virtual keyboard (optional)..."
     apt-get install -y \
-        qtvirtualkeyboard-plugin \
-        qml-module-qtquick-virtualkeyboard \
         qt6-virtualkeyboard-plugin \
-        qml6-module-qt-labs-qmlmodels 2>/dev/null || {
+        qml6-module-qtquick-virtualkeyboard 2>/dev/null || {
         echo "   ℹ️  Qt6 virtual keyboard not available on this system"
     }
 
-    echo "   📦 System packages installed"
+    echo "   ✅ System packages installation complete"
 }
 
 # Function to install system scripts

+ 16 - 0
dune-weaver-touch/run.sh

@@ -3,6 +3,22 @@
 
 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
 
+# Check if running as root/sudo - this causes EGL issues!
+if [ "$EUID" -eq 0 ]; then
+    echo "❌ ERROR: Do NOT run this script with sudo!"
+    echo ""
+    echo "   Running as root causes EGL/GPU permission issues."
+    echo "   Run as a regular user instead:"
+    echo ""
+    echo "   ./run.sh --kiosk"
+    echo ""
+    echo "   If you get permission errors, add your user to the video group:"
+    echo "   sudo usermod -a -G video \$USER"
+    echo "   newgrp video"
+    echo ""
+    exit 1
+fi
+
 # Check if virtual environment exists
 if [ ! -d "$SCRIPT_DIR/venv" ]; then
     echo "❌ Virtual environment not found!"