Estoy trabajando en un proyecto de raspberry pi que implica ejecutar un servidor de nodo en modo quiosco.
Estoy usando BROWSER=none para suprimir la apertura predeterminada de localhost cuando se ejecuta el servidor.
Estoy pensando que debería poder usar wait-on para obligar a la secuencia de comandos bash que ejecuta el modo de quiosco a esperar hasta que el servidor esté completamente activo. ¿Usaría algo como esto?
"scripts": { ... "kiosk": "concurrently -n \"npm start\" \"wait-on http://localhost:3000 & /home/pi/kiosk.sh\"" },Me da los siguientes errores que no soy capaz de descifrar:
[npm start] server does not have extension for -dpms option [npm start] libEGL warning: DRI2: failed to authenticate [npm start] [1498:1498:1125/180040.467781:ERROR:gpu_init.cc(441)] Passthrough is not supported, GL is egl [npm start] [1498:1498:1125/180040.786918:ERROR:viz_main_impl.cc(162)] Exiting GPU process due to errors during initialization [npm start] [1558:1558:1125/180041.392714:ERROR:gpu_init.cc(441)] Passthrough is not supported, GL is swiftshader [npm start] [1443:1590:1125/180042.359030:ERROR:object_proxy.cc(622)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files [npm start] [1443:1590:1125/180042.364570:ERROR:object_proxy.cc(622)] Failed to call method: org.freedesktop.UPower.GetDisplayDevice: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files [npm start] [1443:1590:1125/180042.367155:ERROR:object_proxy.cc(622)] Failed to call method: org.freedesktop.UPower.EnumerateDevices: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files [npm start] Fontconfig error: Cannot load default config file: No such file: (null) Ahora me doy cuenta de que el error en mi código tiene más que ver con kiosk.sh que con los comandos npm . Aquí está el código para kiosk.sh :
#!/bin/bash xset s noblank xset s off xset -dpms unclutter -root & sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences /usr/bin/chromium-browser --noerrdialogs --disable-infobars --kiosk http://localhost:3000/ && y && significan cosas diferentes, && significa Y, & significa proceso en segundo plano, ejecute ese servicio en segundo plano y continúe con el siguiente.
Creo que lo que está tratando de hacer es wait-on service && example , no wait-on service & example .
Lo que sucederá con lo que ha hecho es que ejecutará la espera, luego lo procesará inmediatamente en segundo plano y luego ejecutará inmediatamente el script de shell sin esperar nada. Su secuencia de comandos se ejecutará antes de que el servidor esté activo.
Sin embargo, ese no es realmente su problema, creo que su problema es con el cromo en sí. Hay un problema abierto aquí: https://bugs.chromium.org/p/chromium/issues/detail?id=1221905&q=Passthrough%20is%20not%20supported%2C%20GL%20is%20swiftshader&can=1 . Ese problema se actualizó por última vez a principios de este año y parece que aún no está resuelto.
También hubo otra respuesta aquí: Passthrough no es compatible, GL está deshabilitado .
He visto a bastantes personas sugerir que uses --headless y --disable-gpu y --disable-software-rasterizer . La gente ha mencionado que algunas de esas opciones solo se requieren en Windows y algunas ya se han solucionado, no sé cuáles son realmente necesarias.
Esta respuesta aquí: Force headless chromium/chrome para usar gpu real en lugar de Google SwiftShader , mencionó que puede forzar webgl usando --enable-webgl para evitar que cargue swiftshader y use gpu. Puede hacer esto si necesita forzarlo en modo sin cabeza.
Parece tener algo que ver con webgl o aceleración de hardware. Aparentemente, sucede si ha deshabilitado la aceleración de gpu y luego se ve obligado a recurrir a swiftloader.
No sé cuál de ellos realmente te ayudará, tendrás que jugar con él. Sin embargo, he visto más de 10 cromo diferentes y otros problemas relacionados, todos realizados durante 2021 debido a este error en cromo.
Lo que es más, no estoy seguro de que en realidad sea un error crítico, algunas personas mencionan que solo muestra el error, pero que puede ignorarse. No sé si ese es el caso.
Supongo que está utilizando el paquete "wait-on" ( https://www.npmjs.com/package/wait-on ). El comando wait-on se usa sin npm delante.
Tratar de usar
wait-on http://localhost:3000 && /home/pi/kiosk.shPuede usar el paquete npm "child_process" para ejecutar su script bash una vez que el servidor esté listo. Suponiendo que usa Express.js en su backend, esto debería funcionar con pocas modificaciones
const exec = require('child_process'); //all your other codes and whatevers app.listen(3000, () => { var kiosk = exec('sh kiosk.sh', (error, stdout, stderr) => { if (error) { console.log(`exec error: ${error}`); } }); });