diagnose.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/bin/bash
  2. # Diagnostic script for Dune Weaver Touch service issues
  3. echo "🔍 Dune Weaver Touch - Service Diagnostics"
  4. echo "=========================================="
  5. echo ""
  6. # Check if service exists
  7. echo "📋 Service Status:"
  8. if systemctl list-unit-files | grep -q "dune-weaver-touch.service"; then
  9. echo " ✅ Service file exists"
  10. systemctl status dune-weaver-touch.service --no-pager -l || true
  11. else
  12. echo " ❌ Service not installed"
  13. fi
  14. echo ""
  15. # Check service logs
  16. echo "📝 Recent Service Logs (last 20 lines):"
  17. journalctl -u dune-weaver-touch.service -n 20 --no-pager || echo " ℹ️ No logs available"
  18. echo ""
  19. # Check backend availability
  20. echo "🌐 Backend Status:"
  21. if curl -s --connect-timeout 2 http://localhost:8080/serial_status > /dev/null 2>&1; then
  22. echo " ✅ Backend is running at localhost:8080"
  23. else
  24. echo " ❌ Backend not available at localhost:8080"
  25. echo " 💡 Start backend with: cd ~/dune-weaver && python main.py"
  26. fi
  27. echo ""
  28. # Check virtual environment
  29. echo "🐍 Virtual Environment:"
  30. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  31. if [ -d "$SCRIPT_DIR/venv" ]; then
  32. echo " ✅ Virtual environment exists"
  33. if [ -f "$SCRIPT_DIR/venv/bin/python" ]; then
  34. echo " ✅ Python executable found"
  35. PYTHON_VERSION=$("$SCRIPT_DIR/venv/bin/python" --version 2>&1)
  36. echo " Version: $PYTHON_VERSION"
  37. else
  38. echo " ❌ Python executable missing"
  39. fi
  40. if [ -f "$SCRIPT_DIR/venv/bin/pip" ]; then
  41. echo " ✅ pip is available"
  42. else
  43. echo " ❌ pip is missing - run: sudo ./fix-venv.sh"
  44. fi
  45. else
  46. echo " ❌ Virtual environment not found"
  47. echo " 💡 Run: sudo ./install.sh"
  48. fi
  49. echo ""
  50. # Check required Python packages
  51. echo "📦 Required Packages:"
  52. if [ -f "$SCRIPT_DIR/venv/bin/pip" ]; then
  53. PACKAGES="PySide6 requests qasync"
  54. for pkg in $PACKAGES; do
  55. if "$SCRIPT_DIR/venv/bin/pip" show "$pkg" > /dev/null 2>&1; then
  56. VERSION=$("$SCRIPT_DIR/venv/bin/pip" show "$pkg" | grep "Version:" | cut -d' ' -f2)
  57. echo " ✅ $pkg ($VERSION)"
  58. else
  59. echo " ❌ $pkg - not installed"
  60. fi
  61. done
  62. else
  63. echo " ⚠️ Cannot check packages - pip not available"
  64. fi
  65. echo ""
  66. # Check graphics/display
  67. echo "🖥️ Graphics Environment:"
  68. if [ -n "$DISPLAY" ]; then
  69. echo " DISPLAY=$DISPLAY"
  70. else
  71. echo " ℹ️ No DISPLAY variable (OK for EGLFS mode)"
  72. fi
  73. if [ -c "/dev/fb0" ]; then
  74. echo " ✅ Framebuffer device available (/dev/fb0)"
  75. if [ -r "/dev/fb0" ] && [ -w "/dev/fb0" ]; then
  76. echo " ✅ Framebuffer is readable/writable"
  77. else
  78. echo " ⚠️ Framebuffer permissions issue"
  79. echo " Current user: $(whoami)"
  80. echo " Groups: $(groups)"
  81. echo " 💡 Add user to 'video' group: sudo usermod -a -G video $(whoami)"
  82. fi
  83. else
  84. echo " ❌ Framebuffer device not found"
  85. fi
  86. echo ""
  87. # Check if desktop is running
  88. echo "🪟 Desktop Environment:"
  89. if pgrep -x "lxsession" > /dev/null || pgrep -x "startx" > /dev/null || pgrep -x "xinit" > /dev/null; then
  90. echo " ⚠️ Desktop environment is running"
  91. echo " 💡 For kiosk mode, disable desktop auto-start:"
  92. echo " sudo raspi-config → System Options → Boot/Auto Login → Console Autologin"
  93. echo " 💡 Or the service will take over the display in EGLFS mode"
  94. else
  95. echo " ✅ No desktop environment detected (good for kiosk)"
  96. fi
  97. echo ""
  98. # Check auto-login
  99. echo "👤 Auto-Login Status:"
  100. if [ -f "/etc/systemd/system/getty@tty1.service.d/autologin.conf" ]; then
  101. echo " ✅ Auto-login configured"
  102. cat /etc/systemd/system/getty@tty1.service.d/autologin.conf | grep "ExecStart"
  103. else
  104. echo " ❌ Auto-login not configured"
  105. echo " 💡 Run: sudo ./setup-autologin.sh"
  106. fi
  107. echo ""
  108. # Recommendations
  109. echo "💡 Troubleshooting Tips:"
  110. echo ""
  111. echo "1. Test manually first:"
  112. echo " cd $SCRIPT_DIR"
  113. echo " ./run.sh --kiosk"
  114. echo ""
  115. echo "2. If backend isn't running, start it:"
  116. echo " cd ~/dune-weaver && python main.py &"
  117. echo ""
  118. echo "3. Check service logs in real-time:"
  119. echo " sudo journalctl -u dune-weaver-touch -f"
  120. echo ""
  121. echo "4. Restart the service:"
  122. echo " sudo systemctl restart dune-weaver-touch"
  123. echo ""
  124. echo "5. If desktop conflicts, disable it:"
  125. echo " sudo raspi-config → Boot Options → Console Autologin"
  126. echo ""