check-packages.sh 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. #!/bin/bash
  2. # Check for required system packages for Qt EGLFS on Raspberry Pi
  3. echo "📦 System Package Check for Dune Weaver Touch"
  4. echo "=============================================="
  5. echo ""
  6. # Color codes for output
  7. RED='\033[0;31m'
  8. GREEN='\033[0;32m'
  9. YELLOW='\033[1;33m'
  10. NC='\033[0m' # No Color
  11. MISSING_PACKAGES=()
  12. INSTALLED_PACKAGES=()
  13. # Function to check if package is installed
  14. check_package() {
  15. local package=$1
  16. local description=$2
  17. if dpkg -l | grep -q "^ii $package "; then
  18. echo -e " ${GREEN}✅${NC} $package - $description"
  19. INSTALLED_PACKAGES+=("$package")
  20. return 0
  21. else
  22. echo -e " ${RED}❌${NC} $package - $description"
  23. MISSING_PACKAGES+=("$package")
  24. return 1
  25. fi
  26. }
  27. # Core Python packages
  28. echo "🐍 Python & Build Tools:"
  29. check_package "python3" "Python 3 interpreter"
  30. check_package "python3-pip" "Python package installer"
  31. check_package "python3-venv" "Python virtual environment"
  32. check_package "python3-dev" "Python development headers"
  33. check_package "build-essential" "C/C++ compiler and build tools"
  34. echo ""
  35. # Qt6 and graphics libraries
  36. echo "🎨 Qt6 & Graphics Libraries:"
  37. check_package "qt6-base-dev" "Qt6 base development files"
  38. check_package "qt6-declarative-dev" "Qt6 QML/QtQuick development"
  39. check_package "libqt6core6" "Qt6 core library"
  40. check_package "libqt6gui6" "Qt6 GUI library"
  41. check_package "libqt6qml6" "Qt6 QML library"
  42. check_package "libqt6quick6" "Qt6 Quick library"
  43. check_package "qml6-module-qtquick" "Qt6 Quick QML module"
  44. check_package "qml6-module-qtquick-controls" "Qt6 Quick Controls"
  45. check_package "qml6-module-qtquick-layouts" "Qt6 Quick Layouts"
  46. check_package "qml6-module-qtquick-window" "Qt6 Quick Window"
  47. echo ""
  48. # EGL and OpenGL ES
  49. echo "🖼️ EGL & OpenGL ES:"
  50. check_package "libegl1" "EGL library"
  51. check_package "libgles2" "OpenGL ES 2.0 library"
  52. check_package "libegl1-mesa" "Mesa EGL library"
  53. check_package "libgles2-mesa" "Mesa OpenGL ES library" || check_package "libgles2" "OpenGL ES library (alternative)"
  54. check_package "libgl1-mesa-dri" "Mesa DRI drivers"
  55. check_package "libgbm1" "Generic Buffer Management"
  56. echo ""
  57. # DRM and input
  58. echo "🎮 DRM & Input:"
  59. check_package "libdrm2" "Direct Rendering Manager"
  60. check_package "libdrm-dev" "DRM development files"
  61. check_package "libgbm-dev" "GBM development files"
  62. check_package "libinput10" "Input device handling"
  63. check_package "libinput-dev" "Input development files"
  64. check_package "libudev1" "udev library"
  65. check_package "libudev-dev" "udev development files"
  66. check_package "libxkbcommon0" "XKB common library"
  67. check_package "libxkbcommon-dev" "XKB development files"
  68. echo ""
  69. # Qt6 Virtual Keyboard (optional but recommended)
  70. echo "⌨️ Qt6 Virtual Keyboard (Optional):"
  71. check_package "qt6-virtualkeyboard-plugin" "Qt6 virtual keyboard plugin"
  72. check_package "qml6-module-qtquick-virtualkeyboard" "Qt6 virtual keyboard QML module"
  73. echo ""
  74. # Qt6 Wayland support (for desktop testing)
  75. echo "🪟 Qt6 Wayland (For Desktop Testing):"
  76. check_package "qt6-wayland" "Qt6 Wayland platform plugin"
  77. echo ""
  78. # Utilities
  79. echo "🔧 Utilities:"
  80. check_package "fbset" "Framebuffer device maintenance"
  81. check_package "evtest" "Input device event testing"
  82. check_package "curl" "HTTP client for API calls"
  83. echo ""
  84. # Raspberry Pi specific firmware/tools
  85. echo "🥧 Raspberry Pi Specific:"
  86. if [ -f /boot/config.txt ]; then
  87. echo -e " ${GREEN}✅${NC} Raspberry Pi detected"
  88. # Check for VC4/V3D graphics driver
  89. if lsmod | grep -q "vc4"; then
  90. echo -e " ${GREEN}✅${NC} VC4 graphics driver loaded"
  91. elif lsmod | grep -q "v3d"; then
  92. echo -e " ${GREEN}✅${NC} V3D graphics driver loaded"
  93. else
  94. echo -e " ${YELLOW}⚠️${NC} No VC4/V3D driver loaded (may need to enable)"
  95. echo " Check /boot/config.txt for: dtoverlay=vc4-kms-v3d"
  96. fi
  97. # Check for firmware
  98. if [ -d /opt/vc ]; then
  99. echo -e " ${GREEN}✅${NC} VideoCore firmware present"
  100. fi
  101. else
  102. echo -e " ${YELLOW}ℹ️${NC} Not a Raspberry Pi"
  103. fi
  104. echo ""
  105. # Summary
  106. echo "📊 Summary:"
  107. echo "=========="
  108. echo -e "Installed packages: ${GREEN}${#INSTALLED_PACKAGES[@]}${NC}"
  109. echo -e "Missing packages: ${RED}${#MISSING_PACKAGES[@]}${NC}"
  110. echo ""
  111. if [ ${#MISSING_PACKAGES[@]} -gt 0 ]; then
  112. echo -e "${RED}❌ Missing Required Packages:${NC}"
  113. for pkg in "${MISSING_PACKAGES[@]}"; do
  114. echo " - $pkg"
  115. done
  116. echo ""
  117. echo "💡 Install missing packages with:"
  118. echo ""
  119. echo "sudo apt update"
  120. echo "sudo apt install -y \\"
  121. for pkg in "${MISSING_PACKAGES[@]}"; do
  122. echo " $pkg \\"
  123. done | sed '$ s/ \\$//'
  124. echo ""
  125. else
  126. echo -e "${GREEN}✅ All required packages are installed!${NC}"
  127. echo ""
  128. fi
  129. # Additional checks
  130. echo "🔍 Additional Checks:"
  131. echo ""
  132. # Check kernel modules
  133. echo "Kernel Modules:"
  134. REQUIRED_MODULES="drm vc4"
  135. for mod in $REQUIRED_MODULES; do
  136. if lsmod | grep -q "^$mod "; then
  137. echo -e " ${GREEN}✅${NC} $mod loaded"
  138. else
  139. echo -e " ${YELLOW}⚠️${NC} $mod not loaded (may be built-in or not needed)"
  140. fi
  141. done
  142. echo ""
  143. # Check GPU memory (Raspberry Pi specific)
  144. if command -v vcgencmd &> /dev/null; then
  145. echo "GPU Memory:"
  146. GPU_MEM=$(vcgencmd get_mem gpu | cut -d= -f2)
  147. GPU_MEM_NUM=$(echo $GPU_MEM | sed 's/M//')
  148. if [ "$GPU_MEM_NUM" -ge 128 ]; then
  149. echo -e " ${GREEN}✅${NC} GPU Memory: $GPU_MEM (sufficient)"
  150. else
  151. echo -e " ${YELLOW}⚠️${NC} GPU Memory: $GPU_MEM (recommend at least 128M)"
  152. echo " 💡 Edit /boot/config.txt and add: gpu_mem=128"
  153. fi
  154. echo ""
  155. fi
  156. # Check for conflicting packages
  157. echo "🚫 Checking for Conflicts:"
  158. DESKTOP_PACKAGES="xserver-xorg lightdm gdm3 sddm lxde"
  159. FOUND_DESKTOP=0
  160. for pkg in $DESKTOP_PACKAGES; do
  161. if dpkg -l | grep -q "^ii $pkg "; then
  162. echo -e " ${YELLOW}⚠️${NC} $pkg installed (may conflict with EGLFS kiosk mode)"
  163. FOUND_DESKTOP=1
  164. fi
  165. done
  166. if [ $FOUND_DESKTOP -eq 0 ]; then
  167. echo -e " ${GREEN}✅${NC} No conflicting desktop packages found"
  168. else
  169. echo ""
  170. echo " 💡 For kiosk mode, consider:"
  171. echo " sudo systemctl disable lightdm # Disable desktop auto-start"
  172. echo " sudo systemctl set-default multi-user.target # Boot to console"
  173. fi
  174. echo ""
  175. # Final recommendation
  176. if [ ${#MISSING_PACKAGES[@]} -eq 0 ]; then
  177. echo "🎉 System is ready for Dune Weaver Touch!"
  178. echo ""
  179. echo "Next steps:"
  180. echo " 1. Run: ./check-display.sh # Check display/framebuffer"
  181. echo " 2. Run: ./run.sh --kiosk # Test the application"
  182. else
  183. echo "⚠️ Install missing packages first, then run this script again"
  184. fi
  185. echo ""