test-egl.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!/bin/bash
  2. # Test EGL initialization with detailed debugging
  3. echo "🔍 EGL Initialization Test"
  4. echo "=========================="
  5. echo ""
  6. # Check current user
  7. echo "👤 Current User:"
  8. echo " User: $(whoami)"
  9. echo " UID: $(id -u)"
  10. echo " Groups: $(groups)"
  11. echo ""
  12. # Check DRM/GPU devices and permissions
  13. echo "🎨 DRM/GPU Devices:"
  14. if [ -d "/dev/dri" ]; then
  15. echo " /dev/dri contents:"
  16. ls -la /dev/dri/
  17. echo ""
  18. # Check which devices are accessible
  19. for device in /dev/dri/*; do
  20. if [ -r "$device" ] && [ -w "$device" ]; then
  21. echo " ✅ $device - accessible"
  22. else
  23. echo " ❌ $device - NOT accessible"
  24. ls -l "$device"
  25. fi
  26. done
  27. else
  28. echo " ⚠️ /dev/dri not found"
  29. fi
  30. echo ""
  31. # Check framebuffer
  32. echo "📺 Framebuffer:"
  33. if [ -c "/dev/fb0" ]; then
  34. ls -l /dev/fb0
  35. if [ -r "/dev/fb0" ] && [ -w "/dev/fb0" ]; then
  36. echo " ✅ /dev/fb0 accessible"
  37. else
  38. echo " ❌ /dev/fb0 NOT accessible"
  39. fi
  40. else
  41. echo " ❌ /dev/fb0 not found"
  42. fi
  43. echo ""
  44. # Check what's using the display
  45. echo "🔒 Display Usage:"
  46. if command -v lsof &> /dev/null; then
  47. echo " Processes using /dev/fb0:"
  48. lsof /dev/fb0 2>/dev/null || echo " (none)"
  49. echo ""
  50. if [ -d "/dev/dri" ]; then
  51. echo " Processes using DRM devices:"
  52. for device in /dev/dri/*; do
  53. PROCS=$(lsof "$device" 2>/dev/null)
  54. if [ -n "$PROCS" ]; then
  55. echo " $device:"
  56. echo "$PROCS"
  57. fi
  58. done
  59. fi
  60. else
  61. echo " lsof not available"
  62. fi
  63. echo ""
  64. # Check for VC4 driver (Raspberry Pi)
  65. echo "🎮 Graphics Driver:"
  66. if lsmod | grep -q "vc4"; then
  67. echo " ✅ vc4 driver loaded"
  68. lsmod | grep vc4
  69. elif lsmod | grep -q "v3d"; then
  70. echo " ✅ v3d driver loaded"
  71. lsmod | grep v3d
  72. else
  73. echo " ⚠️ No VC4/V3D driver detected"
  74. fi
  75. echo ""
  76. # Check GPU memory (Raspberry Pi)
  77. if command -v vcgencmd &> /dev/null; then
  78. echo "🧠 GPU Memory:"
  79. vcgencmd get_mem gpu
  80. echo ""
  81. fi
  82. # Test with minimal Qt app
  83. echo "🧪 Testing Qt EGL Initialization..."
  84. echo ""
  85. # Create minimal test Python script
  86. cat > /tmp/test_egl.py << 'EOF'
  87. import sys
  88. import os
  89. # Set environment for EGLFS
  90. os.environ['QT_QPA_PLATFORM'] = 'eglfs'
  91. os.environ['QT_QPA_EGLFS_WIDTH'] = '800'
  92. os.environ['QT_QPA_EGLFS_HEIGHT'] = '480'
  93. os.environ['QT_LOGGING_RULES'] = 'qt.qpa.*=true'
  94. print("Attempting to initialize Qt with EGLFS...")
  95. print(f"User: {os.getuid()}")
  96. print(f"Groups: {os.getgroups()}")
  97. try:
  98. from PySide6.QtGui import QGuiApplication
  99. from PySide6.QtQml import QQmlApplicationEngine
  100. print("✅ PySide6 imported successfully")
  101. app = QGuiApplication(sys.argv)
  102. print("✅ QGuiApplication created")
  103. # This is where EGL initialization happens
  104. print("Platform:", app.platformName())
  105. print("✅ SUCCESS: EGL initialized!")
  106. sys.exit(0)
  107. except Exception as e:
  108. print(f"❌ FAILED: {e}")
  109. import traceback
  110. traceback.print_exc()
  111. sys.exit(1)
  112. EOF
  113. # Run the test
  114. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  115. if [ -f "$SCRIPT_DIR/venv/bin/python" ]; then
  116. echo "Running test with venv Python..."
  117. "$SCRIPT_DIR/venv/bin/python" /tmp/test_egl.py
  118. EXIT_CODE=$?
  119. echo ""
  120. if [ $EXIT_CODE -eq 0 ]; then
  121. echo "✅ EGL test PASSED - Qt can initialize EGLFS"
  122. echo " The issue may be application-specific"
  123. else
  124. echo "❌ EGL test FAILED - System cannot initialize EGLFS"
  125. echo ""
  126. echo "Common fixes:"
  127. echo "1. Add user to video group: sudo usermod -a -G video $(whoami)"
  128. echo "2. Add user to render group: sudo usermod -a -G render $(whoami)"
  129. echo "3. Logout and login again (or: newgrp video)"
  130. echo "4. Stop any desktop: sudo systemctl stop lightdm"
  131. echo "5. Check GPU memory: vcgencmd get_mem gpu (should be ≥128M)"
  132. fi
  133. else
  134. echo "❌ Virtual environment not found"
  135. echo " Run: sudo ./install.sh"
  136. fi
  137. # Cleanup
  138. rm -f /tmp/test_egl.py
  139. echo ""