¿Cómo ejecutar un script en el arranque en CM12.1?

9

La mayoría de las preguntas que puedo encontrar relacionadas con esto están fechadas en 2011 y por ahí, así que quizás no sea demasiado sorprendente que las cosas hayan cambiado desde entonces. He intentado un montón de cosas, sin ningún resultado.

Hay algunos scripts en /system/etc/init.d(que también aparecen /etc/init.den mi dispositivo). En particular, hay un 00bannerscript que debe registrar un mensaje de bienvenida. El mensaje de bienvenida nunca aparece en logcat.

He colocado mi propio script aquí, que finalmente se redujo a nada más que esto:

#!/system/bin/sh
log -t mytest Testing

Nada. Nunca aparece en logcat a menos que se ejecute manualmente a través de la terminal. Entonces funciona.

También hay un 90userinitarchivo aquí, que invoca /data/local/userinit.shsi existe. Lo he creado con el mismo contenido que el anterior. De nuevo, nunca aparece nada en logcat. Lo cual no es sorprendente, realmente, ya que si 00bannerno funciona, entonces tampoco lo haría.

Busqué cualquier cosa llamada "init.rc" pero nada de eso existe en mi dispositivo.

Todos mis scripts tienen 755 permisos.

¿Qué más puedo probar? (aparte de las aplicaciones que ejecutan scripts para mí)

RomanSt
fuente
¿Qué secuencia de comandos que desea ejecutar, y por qué?
unforgettableidSupportsMonica
Lamentablemente, la pequeña cantidad de excavación que hice resultó en "No funcionará en roms personalizadas". Aparentemente, CM tiene su propia forma de hacer las cosas. No estoy seguro de querer meterse con eso. Pero aparentemente puedes construir tu propio archivo boot.img y agregar tus scripts personalizados a eso. Tal vez eso funcione para ti.
jer3my
@ jer3my Estoy perfectamente feliz de aceptar eso como la respuesta real y asignar la recompensa si tienes enlaces que encontraré convincentes / autorizados.
RomanSt
Publicaré la respuesta en un segundo, también encontré algo más que podría ayudarte.
jer3my
init.rc es parte de initramfs, no está incluido en boot.img, puede usar una herramienta como unmkbootimg para extraerlo, editarlo y luego reconstruirlo usando mkbootimg, las dos herramientas están disponibles en el proyecto cm, dígame qué están usando los compilaré para usted: D
lord-ralf-adolf

Respuestas:

5

hay un método simple para agregar soporte init.d a cualquier Android rooteado para las versiones 4.0 y superiores, google creó una secuencia de comandos que se ejecuta en el arranque como superusuario, la secuencia de comandos install-recovery.shse usa para actualizar la recuperación de stock en cada arranque que pensaron que era un buen seguridad para evitar recuperaciones personalizadas, pero abrió un nuevo agujero que los usuarios pueden aprovechar para falsificar la función init.d. Dependencias : para que este método funcione, necesita lo siguiente

  1. Cuadro ocupado instalado con el run-partsenlace simbólico a su ruta como/system/xbin
  2. Obviamente necesitarás un teléfono rooteado con la /systemcapacidad de montarse comorw
  3. La versión del kernel no importa.

Método I: (¡La forma más fácil!)

  1. Descargue este APK (de uso gratuito, no refleje, gracias @Ryuinferno de XDA).
  2. Instala el apk como cualquier aplicación normal.
  3. Inicia la aplicación.
  4. haga clic en Activar! eso es todo, setinit.d ahora es compatible, puede hacer clic en el botón de prueba o reiniciar su teléfono para ver si sus scripts init.d han salido
  5. puede desinstalar la aplicación, no afectará el soporte init.d

Método II: (dificultad: media)

  1. Descargue este zip, descomprímalo y coloque init.sh en su tarjeta SD (en este ejemplo /sdcard, puede cambiar de un dispositivo a otro.

  2. ahora abra una terminal, o use adb shelldesde la computadora y ejecute el script.
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

el script se ejecutará y le pedirá que reinicie dos veces, eso es todo lo que tiene oficialmente soporte init.d: ​​D

Referencia: [MOD] [APK + SCRIPT + ZIP] ¡Habilite Init.d para cualquier teléfono sin necesidad de núcleos personalizados!

señor-ralf-adolf
fuente
Como el archivo zip está alojado en XDA, debe haber un tutorial que haya seguido o que haya conocido de alguna manera. ¿Podrías mencionar el enlace? Necesito buscar algo más en él. :)
Señor del Fuego
1
@Firelord, sí, el script no es mío, se usó para otro propósito, lo tomé de aquí en la vista de publicación única> forum.xda-developers.com/… , el tutorial completo trata sobre xposed y nexus 6 >> forum.xda -developers.com/nexus-6/general/…
lord-ralf-adolf
@Firelord encuentra un nuevo enlace de referencia incluido en la respuesta :)
lord-ralf-adolf
Gracias, probablemente te daré la recompensa a menos que aparezca algo aún más simple. Pero honestamente pensé que agregar un script de shell para ejecutar en el arranque sería lo más simple que uno podría hacer en algo como CM. Claramente no lo es; es más complicado que codificar una aplicación boot_completed que hace lo que quiero, así que lo haré en su lugar.
RomanSt
@romkyns old cm admite init.d de forma predeterminada, pero desde que se convirtió en una compañía, sus formas han cambiado, aunque el problema init.d está en la nueva versión de lollipop con una estricta política de selinux / boot_completed, también es una forma de hacerlo. dijo que será más simple
lord-ralf-adolf
2

Editar: vi la publicación final, de esta manera, intentaré agregar sin aplicaciones lo antes posible (no en casa, publicar usando dispositivos móviles), pero puede usar esto, si algo no funciona.

Puedes intentar usar la aplicación llamada Tasker .

Cuesta 3.29 $ y requiere acceso de root, pero puede ejecutar scripts de Shell. Además, tiene una versión de prueba para que pueda probar antes de comprar.

Primero crea Tarea. Vaya a la pestaña Tarea, toque + signo, ingrese el nombre de la tarea. Ahora ve de nuevo + signo, y escribe shellfiltro. Encontrará la opción Run Shell, selecciónela y configúrela según sus necesidades.

Después de eso, regrese a la primera pestaña: Perfiles, toque + signo para crear uno nuevo. Seleccione Evento como tipo, vaya Sistema y seleccione Arranque del dispositivo. Regrese y se le pedirá que seleccione la tarea. ¡Ahora seleccione la tarea creada previamente y está listo para comenzar!

AndroidNotSoPowerUser
fuente
1

Esto requiere que muestres un zip pero luego puedes poner tus scripts en / system / etc / startup y luego deberían iniciarse automáticamente con el teléfono.

http://forum.xda-developers.com/showthread.php?t=2664645

También de mi comentario bajo la pregunta. Intenté buscar en mi historial, pero no pude encontrar el enlace donde la gente decía que CM tenía su propia forma de ejecutar scripts en el arranque.

Editar. Después de un poco más de excavación, no es CM, por decir, que hace lo suyo para los scripts. Es el núcleo. No todos los núcleos admiten init.d para Android. Si publica qué dispositivo está utilizando. Puedo buscar un núcleo que admita scripts personalizados en el arranque para usted.

jer3my
fuente
0

También tengo el mismo problema al ejecutar el archivo de script en la terminal en CM12.1. La solución es copiar el script a la /datacarpeta y ejecutarlo. Entonces, creo que CM 12 solo permite el script ejecutable desde cierta ubicación.

Entaah Laah
fuente
0

Manera simple (trabajando):

  1. Prepare sus comandos posteriores al inicio en un script, digamos / system / xbin / post-boot (establezca la permanente exec)

  2. Agregue la ruta de script personalizada anterior al final de /system/etc/init.qcom.post_boot.sh

P.ej:

echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh

¡Hecho!

(Si no puede encontrar el qcom post_boot (dispositivos Qualcomm), busque los scripts post_boot)

Seff
fuente
-1

Siguiendo los pasos para ejecutar scripts en el momento del arranque. (Adb requerido)

  1. raíz adb
  2. montaje de adb
  3. adb pull /init.rc
  4. editar init.rc agrega línea para ejecutar script como sh test.sh
  5. adb push init.rc /
  6. adb shell
  7. chmod 755 init.rc
  8. reinicio adb

funciona para mi Espero que esto te ayude.

DreamCoder
fuente
1
Este método no debería funcionar en absoluto. El contenido de los rootfs iniciales como init.rc son parte del ramdisk que se restaura desde su dispositivo flash cada arranque. Debe modificar el disco RAM directamente en la partición adecuada de la memoria flash de su dispositivo
dividido por cero el
Que puede agregar a /system/etc/init.qcom.wifi.sh
DreamCoder el
1
este método no funcionará, ¡init.d no puede ser empujado! es parte de initramfs, deben editarse en boot.img antes de flashearse nuevamente, y para init.qcom.wifi.sh es específico del dispositivo, no puede hacer una regla general a partir de él
lord-ralf-adolf