8 votos

Termux: ¿Se puede ejecutar termux a través de adb sin *ninguna* interacción directa con el dispositivo?

Sé cómo abrir la aplicación termux, ejecutar (por ejemplo) sv up sshd, y luego interactuar con el dispositivo Android a través de ssh, rsync, etc. Esto es solo un ejemplo, y lo mismo también es cierto para cualquier otro procedimiento iniciado por termux.

Sin embargo, para hacer esto, es necesario realizar esa apertura manual y el comando manual sv up sshd en termux en el dispositivo en sí mismo.

Quiero ser capaz de realizar esa interacción inicial de termux desde mi computadora de escritorio a través de adb sin ninguna interacción directa con el dispositivo en sí mismo, aparte de enchufar el cable USB.

He buscado soluciones, pero parece que nadie ha encontrado una manera de interactuar con termux excepto por primero abrir manualmente esa aplicación en el dispositivo, lo cual no quiero hacer.

Sin embargo, ¿podría haber pasado por alto algo? Estoy esperando que realmente haya pasado por alto algo, y que de alguna manera pueda comenzar procedimientos iniciados por termux a través de adb.

¿Alguien sabe cómo se podría hacer eso?

Gracias de antemano.

2 votos

ADB shell es solo una aplicación (con UID 2000). Y las aplicaciones no pueden acceder a los directorios de otras aplicaciones sin acceso de root. Relacionado: ¿Cómo ejecutar un programa en el contexto de una aplicación con Magisk?. // Puedes agregar sshd a .bashrc o .profile (para que se inicie cada vez que se lance Termux) y luego lanzar la aplicación usando adb shell am start -n com.termux/.HomeActivity.

0 votos

Tengo acceso de root, pero aún así, veo en el artículo relacionado que tendría que ejecutar un procedimiento complicado para obtener la funcionalidad descrita. Sin embargo, usando .profile y el comando am start estoy logrando lo que quiero, así que eso es suficiente para mí, por ahora. Algún día intentaré encapsular ese otro procedimiento de varios pasos en alguna especie de utilidad, sin embargo, porque sería muy útil ejecutar comandos basados en termux programáticamente. ¡Gracias!

6voto

Karthik Hariharan Puntos 509

Puedes usar run-as para acceder a tu entorno de Termux desde adb sin necesidad de ser root o usar ssh.

Ejecuta adb shell y luego:

run-as com.termux files/usr/bin/bash -lic 'export PATH=/data/data/com.termux/files/usr/bin:$PATH; export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so; bash -i'

Esto te dará una shell de Termux.

4voto

Avanst Puntos 513

Según el comentario de Irfan Latif arriba, lo siguiente funciona:

  1. Iniciar termux

  2. Hacer lo siguiente:

    echo 'sv up sshd
    sshd started' > .profile
  3. Ejecutar esto siempre que quiera iniciar sshd a través de adb:

    adb shell am start -n com.termux/.HomeActivity

0 votos

¡Gracias! Esta sugerencia funciona, pero configura termux para iniciar siempre sshd, incluso si lo estoy ejecutando de forma interactiva a través del dispositivo Android. Quiero poder ejecutar termux de forma interactiva tanto a través del dispositivo Android como mediante una conexión adb externa.

4voto

Ashish Puntos 1
adb shell am start -n com.termux/.HomeActivity
adb shell input text "tu comando aquí"
adb shell input keyevent ENTER

0 votos

Sí, eso funciona, pero solo ejecuta un comando a la vez. He estado buscando una forma de ejecutar de forma remota una shell interactiva de termux, donde escribo comandos y se ejecutan uno tras otro, justo como sucede después de invocar "adb shell". La respuesta de @josh3736 logra esto.

0 votos

Esto no parece funcionar si la pantalla está apagada en el dispositivo

0voto

EDllT Puntos 11

2024 solución adecuada

Termux te permite iniciar el servicio de ejecución de comandos a través de am permitiéndote pasar extras también

adb shell /system/bin/am startservice --user 0 -n com.termux/com.termux.app.RunCommandService \
-a com.termux.RUN_COMMAND \
--es com.termux.RUN_COMMAND_PATH '/data/data/com.termux/files/usr/bin/sleep' \
--esa com.termux.RUN_COMMAND_ARGUMENTS '10' \
--es com.termux.RUN_COMMAND_WORKDIR '/data/data/com.termux/files/home' \
--ez com.termux.RUN_COMMAND_BACKGROUND 'true' \
--es com.termux.RUN_COMMAND_SESSION_ACTION '0'

En este comando, fíjate cómo configuro la opción de fondo a true, lo cual es importante para que se ejecute automáticamente en segundo plano (la notificación te mostrará que una tarea se está ejecutando en segundo plano)

En el ejemplo anterior, estamos ejecutando el comando sleep y pasando 10 como argumento, lo que hará que termux básicamente ejecute sleep 10. Una vez completada la ejecución, termux saldrá automáticamente.

Más información se puede encontrar aquí

https://github.com/termux/termux-app/wiki/RUN_COMMAND-Intent#basic-examples

[Mensaje al moderador que borró mi publicación anterior (¿cómo puedo contactarte?)]

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X