Agregar servicio para ejecutar script en init.rc no se ejecuta

Investigué preguntas anteriores con este tema, pero desafortunadamente nada ha funcionado.

Estoy tratando de deshabilitar la barra de estado de los usuarios que se deslizan desde la parte superior del dispositivo al iniciar con este comando en la consola adb (que se volverá a habilitar si reinicia el teléfono, los cambios se descartan después del reinicio):

service call activity 42 s16 com.android.systemui

para que cuando se inicie mi aplicación, no puedan deslizarse desde la parte superior para ver la barra de estado. Puse esa línea en un script llamado init_remove.sh con líneas a continuación:

#!/system/bin/sh
service call activity 42 s16 com.android.systemui 

cada vez que el usuario reinicia su teléfono, quiero que el archivo init.rc inicie un servicio para ejecutar ese script cada vez. Agregué estas líneas de código al final del archivo init.rc :

# service to remove status bar
service init_remove /system/etc/init_remove.sh
     user root
     oneshot

Luego volví a compilar el archivo uramdisk.img y lo empujé a mi dispositivo rooteado. El nuevo init.rc se puede ver con los cambios agregados, pero aún puedo deslizar el dedo desde la parte superior para ver la barra de estado.

Qué estoy haciendo mal

EDITAR: ahora incluso probé esto en el archivo init.rc para iniciar mi servicio a partir de la sugerencia a continuación:

on property:init.svc.zygote=running
    start init_remove

on property:init.svc.servicemanager=running
    start init_remove
     .
     .
     .

pero aún no hay cambios ... ¿son incorrectos los activadores de mi propiedad?

EDITAR 2 DÍAS DESPUÉS:

Así que ahora sé que mi servicio se está notando cuando se está ejecutando init, pero no se puede ejecutar debido a los problemas de permisos que se ven a continuación:

init: cannot execve('/system/bin/myscript'): Permission denied

como se ve en la salida de la consola. Mi nuevo servicio actualizado en el init.rc:

on boot
    start myscript
service myscript /system/bin/myscript
    user system
    disabled
    oneshot

Ejecuto el servicio como sistema ya que supuestamente tiene rw y ejecuto permisos: pero aún no puede ejecutar. Lo que creo que podría ser el problema es que el punto de montaje para el sistema de archivos aparece como de solo lectura, visto por el comando de montaje:

/ $ mount
rootfs / rootfs rw,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
tmpfs /mnt/secure tmpfs rw,seclabel,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/shm tmpfs rw,seclabel,relatime,size=1024k,mode=775,uid=1013,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
pstore /sys/fs/pstore pstore rw,relatime 0 0
/dev/block/mmcblk3p1 /boot vfat rw,noatime,nodiratime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
/dev/block/mmcblk3p2 /recovery vfat rw,noatime,nodiratime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
/dev/block/mmcblk3p5 /system ext4 ro,seclabel,relatime,data=ordered 0 0
/dev/block/mmcblk3p4 /data ext4 rw,seclabel,nosuid,nodev,noatime,nodiratime,noauto_da_alloc,errors=panic,data=ordered 0 0
/dev/block/mmcblk3p6 /cache ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/mmcblk3p7 /device ext4 ro,seclabel,nosuid,nodev,relatime,data=ordered 0 0
adb /dev/usb-ffs/adb functionfs rw,relatime 0 0
none /sys/kernel/debug debugfs rw,relatime 0 0
/dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/block/vold/179:1 /mnt/media_rw/extsd vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/fuse /storage/extsd fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0

Pero no puedo averiguar en qué parte del archivo init.rc puedo establecer la partición que /sistema de archivos del sistema en rw (y ejecutar) cuando se monta.

Respuestas (3)

Ni siquiera necesita ingresar a su computadora Solo necesita usar chmod 755 myscriptY listo, eso es todo

Esa es solo la declaración del servicio, debe haber algún medio para iniciar el servicio para que funcione. tienes que llamar

start init_remove

en el evento de activación deseado para que se inicie el servicio, hay diferentes activadores disponibles según la posición de inicio, para su caso, inicie su servicio "init_remove" después de que se hayan iniciado los servicios del sistema y zygote.

Alternativamente, también puede usar algunas clases de servicio que están en su secuencia de comandos de inicio y su secuencia de comandos se ejecutará automáticamente junto con los servicios en su clase especificada sin necesidad de un inicio explícito.

Compruebe el archivo Léame de sintaxis de inicio aquí

He estado tratando de buscar desencadenantes que ocurran después de los servicios del sistema y del cigoto. No sé si debería usar post-init o algo así. Seguiré investigando... gracias por la respuesta, aceptaré cuando lo resuelva.
por favor vea mi edición anterior para lo que probé
Encuentre un disparador más cercano a la finalización del arranque, que debería funcionar ya que todos los servicios del sistema se habrían iniciado para entonces. por ejemplo, si sus scripts de inicio tienen el activador de propiedad sys.boot_completed=1, entonces podría ser un buen lugar para comenzar
Intenté eso. pero recibo este error: init: cannot execve('/system/etc/init_remove.sh'): Permission deniedporque todo el sistema de archivos es de solo lectura. Tendría que hacer un remontaje manualmente.
Algo de progreso... vea mi edición actualizada arriba
¿Ha modificado los permisos apropiados en su secuencia de comandos? Intente ejecutarlo primero a través de un emulador o adb mientras el sistema se está ejecutando.
Sí, entiendo Bad Mode. ¿Creo que necesito ponerlo en una ubicación diferente?
La ubicación en el sistema no importa, solo asegúrese de que tenga los permisos adecuados para ejecutarse y se comporte como se espera cuando lo pruebe.
Se ejecuta cuando escribo sh myscriptpero no cuando lo hago./myscript
Gracias @Aug.Thade. Me señalaste en la dirección correcta. Lo descubrí en base a lo que dijiste.

Como siempre, la respuesta fue más simple (aunque tomó horas de investigación) de lo que pensaba.

Explicación

La respuesta fue que init no estaba viendo el archivo como ejecutable. execveDescubrí que la llamada al sistema devuelve errores Permission deniedporque no puede determinar si es el tipo de archivo correcto para ejecutar, entre otros errores que podrían causarlo. Desde que @Agu.Thade mencionó si tenía permisos, investigué más al respecto. Después de aproximadamente 16 horas de tratar de solucionar la basura del sistema de archivos ro que pensé que estaba causando el problema, me di cuenta de que todos los ejecutables en la carpeta /system/bin eran verdes y mi script era blanco (archivo normal). Entonces, usando el consejo de chmod de @Agu.Thade, traté de chmod +xadb que devolvió Bad mode.

Respuesta

Tres horas más tarde, finalmente pensé que tal vez debería pasar el guión a mi computadora chmod +x myscripty adb push myscript /system/bin/. Así lo hice, ejecuté ls, y SUFICIENTEMENTE, el archivo se volvió verde (reconocido como ejecutable). Reinicié y, por supuesto, mi script se ejecutó.