Comment exécuter un script au démarrage dans CM12.1?

9

La plupart des questions que je peux trouver à ce sujet datent de 2011 et des alentours, il n'est donc pas trop surprenant que les choses aient changé depuis. J'ai essayé tout un tas de choses, sans aucun résultat.

Il y a des scripts dans /system/etc/init.d(qui apparaissent également sous /etc/init.dsur mon appareil). En particulier, il existe un 00bannerscript qui est censé enregistrer un message de bienvenue. Le message de bienvenue n'apparaît jamais dans logcat.

J'ai placé mon propre script ici, qui a finalement été réduit à rien d'autre que ceci:

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

Rien. N'apparaît jamais dans logcat sauf s'il est exécuté manuellement via le terminal. Alors ça marche.

Il y a aussi un 90userinitfichier ici, qui invoque /data/local/userinit.shs'il existe. Je l'ai créé avec le même contenu que ci-dessus. Encore une fois, rien n'apparaît jamais dans logcat. Ce qui n'est pas surprenant, vraiment, car si 00bannerne fonctionne pas, cela ne le sera pas non plus.

J'ai recherché quelque chose nommé "init.rc" mais rien de tel n'existe nulle part sur mon appareil.

Tous mes scripts ont 755 autorisations.

Que puis-je essayer d'autre? (autres que les applications qui exécutent des scripts pour moi)

RomanSt
la source
Quel script voulez- vous exécuter et pourquoi?
inoubliableidSupportsMonica
Malheureusement, la petite quantité de fouilles que j'ai effectuée a abouti à "Ne fonctionnera pas sur les roms personnalisées". Apparemment, CM a sa propre façon de faire les choses. Je ne suis pas sûr de vouloir jouer avec. Mais apparemment, vous pouvez créer votre propre fichier boot.img et y ajouter vos scripts personnalisés. Peut-être que cela fonctionnera pour toi.
jer3my
@ jer3my Je suis parfaitement heureux d'accepter cela comme la réponse réelle et d'attribuer la prime si vous avez des liens que je trouverai convaincants / faisant autorité.
RomanSt
Je posterai la réponse dans une seconde, j'ai également trouvé autre chose qui pourrait vous aider.
jer3my
l'init.rc fait partie des initramfs, il n'est pas inclus dans le boot.img vous pouvez utiliser un outil comme unmkbootimg pour l'extraire, le modifier puis le reconstruire en utilisant mkbootimg, les deux outils sont disponibles dans le projet cm dites-moi quel os vous utilisent, je vais les compiler pour vous: D
lord-ralf-adolf

Réponses:

5

il existe une méthode simple pour ajouter le support init.d à tout Android rooté pour les versions 4.0 et supérieures, google a fait un script qui s'exécute au démarrage en tant que superutilisateur le script est- install-recovery.shil utilisé pour reflasher la récupération de stock à chaque démarrage, ils pensaient que c'était un bon sécurité pour empêcher les récupérations personnalisées, mais il a ouvert un nouveau trou qui peut être exploité par les utilisateurs pour falsifier la fonction init.d. Dépendances : pour que cette méthode fonctionne, vous avez besoin des éléments suivants

  1. Boîte occupée installée avec le run-partslien symbolique vers votre chemin comme/system/xbin
  2. De toute évidence, vous allez avoir besoin d'un téléphone rooté /systemcapable de monterrw
  3. la version du noyau n'a pas d'importance.

Méthode I: (La manière la plus simple!)

  1. Téléchargez ce fichier APK (gratuit à utiliser, ne pas mettre en miroir, merci @Ryuinferno de XDA).
  2. Installez l'apk comme n'importe quelle application normale.
  3. Lancez l'appli.
  4. cliquez sur Activer! c'est tout, vous êtes tous setinit.d est maintenant pris en charge, vous pouvez cliquer sur le bouton de test ou redémarrer votre téléphone pour voir si vos scripts init.d sont fermés
  5. vous pouvez désinstaller l'application, cela n'affectera pas le support init.d

Méthode II: (difficulté: moyenne)

  1. Téléchargez ce zip, décompressez-le et mettez init.sh sur votre carte SD (dans cet exemple, /sdcardça peut changer d'un appareil à l'autre.

  2. ouvrez maintenant un terminal ou utilisez-le adb shelldepuis un ordinateur et exécutez le script.
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

le script s'exécutera et vous demandera de redémarrer deux fois, c'est tout, vous avez officiellement le support init.d: ​​D

Référence: [MOD] [APK + SCRIPT + ZIP] Activez Init.d pour tous les téléphones sans besoin de noyaux personnalisés !!!

lord-ralf-adolf
la source
Étant donné que le fichier zip est hébergé chez XDA, il doit y avoir un tutoriel que vous avez suivi ou que vous avez connu d'une manière ou d'une autre. Pourriez-vous mentionner le lien pour cela? J'ai besoin de chercher autre chose dedans. :)
Firelord
1
@Firelord oui le script n'est pas le mien, il a été utilisé à d'autres fins, je l'ai pris d'ici la vue de poste unique> forum.xda-developers.com/… , le tutoriel complet concerne xposed et nexus 6 >> forum.xda -developers.com/nexus-6/general/…
lord-ralf-adolf
@Firelord trouve un nouveau lien de référence inclus dans la réponse :)
lord-ralf-adolf
Merci, je vous donnerai probablement la prime à moins que quelque chose de plus simple ne se présente. Mais honnêtement, je pensais que l'ajout d'un script shell à exécuter au démarrage serait comme la chose la plus simple que l'on puisse faire sur quelque chose comme CM. De toute évidence, ce n'est pas le cas; c'est plus compliqué que de coder une application boot_completed qui fait ce que je veux, donc je vais le faire à la place.
RomanSt
@romkyns old cm prend en charge init.d par défaut, mais depuis qu'elle est devenue une entreprise, leurs méthodes ont changé, bien que le problème init.d se trouve sur la nouvelle version de lollipop avec une stricte politique selinux / boot_completed est un moyen de le faire aussi et comme vous dit que ce sera plus simple
lord-ralf-adolf
2

Edit: J'ai vu la fin du post, d'une manière, j'essaierai d'ajouter sans applications dès que possible (pas à la maison, publier à l'aide d'un mobile), mais vous pouvez l'utiliser, si quelque chose d'autre ne fonctionne pas.

Vous pouvez essayer d'utiliser l'application appelée Tasker .

Il coûte 3,29 $ et nécessite un accès root, mais il peut exécuter des scripts Shell. En outre, il a une version d'essai afin que vous puissiez essayer avant d'acheter.

Créez d'abord une tâche. Accédez à l'onglet Tâche, appuyez sur + signe, saisissez le nom de la tâche. Maintenant, allez à nouveau + signe et tapez shellfiltre. Vous trouverez une option Run Shell, sélectionnez-la et configurez-la selon vos besoins.

Après cela, revenez au premier onglet - Profils, appuyez sur + signe pour en créer un nouveau. Sélectionnez Event comme type, allez sur System et sélectionnez Device Boot. Revenez en arrière et il vous sera demandé de sélectionner la tâche. Maintenant, sélectionnez la tâche créée précédemment et vous êtes prêt à partir!

AndroidNotSoPowerUser
la source
1

Cela vous oblige à flasher un zip mais vous pouvez ensuite mettre vos scripts dans / system / etc / startup et ils devraient alors démarrer automatiquement avec le téléphone.

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

Aussi de mon commentaire sous la question. J'ai essayé de regarder dans mon histoire mais je n'ai pas trouvé le lien où les gens prétendaient que CM avait sa propre façon d'exécuter des scripts au démarrage.

Éditer. Après avoir creusé un peu plus, ce n'est pas CM, disons, qui fait sa propre chose pour les scripts. C'est le noyau. Tous les noyaux ne prennent pas en charge init.d pour Android. Si vous postez quel appareil vous utilisez. Je peux chercher un noyau qui prend en charge les scripts personnalisés au démarrage pour vous.

jer3my
la source
0

J'ai également le même problème lors de l'exécution du fichier de script dans le terminal dans CM12.1. La solution consiste à copier le script dans un /datadossier et à l'exécuter. Je pense donc que CM 12 autorise uniquement les scripts exécutables à partir d'un certain emplacement.

Entaah Laah
la source
0

Manière simple (travail):

  1. Préparez vos commandes post boot dans un script, par exemple / system / xbin / post-boot (set exec perm)

  2. Ajoutez le chemin de script personnalisé ci-dessus à la fin de /system/etc/init.qcom.post_boot.sh

Par exemple:

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

Terminé!

(Si vous ne trouvez pas le qcom post_boot (périphériques Qualcomm), recherchez les scripts post_boot)

Seff
la source
-1

Étapes suivantes pour exécuter des scripts au démarrage. (Adb requis)

  1. racine adb
  2. remonter adb
  3. adb pull /init.rc
  4. modifier init.rc ajouter une ligne pour exécuter un script comme sh test.sh
  5. adb push init.rc /
  6. adb shell
  7. chmod 755 init.rc
  8. redémarrage adb

ça marche pour moi. j'espère que cela vous aide.

DreamCoder
la source
1
cette méthode ne devrait pas fonctionner du tout. Le contenu des rootfs initiaux comme init.rc fait partie du ramdisk qui est restauré à partir de la mémoire flash de votre appareil à chaque démarrage. Vous devez modifier le ramdisk directement dans la partition appropriée de la mémoire flash de votre appareil
divisé par zéro
Que vous pouvez ajouter dans /system/etc/init.qcom.wifi.sh
DreamCoder
1
cette méthode ne fonctionnera pas, init.d ne peut pas être poussé! cela fait partie des initramfs, ils doivent être édités sur le boot.img que flashé à nouveau, et pour init.qcom.wifi.sh c'est spécifique à l'appareil, vous ne pouvez pas en faire une règle générale
lord-ralf-adolf