Como executar um script na inicialização no CM12.1?

9

A maioria das perguntas que posso encontrar relacionadas a isso são datadas de 2011 e, portanto, talvez não seja tão surpreendente que as coisas tenham mudado desde então. Eu tentei um monte de coisas, sem nenhum resultado.

Existem alguns scripts /system/etc/init.d(que também aparecem /etc/init.dem meu dispositivo). Em particular, há um 00bannerscript que deve registrar uma mensagem de boas-vindas. A mensagem de boas-vindas nunca aparece no logcat.

Coloquei meu próprio script aqui, que acabou sendo reduzido a nada além disso:

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

Nada. Nunca aparece no logcat, a menos que seja executado manualmente pelo terminal. Então funciona.

Há também um 90userinitarquivo aqui, que chama /data/local/userinit.shse existir. Eu criei com o mesmo conteúdo acima. Novamente, nada aparece no logcat. O que não é surpreendente, na verdade, já que se 00bannernão for executado, também não será.

Eu procurei por qualquer coisa chamada "init.rc", mas nada disso existe em qualquer lugar do meu dispositivo.

Todos os meus scripts têm 755 permissões.

O que mais posso tentar? (exceto aplicativos que executam scripts para mim)

RomanSt
fonte
Qual script você deseja executar e por quê?
unforgettableidSupportsMonica
Infelizmente, a pequena quantidade de escavações que fiz resultou em "Não funcionará em ROMs personalizadas". Aparentemente, CM tem sua própria maneira de fazer as coisas. Não tenho certeza se você quer mexer com isso. Mas, aparentemente, você pode criar seu próprio arquivo boot.img e adicionar seus scripts personalizados. Talvez isso funcione para você.
jer3my
@ jer3my, estou perfeitamente feliz em aceitar isso como a resposta real e atribuir a recompensa se você tiver links que eu considerarei convincentes / oficiais.
RomanSt
Vou postar a resposta em um segundo, também encontrei outra coisa que pode ajudá-lo.
jer3my
O init.rc faz parte do initramfs que não está incluído no boot.img. Você pode usar uma ferramenta como unmkbootimg para extraí-lo, editá-lo e depois reconstruí-lo usando mkbootimg. As duas ferramentas disponíveis no projeto cm me dizem o que você está usando eu vou compilá-los para você: D
lord-ralf-adolf

Respostas:

5

existe um método simples de adicionar suporte init.d a qualquer android raiz para as versões 4.0 e posteriores, o google criou um script que é executado na inicialização como superusuário, o script install-recovery.shé usado para reflash a recuperação de estoque a cada inicialização que eles consideravam um bom segurança para impedir recuperações personalizadas, mas abriu um novo buraco que pode ser explorado pelos usuários para falsificar o recurso init.d. Dependências : para que este método funcione, é necessário o seguinte

  1. Caixa ocupada instalada com o run-partslink simbólico para o seu caminho, como/system/xbin
  2. Obviamente, você vai precisar de um telefone enraizado com a /systemcapacidade de montar comorw
  3. versão do kernel não importa.

Método I: (A maneira mais fácil!)

  1. Faça o download deste APK (gratuito, não espelha, obrigado @Ryuinferno do XDA).
  2. Instale o apk como qualquer aplicativo normal.
  3. Inicie o aplicativo.
  4. clique em Ativar! é isso aí, tudo o que setinit.d agora é suportado. Você pode clicar no botão de teste ou reiniciar o telefone para ver se os scripts init.d foram encerrados.
  5. você pode desinstalar o aplicativo, isso não afetará o suporte init.d

Método II: (dificuldade: média)

  1. Faça o download deste zip, descompacte-o e coloque init.sh no seu sdcard (neste exemplo, será /sdcardpossível mudar de dispositivo para outro.

  2. Agora abra um terminal ou use-o adb shellno computador e execute o script.
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

o script será executado e solicitará que você reinicie duas vezes, é isso que você tem oficialmente o suporte init.d: ​​D

Reference: [MOD] [APK + SCRIPT + ZIP] Ative o Init.d para qualquer telefone sem necessidade de kernels personalizados !!!

senhor-ralf-adolf
fonte
Como o arquivo zip está hospedado no XDA, deve haver um tutorial que você seguiu ou conheceu de alguma forma. Você poderia mencionar o link para isso? Eu preciso procurar algo mais nele. :)
Firelord
11
@Firelord sim, o script não é meu, foi usado para outros fins, tirei daqui a única exibição em post> forum.xda-developers.com/… , o tutorial completo é sobre xposed e nexus 6 >> forum.xda -developers.com/nexus-6/general/…
lord-ralf-adolf
@Firelord encontrar novo link de referência incluídos na resposta :)
lord-ralf-Adolf
Obrigado, provavelmente darei a você a menos que algo mais simples apareça. Mas eu sinceramente pensei que adicionar um script de shell para executar na inicialização seria a coisa mais simples que alguém poderia fazer em algo como o CM. Claramente não é; é mais complicado do que codificar um aplicativo boot_completed que faça o que eu quero, então eu o farei.
RomanSt
@romkyns old cm suporta init.d por padrão, mas desde que se tornou uma empresa, seus caminhos mudaram, embora o problema init.d esteja na nova versão do lollipop com rigorosa política selinux / boot_completed, também é uma maneira de fazê-lo. disse que será mais simples
lord-ralf-adolf
2

Editar: eu vi a postagem final, desta maneira, tentarei adicionar sem aplicativos o mais rápido possível (não em casa, publicando usando dispositivos móveis), mas você pode usá-lo, se alguma outra coisa não funcionar.

Você pode tentar usar o aplicativo chamado Tasker .

Custa 3,29 $ e requer acesso root, mas pode executar scripts Shell. Além disso, possui versão de teste para que você possa experimentar antes de comprar.

Primeiro crie a tarefa. Vá para a guia Tarefa, toque em + sinal, digite o nome da tarefa. Agora vá novamente + assine e digite o shellfiltro. Você encontrará a opção Run Shell, a selecionará e a configurará de acordo com suas necessidades.

Depois disso, volte para a primeira guia - Perfis, toque em + sinal para criar um novo. Selecione Evento como tipo, vá em Sistema e selecione Inicialização do dispositivo. Volte e você será solicitado a selecionar a tarefa. Agora selecione a tarefa criada anteriormente e você está pronto para começar!

AndroidNotSoPowerUser
fonte
1

Isso exige que você faça um zip com um zip, mas então você pode colocar seus scripts em / system / etc / startup e eles devem iniciar automaticamente com o telefone.

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

Também do meu comentário sob a pergunta. Tentei procurar na minha história, mas não consegui encontrar o link em que as pessoas alegavam que o CM tinha seu próprio modo de executar scripts na inicialização.

Editar. Depois de um pouco mais de escavação, não é o CM, por exemplo, que faz o seu próprio para os scripts. É o núcleo. Nem todos os kernels suportam init.d para android. Se você postar qual dispositivo você está usando. Posso procurar um kernel que suporte scripts personalizados na inicialização para você.

jer3my
fonte
0

Eu também tenho o mesmo problema ao executar o arquivo de script no terminal no CM12.1. A solução é copiar o script para a /datapasta e executá-lo. Então, eu acho que o CM 12 permite apenas scripts executáveis ​​a partir de um determinado local.

Entaah Laah
fonte
0

Maneira simples (trabalhando):

  1. Prepare seus comandos pós-inicialização em um script, diga / system / xbin / post-boot (set exec perm)

  2. Adicione o caminho do script personalizado acima no final de /system/etc/init.qcom.post_boot.sh

Por exemplo:

eco / system / xbin / pós-inicialização >> /system/etc/init.qcom.post_boot.sh

Feito!

(Se você não conseguir encontrar o qcom post_boot (dispositivos Qualcomm), procure por scripts post_boot)

Seff
fonte
-1

Etapas a seguir para executar scripts no momento da inicialização. (Adb obrigatório)

  1. raiz adb
  2. remontagem adb
  3. adb pull /init.rc
  4. edite init.rc adicione linha para executar scripts como sh test.sh
  5. adb push init.rc /
  6. shell adb
  7. chmod 755 init.rc
  8. reinicialização adb

isso funciona para mim. Espero que isso lhe ajude.

DreamCoder
fonte
11
esse método não deve funcionar. O conteúdo dos rootfs iniciais, como o init.rc, faz parte do ramdisk, que é restaurado a partir do seu dispositivo, a cada inicialização. Você precisa modificar o ramdisk diretamente na partição apropriada da memória flash do seu dispositivo
dividido por zero
Do que você pode adicionar em /system/etc/init.qcom.wifi.sh
DreamCoder
11
esse método não funcionará, init.d não pode ser enviado! faz parte do initramfs, eles precisam ser editados no boot.img e piscar novamente, e para init.qcom.wifi.sh é específico do dispositivo, você não pode fazer uma regra geral a partir dele
lord-ralf-adolf