En regardant autour de mon système de fichiers Android, j'ai découvert qu'il en avait un, en fait /etc/init.d/
. Après avoir jeté un coup d'œil, j'ai trouvé /etc/init.d/20userinit
les lignes suivantes:
if [ -e /data/local/userinit.sh ];
then
log -p -i -t userinit "Executing /data/local/userinit.sh";
busybux chmod +x /data/local/userinit.sh;
logwrapper /system/bin/sh /data/local/userinit.sh;
setprop cm.userinit.active 1;
fi;
Ceci étant, bien sûr, exactement ce dont j'avais besoin, j'ai écrit le script suivant sur mon ordinateur, puis je l'ai copié sur mon appareil:
#!/system/bin/sh
dropbear -s -g
(poussé sur l'appareil via scp userinit.sh phone:/data/local/userinit.sh
, remarquez:])
Redémarrez le périphérique, puis ps | grep "[d]ropbear"
exécutez-le et, bien sûr, il fonctionne. Fraîcheur!
/data/init.sh
fonctionne au démarrage, si vous avez la racine, vous pouvez le modifier comme vous le souhaitez. Faites attention ;)Éditer: Apparemment, vous devrez peut-être insérer le script modifié dans l'image de démarrage également. Informations sur la procédure à suivre ici: http://forum.xda-developers.com/showthread.php?t=443994
la source
find / -name "init.sh"
tourne quoi que ce soit. Existe-t-il d'autres scripts qui s'exécutent au démarrage?/etc/init.rc
qui commence la coquille. Il devrait appeler init.sh mais si ce n’est pas le cas, vous pouvez simplement le faire appeler votre propre script./data
mais non/data/init/.sh
ou/etc/init.rc
. Grep ne trouve aucune instance intéressante de la chaîneinit
dans/etc
(même récursive).Rechercher dans le
/etc/
répertoire. Il est généralement placé dans une/system/
partition que vous pouvez monter en tant que RW:Certaines étapes ci-dessus peuvent être remplacées par:
et plus tard remonter RO:
Maintenant, votre tâche est de trouver un
*rc
fichier exécutable ou un fichier que vous modifiez pour atteindre votre objectif:Google sur chaque candidat pour savoir comment ce fichier a été utilisé.
Les bons candidats pour inclure des scripts personnalisés sont les lignes de:
Comme chaque appareil est unique, vous devrez peut-être vous-même deviner les critères de recherche ...
Par exemple, j'ai trouvé
/etc/mkshrc
lequel utilisé par Korn Shell. Je mets à jour ce fichier pour étendrePATH
env var et maintenant chaque fois queadb shell
j’ai des liens symboliques Busybox dans mon PATH!Voir aussi difficile (si vous n'avez pas de chance avec la recherche de fichier magique ): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
la source
/system
estsystem.img
et/etc
est un lien symbolique dans/system
.J'ai essayé toutes ces méthodes et aucune d'entre elles n'a fonctionné pour moi. Ce qui a bien fonctionné était cependant basé sur la réponse de lord-ralf-adolf ici. Comment exécuter un script au démarrage dans CM12.1?
trouver le fichier
/system/etc/install-recovery.sh
et ajouter la ligne suivante au début/data/init.sh &
ensuite
Terminé! Vous pouvez maintenant mettre ce que vous voulez
/data/init.sh
et il sera lancé au démarrage. Si le fichier/system/etc/install-recovery.sh
ne se trouve pas dans votre système, cette réponse ne fonctionnera pas pour vous. Ne vous embêtez pas pour le créer.la source
/system/etc/install-recovery.sh
n'était pas présent, mais il est toujours exécuté au démarrage s'il est présent, donc ça vaut la peine de vérifier.Les choses étaient simples avant Android 5, à la différence de SELinux
enforcing
. Vous pouvez placer votre code dans n'importe quel script ou remplacer un fichier binaire par un script exécuté avec les privilèges root au démarrage. Une autre méthode consistait à définir uninit
service personnalisé spécifiquement pour exécuter par lots des scripts à partir de certains répertoires.Sur la base de ces approches développeurs de ROM personnalisées introduites différentes pseudo-
init.d
phénomène comme/etc/init.d/
,/etc/install-recovery.sh
,/etc/init.qcom.post_boot.sh
,/system/bin/debuggerd
,/data/init.sh
,/data/local/userinit.sh
,/data/local/init.d/
etc.Cependant, un processus fonctionnant avec UID,
0
mais dans un contexte SELinux restreint, est totalement impuissant. Un service a commencé eninit.rc
fichier avecu:r:init:s0
contexte ne peut même exécuter un script shell à partir/system/bin/
, si les besoins de la politique SELinux à patcher pour injecter un libre contexte par exemple Magisk définitu:r:magisk:s0
. Après cela, il est possible d'exécuter un script directement en tant queinit
service ou à partir d'uninit.d
répertoire similaire.Pour plus de détails, voir Comment exécuter un fichier exécutable au démarrage et le garder actif?
la source
Manière simple (travail):
Préparez vos commandes de post-démarrage dans un script, par exemple, / system / xbin / post-boot (set exec perm)
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 des scripts post_boot)
la source
Si vous avez installé magisk, vous pouvez placer le .sh sur:
ou pour
Ne pas oublier de le rendre exécutable:
chmod +x your-script.sh
.Plus d'infos: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
la source